zoukankan      html  css  js  c++  java
  • 一个nginx匹配很诡异的问题

    nginx配置如下:

    location ~ .php$ {
    root /opt/nginx/html;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;

    }

    按照道理说访问地址如:

    xxx.com/statichtml/json.php

    应该可以正常访问,可每次访问都是直接下载json.php文件,试了很多次,每次都是如此。

    我自己创建一个phpinfo.php,安装目录

    xxx.com/statichtml/phpinfo.php却可以正常访问。

    难道是权限的问题??

    看了下我自己创建phpinfo.php使用root身份创建的。

    -rw-r--r-- 1 root  root   17 Sep 20 04:53 phpinfo.php

    json.php却是:

    -rwxrwxrwx 1 user1 root 4151 Sep 12 09:48 json.php*

    创建者是user1.

    发现问题不是上面,出在:


    location ~* /statichtml/.*.php$ {

    root /opt/nginx/html/;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;

    }

    location ^~ /statichtml/ { 如果开启这个,json2.php就直接下载了。因为这个匹配会覆盖掉.php。不管放在前面还是后面。
    root /opt/nginx/html/;


    }

    上面做法不对,

    两个匹配不能区分静态文件和.php文件。

    我改成:

    location ~* /statichtml/.*.(json|gif|jpg|png|jpeg|html|jpeg|css|js)$ {
       root /opt/nginx/html/;


    }

    可以解决问题。

    后来想的办法:

    location ~* /statichtml/.*.php$ {

    root /opt/nginx/html/;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;

    }
    location ~ /statichtml {

    root /opt/nginx/html;
    }

    也可以。

    参考文章:

    nginx alias的设置

    nginx也有像apache的别名功能,格式为:

    location ~ /alias {
    root /home/www/default;
    index index.php;
    }

    但nginx在处理php脚本时,需要传递给fastcgi才能处理,所以比apache的别名设置多一个,下面我们以phpmyadmin别名设置为例:

    location ~ ^/phpmyadmin.+.php$ {
    root /home/www/default;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    }
    location ~ /phpmyadmin {
    root /home/www/default;
    index index.php;
    }
    最后匹配理带有"~"和"~*"的指令,如果找到相应的匹配,则nginx停止搜索其他匹配;当没有正则表达式或者没有正则表达式被匹配的情况下,那么匹配程度最高的逐字匹配指令会被使用。
    参考:
    http://www.cnblogs.com/youxin/p/3944568.html

  • 相关阅读:
    ActiveSync合作关系对话框的配置
    WINCE对象存储区(object store)
    Wince 隐藏TASKBAR的方法
    Wince输入法换肤换语言机制
    poj 3080 Blue Jeans 解题报告
    codeforces A. Vasily the Bear and Triangle 解题报告
    hdu 1050 Moving Tables 解题报告
    hdu 1113 Word Amalgamation 解题报告
    codeforces A. IQ Test 解题报告
    poj 1007 DNA Sorting 解题报告
  • 原文地址:https://www.cnblogs.com/youxin/p/5887352.html
Copyright © 2011-2022 走看看