免责声明:我不太熟悉 nginx
我的服务器内部有这个位置块:
location /appname/ {
proxy_pass http://127.0.0.1:11399/;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
}
我想在除 之外的每个页面上设置基本身份验证/appname/
。因此,如果路径是,/appname/
则只需将其传递给 11399 端口上的 docker 容器。但如果路径是其他任何内容(^/appname/.+
),则先请求身份验证。
重要!我无法编辑外部服务器块,因为它包含其他位置的大量其他应用程序,而我需要将其仅应用于此位置块。
我尝试过这个:
location = /appname/ {
proxy_pass http://127.0.0.1:11399/;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
}
location ~ ^/appname/(.+)$ {
auth_basic "Hello hiiii";
auth_basic_user_file /path/to/.htpasswd;
proxy_pass http://127.0.0.1:11399/$1;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
}
对我来说,如果路径是,/appname/
则转到location = /appname/
块。如果不是,则转到正则表达式块。但是当我访问时,myhost.com/appname/
出于某种原因,系统会提示我输入身份验证表单。这没有意义,在任何情况下都无法/appname/
匹配^/appname/.+
正则表达式。看起来 nginx 的幕后有些我不知道的事情。
如果有人能建议我使用一个嵌套位置块来实现这一点,我将不胜感激。我不喜欢上一个示例有重复的行。我尝试了类似这样的方法
location /appname/ {
auth_basic "Hello hiiii";
auth_basic_user_file /path/to/.htpasswd;
proxy_pass http://127.0.0.1:11399/;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
location = /appname/ {
auth_basic off;
}
}
还有很多变体,但都不起作用。大多数情况下,访问时都会出现 404/appname/
答案1
你可以看看nginx 身份验证基本文档!尝试使用“auth_basic off;”和“allow all”。我怀疑可能还存在其他问题。
尝试这个:
location /appname/ {
proxy_pass http://127.0.0.1:11399/;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
allow all;
auth_basic off;
}