Nginx密码保护目录下载源代码

我正尝试在我的Nginx服务器上密码保护WordPresslogin页面。 当我导航到http://www.example.com/wp-login.php时 ,会出现用户名和密码的“需要validation”提示(不是WordPresslogin页面)。 但是,当我input正确的凭证时,它会下载PHP源代码(wp-login.php),而不是显示WordPresslogin页面。

我的htpasswd文件的权限设置为644。

以下是我的网站configuration文件的服务器块中有问题的指令:

location ^~ /wp-login.php { auth_basic "Restricted Area"; auth_basic_user_file htpasswd; } 

或者,这里是我的configuration文件的全部内容(包括上面四行):

 server { listen *:80; server_name domain.com www.domain.com; root /var/www/domain.com/web; index index.html index.htm index.php index.cgi index.pl index.xhtml; error_log /var/log/ispconfig/httpd/domain.com/error.log; access_log /var/log/ispconfig/httpd/domain.com/access.log combine$ location ~ /\. { deny all; access_log off; log_not_found off; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location /stats/ { index index.html index.php; auth_basic "Members Only"; auth_basic_user_file /var/www/web/stats/.htp$ } location ^~ /awstats-icon { alias /usr/share/awstats/icon; } location ~ \.php$ { try_files /b371b8bbf0b595046a2ef9ac5309a1c0.htm @php; } location @php { try_files $uri =404; include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/lib/php5-fpm/web11.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors on; } location / { try_files $uri $uri/ /index.php?$args; client_max_body_size 64M; } location ^~ /wp-login.php { auth_basic "Restricted Area"; auth_basic_user_file htpasswd; } } 

如果它有什么区别,我使用Ubuntu 14.04.1 LTS与Nginx 1.4.6和ISPConfig 3.0.5.4p3。

让我翻译当前的configuration。 每当浏览器请求/wp-login.php ,请求只匹配段location ^~ /wp-login.php location ^~ /wp-login.php不包括你的php-fpmconfiguration 。 所以,nginx只是应用auth_basic,然后吐出wp-login.php的源代码,因为nginx无法parsing它。

解决方法是像这样添加php-fpm部分

  include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/lib/php5-fpm/web11.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors on; 

在你的location ^~ /wp-login.php里面location ^~ /wp-login.php指令。

来源: 保护在Nginx的WordPresslogin