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

  • 相关阅读:
    03-树2 List Leaves (25 分)
    03-树1 树的同构 (25 分)
    12宏
    11.代码测试、维护
    10代码编辑、编译、审查
    9.质量保证
    02-线性结构4 Pop Sequence (25 分)
    8程序效率
    7可测性
    Linux-文件权限管理
  • 原文地址:https://www.cnblogs.com/youxin/p/5887352.html
Copyright © 2011-2022 走看看