我有一个系统,它将 proxy_pass 连接到一堆 AWS 资源,因此 IP 一直在变化。为了避免不断重新加载 nginx,我将 proxy_pass 移至使用变量(部分有效)
原始区块:
location /folder/ {
proxy_pass https://folder.site.com:8888/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_hide_header X-Frame-Options;
}
新区块:
location /folder/ {
resolver 172.19.0.190;
set $folder_url https://folder.site.com:8888/;
proxy_pass $folder_url;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_hide_header X-Frame-Options;
}
它可以很好地解析网站。它是一个 HTML 文件,可加载 CSS 和 JS 文件。我的问题是所有 3 个文件都具有完全相同的内容,即 HTML 内容。
我肯定忽略了某些愚蠢的事情,但我无论如何也想不通。
答案1
当在 proxy_pass 中使用变量时,如果指令中指定了 URI,则它会按原样传递给服务器,替换原始请求 URI。请参阅这个文件了解详情。
您已将 URI 指定/
为$folder_url
变量,因此任何 URI(例如/folder/foo
)/
在传递上游之前都会被转换为。
您的原始块将在向上游传递之前转换/folder/foo
为/foo
。
您可以使用正则表达式location
块来捕获要向上游发送的 URI 部分,例如:
location ~ ^/folder/(.*)$ {
resolver 172.19.0.190;
set $folder_url https://folder.site.com:8888/$1;
proxy_pass $folder_url;
...
}
请注意,正则表达式块的顺序location
很重要。请参阅这个文件了解详情。