/mypath/
我处于需要将所有请求代理到 的情况external-site.com
。为了使网络请求在服务器上工作,我需要经过http://external-proxy.com
。当我访问 时,这可以正常工作http://external-site.com
,但是我无法强制external-site.com
通过 加载https
。以下是nginx.conf
我尝试过的 。
location /mypath/ {
proxy_pass http://external-proxy.com:8080/;
proxy_set_header Host external-site.com;
# Trying to load https://external-site.com (instead of http)
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
}
如果你看看关于php:Nginx proxy_pass在公司防火墙后面进行反向代理,评论中也提出了同样的问题:
这很好,但如果目标协议是 HTTPS 怎么办?我找不到覆盖该协议的方法
答案1
我花了一段时间才看出来你用了什么肮脏的 http 把戏。但这对 https 不起作用。
- 两行升级配置仅用于 WebSockets 支持。这些配置与此无关,它们不会向该外部代理提供 https。
- 您需要强制 nginx 在底层使用 HTTP 动词 CONNECT。我不知道该怎么做,但我发现您没有在任何地方这样做。