避免在 nginx 中使用代理重复密码保护 URL
Avoid duplication in password protect URL with proxy in nginx
我有一个使用 gunicorn 提供的烧瓶应用程序,并在其之上安装了 nginx。我想使用基本身份验证 (user/password) 来保护所有以 /admin
开头的网址,这是后台,但仍然继续使用没有密码的 gunicorn 为所有其他网址提供服务。
这是我当前的 nginx 配置:
server {
listen 80;
server_name example.com;
charset utf-8;
location / {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /admin {
auth_basic "Administrator Login";
auth_basic_user_file /home/app/.htpasswd;
# the following four directives are duplicated :(
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
如果我不在第二个位置块中复制 proxy_*
指令,则以 /admin
开头的 URL 不会转发到 gunicorn,我会收到 404。
有什么办法可以避免配置重复?我尝试了位置嵌套,但显然最后 nginx 只有 "executes" 一个位置块。
proxy_pass 必须在位置块内。但是,不需要复制 proxy_set_header 指令,它们可以移到服务器块中。所以你的错误只是假设 proxy_pass 可以存在于服务器块中:-)
我有一个使用 gunicorn 提供的烧瓶应用程序,并在其之上安装了 nginx。我想使用基本身份验证 (user/password) 来保护所有以 /admin
开头的网址,这是后台,但仍然继续使用没有密码的 gunicorn 为所有其他网址提供服务。
这是我当前的 nginx 配置:
server {
listen 80;
server_name example.com;
charset utf-8;
location / {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /admin {
auth_basic "Administrator Login";
auth_basic_user_file /home/app/.htpasswd;
# the following four directives are duplicated :(
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
如果我不在第二个位置块中复制 proxy_*
指令,则以 /admin
开头的 URL 不会转发到 gunicorn,我会收到 404。
有什么办法可以避免配置重复?我尝试了位置嵌套,但显然最后 nginx 只有 "executes" 一个位置块。
proxy_pass 必须在位置块内。但是,不需要复制 proxy_set_header 指令,它们可以移到服务器块中。所以你的错误只是假设 proxy_pass 可以存在于服务器块中:-)