在公司代理后面运行 nginx 作为反向代理

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

我正在尝试在公司代理后面运行 nginx 反向代理。公司代理正在运行

http://someproxy.company.com:3128

适用于 http 和 https 连接。

我的 http 模块中的 nginx 配置如下所示:

upstream subdomain.external.com {
    server someproxy.company.com:3128;
    }

在服务器模块中如下所示:

server {
        
        listen       443 ssl;
        server_name  reverse.company.com;
        
        ssl_certificate      mycert.cer;
        ssl_certificate_key  mykey.key;
        
        ssl_session_cache   shared:SSL:10m;
        ssl_session_timeout 10m;
        proxy_ssl_server_name on;
        
        ssl_protocols TLSv1.2 TLSv1.3;
        
    location /target {
        proxy_pass http://subdomain.external.com/target;
        proxy_set_header X-Real-IP $remote_addr;
        }

可以看到,反向proxy_pass目标是一个http目标。这在公司代理上按预期工作。

现在我的问题: proxy_pass 目标应该在 https 上!但是如果我将 proxy_pass 目标切换到 https://subdomain.external.com/target,nginx 会尝试连接到 https 上的上游。这会导致错误日志条目:

[error] 6524#6288: *1 SSL_do_handshake() failed (SSL: error:1408F10B:SSL routines:ssl3_get_record:wrong version number) while SSL handshaking to upstream, client: CLIENT_IP_HERE, server: reverse.company.com, request: "GET /activation HTTP/1.1", upstream: "https://someproxy.company.com:3128/target", host: "reverse.company.com"

正如我在上面提到的,对于 http 和 https 请求,我们的代理地址是 http://someproxy.company.com:3128

即使 proxy_pass 目标位于 https 上,有没有办法告诉 nginx 使用 http 上的上游?

我在位置/目标上尝试了这些参数,但没有成功:

proxy_set_header Host $http_host; proxy_set_header X_FORWARDED_PROTO http; proxy_set_header X-Real-IP $remote_addr; proxy_ssl_verify off;
    
nginx proxy reverse-proxy nginx-reverse-proxy
1个回答
0
投票
在位置/tag里面获取参数

proxy_set_header X_FORWARDED_PROTO https;
必须设置。

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