【问题标题】:Nginx config to proxy pass to external ip and port (https -> http)Nginx 配置到代理传递到外部 ip 和端口 (https -> http)
【发布时间】:2017-05-16 13:09:15
【问题描述】:

我的服务配置有点复杂。

我的域(现在称为“a.team”)指向我的 1&1 云服务器,其中运行 dockerized 的不同服务与 dockerized nginx 完全兼容。许多子域指向 docker 容器,一切都很好。

现在我在办公室有一台服务器,端口为 8080、8090 和 7990(Atlassian 产品),可通过路由器 fw 和静态 IP 访问(工作正常)。

我希望云服务器像这样管理域和代理:

SSL https://jira.a.team 到非 SSL http://---.---.---.133:8080(虚拟)作为代理(也适用于其他产品)

Nginx 配置为将所有 http 重定向到 https:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;  
    return 301 https://$host$request_uri;
}
server {
    listen 443 default_server ssl;
    server_name _;
    ssl_certificate /path/bundle.cer;
    ssl_certificate_key /path/-.a.team_private_key.key;
}

我想将新配置添加到现有配置中。

server {
    listen 443 ssl;
    server_name jira.a.team;

    location / {
        proxy_pass http://---.---.---.133:8080;
        proxy_redirect off;
    }
}

我尝试了许多与主机、x-real-ip 和 x-forwarded-for 的代理集标头的组合,但我得到的只是 504 网关超时。

感谢您的帮助!

问候

【问题讨论】:

    标签: redirect ssl nginx https proxy


    【解决方案1】:

    尝试使用 Nginx 中的上游功能。

    您应该知道,当代理传递到外部地址时,您需要允许传出流量到您办公室 FW 中的这些端口,因为流量将通过 Nginx 服务器。

    配置服务器(vhost jira.a.team),注意上游引用jira_app

    server {
      listen       *:443 ssl;
      server_name  jira.a.team;
      ssl on;
      ssl_certificate           ....
      ssl_certificate_key       ....
      ssl_session_cache         ....
      ssl_session_timeout       5m;
      ssl_protocols             TLSv1 TLSv1.1 TLSv1.2;
      ssl_ciphers               ....
      ssl_prefer_server_ciphers on;
      access_log            /var/log/nginx/....access.log combined;
      error_log             /var/log/nginx/....error.log;
      location / {
        proxy_pass            http://jira_app;
        proxy_read_timeout    90;
        proxy_connect_timeout 90;
        proxy_redirect        off;
        proxy_set_header      Host $host;
        proxy_set_header      X-Real-IP $remote_addr;
        proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header      Proxy "";
      }
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-For $remote_addr;
      proxy_set_header X-Forwarded-Proto $scheme;   
    }
    

    配置上游

    upstream jira_app {
      server     ---.---.---.133:8080  fail_timeout=10s;
    }
    

    如果您仍想使用从 HTTP 到 HTTPS 的重定向,您可以将以下操作作为单独的服务器对象:

    server {                                                                                                                                                 
     listen *:80;                                                                                                                                           
     server_name           jira.a.team;                                                                                                               
     location / {                                                                                                                                                                                                                                                   
      rewrite ^ https://jira.a.team$request_uri? permanent;                                                                                            
     }                                                                                                                                                      
    }               
    

    【讨论】:

      猜你喜欢
      • 2016-11-15
      • 2016-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-11
      • 1970-01-01
      • 2017-03-23
      相关资源
      最近更新 更多