我最近部署了我的第一个Nginx设置,一切都很好,除了位置解析让我疯了.我有一个简单的PHP fastcgi设置如下:
location ~ \.PHP { if (!-e $request_filename) { return 404; } include /etc/Nginx/fastcgi.conf; keepalive_timeout 0; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass 127.0.0.1:9000; }
现在我想用基本的auth保护一些位置,如下所示:
location /madmin { auth_basic "Restricted"; auth_basic_user_file /var/www/localhost/admincp/.htpasswd; }
有了他的设置,Nginx在转到/ madmin时要求输入密码,但不会在/madmin/foo.PHP上询问.如果我将auth位置更改为“location~ ^ / madmin”,那么Nginx会提供PHP文件供下载…
是不是可以在Nginx中配置多个位置?如果没有,这里的解决方法是什么?
谢谢你的帮助.
有关Nginx如何处理请求(包括位置)的说明,请参阅
http://nginx.org/en/docs/http/request_processing.html.维基文档也有一些很好的例子.不幸的是,最有可能的是你想要的当前未记录的功能.
如前所述,只有一个位置在Nginx中获胜;但是,您可能不知道Nginx支持位置内的位置.所以你的位置策略实际上可能就像这个示例服务器(0.8.31中的fastcgi.conf):
upstream my-backend { localhost:9000; } server { listen 80; server_name my-awesome-PHP.site; root /path/to/root; # The protected location location /protected { auth_basic "Give me codes."; auth_basic_user_file /path/to/.htpasswd; location ~ \.PHP${ include fastcgi.conf; fastcgi_pass my-backend; } } # Normal files (blank location is OK,just means serve from root) location / { } # PHP for normal stuff location ~ \.PHP${ include fastcgi.conf; fastcgi_pass my-backend; } }