我正在尝试使用密码保护 Nginx 服务器上的 WordPress 登录页面。当我导航到http://www.example.com/wp-login.php,这会弹出“需要身份验证”提示(而不是 WordPress 登录页面),要求输入用户名和密码。但是,当我输入正确的凭据时,它会下载 PHP 源代码 (wp-login.php),而不是显示 WordPress 登录页面。
我的 htpasswd 文件的权限设置为 644。
以下是我的网站配置文件的服务器块中所涉及的指令:
location ^~ /wp-login.php {
auth_basic "Restricted Area";
auth_basic_user_file htpasswd;
}
另外,这是我的配置文件的全部内容(包括上面四行):
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;
}
}
如果有任何区别,我正在使用带有 Nginx 1.4.6 和 ISPConfig 3.0.5.4p3 的 Ubuntu 14.04.1 LTS。
答案1
让我翻译一下当前的配置。每当浏览器请求时/wp-login.php
,请求仅匹配部分location ^~ /wp-login.php
,不包括你的 php-fpm 配置。因此,nginx 只需应用 auth_basic,然后吐出源代码wp-login.php因为 nginx 无法解析它。
解决方案是添加这样的 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
指令里面。