Nginx:从反向代理的应用程序重写URL中的端口

问题描述 投票:0回答:1

所以我已经设置了一个反向代理来隧道我的应用程序。

不幸的是,应用程序认为它是通过http而不是https提供的,并给出了端口80的URL。

如何在nginx反向代理中处理此问题? (可能通过重写)

当我进入页面时:

https://my.server.com 

index.php加载,一切正常

单击某些内容后,我会有一个类似这样的URL:

https://my.server.com:80/page/stuff/?redirect_to

这会在浏览器内引发错误,因为我的反向代理不在端口80上提供SSL。

我该如何缓解?

我当前用于该站点的nginx ssl虚拟主机:

   ... ssl stuff ...
   add_header X-Frame-Options SAMEORIGIN;
   add_header X-Content-Type-Options nosniff;

   location / {
       proxy_pass http://localhost:22228;
       proxy_buffering off;
       proxy_redirect off;
       proxy_read_timeout 43800;
       proxy_pass_request_headers on;
       proxy_set_header Connection "Keep-Alive";
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $remote_addr;
       proxy_set_header Host $host;
       proxy_set_header X-Forwarded-Port 443;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
       proxy_pass_header Content-Type;
       proxy_pass_header Content-Disposition;
       proxy_pass_header Content-Length;
       proxy_set_header X-Forwarded-Proto https;
   }

(是的,我知道我的请求标头看起来像一棵圣诞树🎄)

如果您显示解决此问题的文档在哪里以及该机制的名称,也可以得到加分。

nginx url https url-rewriting reverse
1个回答
0
投票

对于重写响应正文,您可以使用http_sub_module

http_sub_module

[许多人说,使用location /blog/ { proxy_pass http://127.0.0.1:8000/; sub_filter_once off; sub_filter_types text/css application/javascript; # in addition to text/html sub_filter "//my.server.com:80/" "//my.server.com/"; } 指令时需要禁用压缩:

sub_filter

对我来说,它在配置中没有此行就可以正常工作,但是它可以是我使用的OpenResty的功能,而不是nginx。

[如果您的应用程序生成HTTP 30x重定向,并明确指示domain:port,则可以使用 proxy_set_header Accept-Encoding ""; 指令重写Location标头值:

proxy_redirect
© www.soinside.com 2019 - 2024. All rights reserved.