Nginx:Https 资源的 HTTP 代理

Nginx:Https 资源的 HTTP 代理

/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 不起作用。

  1. 两行升级配置仅用于 WebSockets 支持。这些配置与此无关,它们不会向该外部代理提供 https。
  2. 您需要强制 nginx 在底层使用 HTTP 动词 CONNECT。我不知道该怎么做,但我发现您没有在任何地方这样做。

相关内容