![代理传递/重定向在 Nginx 反向代理上不起作用](https://linux22.com/image/787042/%E4%BB%A3%E7%90%86%E4%BC%A0%E9%80%92%2F%E9%87%8D%E5%AE%9A%E5%90%91%E5%9C%A8%20Nginx%20%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E4%B8%8A%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我正在尝试使用 nginx 实现以下目标-
我在一台服务器上运行了 2 个 docker 容器,其中一个容器在端口 80 上运行 nginx 并接收来自 AWS 应用程序负载均衡器的请求。然后根据 URL 中的路径,它应该重定向到另一个 docker 容器上的 3 个端口之一。在第二个 docker 容器中运行的应用程序在自己的路径上提供内容。
示例 - 当我输入 时https://example.com/story/fairy
,Nginx 应该解析/story/fairy
并将其传递给端口 9091 上的另一个 docker 容器。应用程序返回的数据可能位于路径 上/_myownpath/page1/
。其末尾的浏览器 URL 应如下所示 - https://example.com/story/fairy/_myownpath/page1
。
然后,如果返回的页面上还有其他链接,并且用户单击了这些链接,则 nginx 应该只将新路径传递给监听端口 9091 的应用程序,并声明返回的新内容将在路径上/_newpath/story_page_11
。浏览器 URL 现在应该看起来https://example.com/story/fairy/_newpath/story_page_11
像这样。
我在摆弄 nginx 配置时绞尽了脑汁,还是没能搞清楚并解决这个问题。
我尝试过的一些配置是
尝试过代理通行证
server {
listen 80;
server_name example.com;
location /story/fairy/ {
# Reject requests with unsupported HTTP method
if ($request_method !~ ^(GET|POST|HEAD|OPTIONS|PUT|DELETE)$) {
return 405;
}
# Only requests matching the whitelist expectations will
# get sent to the application server
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://localhost:9091/;
proxy_redirect http://localhost:9091/ https://$server_name/;
}
}
尝试重定向
server {
listen 80;
location /awsmap/dev/ {
if ($request_method !~ ^(GET|POST|HEAD|OPTIONS|PUT|DELETE)$) {
return 405;
}
return 301 http://localhost:9091/;
}
尝试重写
server {
listen 80;
location /story/fairy {
rewrite ^/story(.*)$ / break;
proxy_pass http://localhost:9091;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_bypass $http_upgrade;
absolute_redirect off;
}
location ^~ /story\/fairy/ {
rewrite ^/story(.*)$ / break;
proxy_pass http://localhost:9091;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_bypass $http_upgrade;
absolute_redirect off;
}
}
我对 nginx 的经验很少。目前还不知道如何操作。
我将非常感激任何帮助以使这个工作正常进行。