代理传递/重定向在 Nginx 反向代理上不起作用

代理传递/重定向在 Nginx 反向代理上不起作用

我正在尝试使用 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 的经验很少。目前还不知道如何操作。

我将非常感激任何帮助以使这个工作正常进行。

相关内容