我正在使用 npm(Nginx 代理管理器)来管理我的 nginx 配置。
npm 已生成此位置块:
location ~* ^/docker-compose-ui/?(.*)$ {
set $upstream http://docker_compose_ui:5000/$1$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass $upstream;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_http_version 1.1;
add_header X-testing "matching: $1, r_uri: $request_uri";
}
它与以下 URL 匹配:http://192.168.1.148/docker-compose-ui/
但它与任何页面资产都不匹配,因此页面加载时没有任何工作样式或 javascript。
我可以看到我添加的标题:X-testing: matching: , r_uri: /docker-compose-ui/
但如果我http://192.168.1.148/docker-compose-ui/scripts/directives/actions.js
直接尝试,我得到的只是502 网关错误。
我尝试了很多方法,甚至添加了一个位置来匹配资产:
~* ^/docker-compose-ui/(images/|img/|scripts/|script/|javascript/|js/|bower_components/|css/|stylesheets/|flash/|media/|static/|robots.txt|humans.txt|favicon.ico)
但什么都不起作用,nginx 拒绝代理除 之外的任何东西/docker-compose-ui/
。
为什么 Nginx 似乎忽略了我定义的位置并拒绝代理资产?
答案1
除了您提供的配置之外,还需要resolver
定义为正常工作(这很可能是错误的原因HTTP 502 Bad Gateway
),将其添加$request_uri
到上游 URL 的末尾是完全无稽之谈。让我们看看您提供的 URL 的示例:
http://192.168.1.148/docker-compose-ui/scripts/directives/actions.js
用于组成的变量$upstream
将具有以下值:
$1 scripts/directives/actions.js
$request_uri /docker-compose-ui/scripts/directives/actions.js
这意味着整个$upstream
变量(设置为http://docker_compose_ui:5000/$1$request_uri
)将等于
http://docker_compose_ui:5000/scripts/directives/actions.js/docker-compose-ui/scripts/directives/actions.js
你觉得这样可以吗?我认为不行。
让我们尝试一下这个:
location ^~ /docker-compose-ui {
rewrite ^/docker-compose-ui/?(.*) /$1 break;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://docker_compose_ui:5000;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_http_version 1.1;
}