带有 basic_auth 的 nginx 反向代理-404 未找到

带有 basic_auth 的 nginx 反向代理-404 未找到

我有一个 nginx 服务器块,用于代理传递来自三个服务器的内容:gitlab、Rshiny 和来自另一个 nginx 服务器块的静态内容。所有这些都运行正常,直到我尝试为静态内容站点中的一个目录添加密码保护。我有以下配置:

代理的位置块:

location /project_builds/ {
    rewrite ^/project_builds/(.*)$ /$1 break;
    proxy_pass http://localhost:8000;
    proxy_redirect http://localhost:8000/ $scheme://$host/project_builds/;
    }   

静态页面的服务器块:

server {
    listen 8000;
    server_name localhost;

location / {
    root /web/project_builds/;
    index index.html;
    autoindex on;    
    }

location /campy_SAM {
    auth_basic "Restricted content";
    auth_basic_user_file /web/password_files/campy_SAM/.htpasswd;
    }
}

此配置的结果是,静态站点的根材料可以正常显示在代理位置,并且静态页面的子目录会按预期要求输入用户名和密码。但是,当我提供正确的用户名和密码时,我得到的是“404 Not Found”页面。当我注释掉配置中的两行“auth_basic”时,子目录中的内容可以正常显示。

我是否在代理的位置块中缺少某些内容以使密码验证正常工作?

来自服务器的日志:

error.log(密码错误)

2014/06/27 16:55:23 [错误] 30504#0:*64 用户“campy_SAM”:密码不匹配,客户端:127.0.0.1,服务器:localhost,请求:“GET /campy_SAM/project_page.html HTTP/1.0”,主机:“localhost:8000”,引荐来源:“http://********************/project_builds/”

error.log(正确密码)

2014/06/27 16:55:56 [错误] 30504#0:*67 open()“/usr/share/nginx/html/campy_SAM/project_page.html”失败(2:没有此文件或目录),客户端:127.0.0.1,服务器:localhost,请求:“GET /campy_SAM/project_page.html HTTP/1.0”,主机:“localhost:8000”,引荐来源:“http://*****************/project_builds/”

答案1

我根据发布 nginx 日志的建议解决了这个问题。我想仔细检查日志总是一个好主意。我犯了一个错误,将根目录放在服务器的第一个位置块内。因此,当我导航到子目录时,它映射了错误的位置。以下配置使它按我期望的方式工作:

server {
listen 8000;
server_name localhost;
root /web/project_builds/;
location / {
index index.html;
autoindex on;    
}

location /campy_SAM {
auth_basic "Restricted content";
auth_basic_user_file /web/password_files/campy_SAM/.htpasswd;
}

}

仍然令人好奇的是,当我删除身份验证时,它起作用了,并且根位于第一个位置块内......我可能无法理解为什么会这样:)

相关内容