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

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

我正在尝试使用密码保护 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指令里面。

来源:在 Nginx 中保护 WordPress 登录

相关内容