PHP无法在location指令中工作

时间:2013-08-29 11:16:25

标签: php nginx

我已经设置了一个测试Virtualbox / Debian Wheezy7.1机器,带有一个裸网安装机+ nginx + php-fpm

我有SSL,php,basic_auth和允许/拒绝在服务器级别上工作。

但是,如果我想要auth的东西只用于一个路径,auth工作,但PHP的东西不起作用(index.php在Web浏览器中下载)

我知道它与nginx如何匹配location指令有关,但我不确定它是什么......

这是我的配置文件:

server {
       listen         80;
       server_name    www.test.com;
       rewrite        ^ https://$server_name$request_uri? permanent;
}



# HTTPS server

server
{
    listen 443;
    server_name www.test.com;

    root /srv/vhosts/www.test.com/html;
    index index.php ;

    ssl on;
    ssl_certificate /etc/nginx/certs/STAR.test.com.crt;
    ssl_certificate_key /etc/nginx/certs/STAR.test.com.key;

    ssl_session_timeout 5m;

    ssl_protocols SSLv3 TLSv1;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
    ssl_prefer_server_ciphers on;


    location / {
        try_files $uri $uri/ =404;
    }
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

                # With php5-fpm:
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
                deny all;
        }   

    location ^~ /testdir/ {
        auth_basic "gib login";
        auth_basic_user_file /etc/nginx/htpasswd/www.test.com.htpasswd;
        allow 192.168.1.3;   # my workstation ip
        deny all;
    }
}

编辑:先看看评论,谢谢!

1 个答案:

答案 0 :(得分:2)

According to the nginx documentation,位置指令的顺序很重要。

  

要确定哪个位置指令与特定查询匹配,请执行以下操作:   首先检查文字字符串。文字字符串与开头匹配   查询的一部分 - 将使用最具体的匹配。   然后,按照定义的顺序检查正则表达式   配置文件。匹配的第一个正则表达式   查询将停止搜索。如果没有正则表达式匹配   发现,使用了文字字符串搜索的结果。

尝试组织您的位置指令,以便首先保护要保护的目录,然后是PHP,然后是try__files指令。我对我的系统进行了快速测试,并按以下顺序构建了位置块,允许testdir受到保护,index.php仍然可以执行。

location ^~ /testdir/ {
    auth_basic "gib login";
    auth_basic_user_file /etc/nginx/htpasswd/www.test.com.htpasswd;
    allow 192.168.1.3;   # my workstation ip
    deny all;
}

location ~ \.php$ {

}

location ~ / {
    try_files $uri $uri/ 404;
}