nginx basic_auth豁免问题

我试图从basic_auth免除一个位置,而网站的其他部分确实需要它。 阅读它我的configuration应该工作,但由于某种原因,它仍然返回401 / asd / qwe /。

server { server_name domain.com www.domain.com; root /var/www/domains/domain.com/htdocs/public; index index.php index.htm; location / { location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.domain.com.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/domains/domain.com/htdocs/public$fastcgi_script_name; } auth_basic "Restricted"; auth_basic_user_file /var/www/domains/htpasswd/domain.com.htpasswd; } location /asd/qwe/ { auth_basic off; allow all; location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.domain.com.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/domains/domain.com/htdocs/public$fastcgi_script_name; } } } 

Finnalyfind了解决办法:

服务器{

server_name domain.com http://www.domain.com;

root /var/www/domains/domain.com/htdocs/public;

access_log /var/log/nginx/domains/domain.com/access.log;

error_log /var/log/nginx/domains/domain.com/error.log; index index.php index.htm;

  auth_basic_user_file /var/www/domains/htpasswd/domain.com.htpasswd; location ~ /.svn/ { deny all; } location ~ /.htaccess { deny all; } location ^~ /psp/callback/ { auth_basic off; include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.domain.com.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/domains/domain.com/htdocs/public$fastcgi_script_name; } location / { auth_basic "Restricted"; } location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.domain.com.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/domains/domain.com/htdocs/public$fastcgi_script_name; } # Zend Framework rewrite if (!-e $request_filename) { set $zfRewrite 1; } if ($zfRewrite = 1) { rewrite ^.*$ /index.php last; } 

}

除非您使用文字匹配(=位置前缀),否则处理在第一次匹配时停止。 将/ asd / qwe块放在/块之上,它应该可以工作。

有关更多信息,请参阅location指令中的nginx文档:

http://wiki.nginx.org/HttpCoreModule#location