Nginx:try_files外部位置

Ser*_*pez 3 configuration nginx

我正在使用nginx配置一个非常标准的Web服务器.服务器正在按预期工作,但是,我想要了解一个小的配置细节.

我目前的配置是:

index index.html index.htm index.php;

location / {
    try_files $uri $uri/ /index.php?q=$uri;
}

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_index index.php;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include /etc/nginx/fastcgi_params;
}
Run Code Online (Sandbox Code Playgroud)

使用此配置,如果我访问:http://myweb.com/wp-content/uploads/2012/10/cropped-bitmap11.png/lol.php我按预期获得404.

但是,使用此配置:

try_files $uri =404;

location ~ \.php$ {
    fastcgi_index index.php;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include /etc/nginx/fastcgi_params;
}
Run Code Online (Sandbox Code Playgroud)

我得到一个"访问被拒绝"的空白页面.

为什么结果不同?

谢谢

VBa*_*art 14

您可能认为try_files服务器级别必须适用于每个请求.一点也不.恰恰相反,它仅适用于不匹配任何location块的请求.