【问题标题】:How to make nginx passthrough on 443 and redirect 80 to 443?如何在 443 上进行 nginx 直通并将 80 重定向到 443?
【发布时间】:2018-04-30 14:25:57
【问题描述】:

我有一个在 8443 上监听的 winstone 服务器 (Jenkins)。 Jenkins 有一个有效的证书,并且 Jenkins 正在成功终止证书:

JENKINS_ARGS="--httpPort=-1 --httpsKeyStore=/secure/jenkins.keystore --httpsKeyStorePassword=MY_PASSWORD --httpsPort=8443"

唯一的问题是用户现在必须去: https://example.com:8443

我不想在 URL 中使用那个端口号。 我要:

https://example.com:8443 -> https://example.com
https://example.com      -> https://example.com
http://example.com       -> https://example.com

所以我想我会在运行 Jenkins 的同一个实例上运行 nginx。

所以我的问题是:

  1. 我是否必须将 jenkins 重新配置为不执行证书终止,以便 nginx 只执行它?
  2. nginx 可以在没有证书的情况下将 80 和 443 重定向到 localhost:8443(因为 Jenkins 正在执行证书终止)?
  3. nginx 和 Jenkins 都需要终止证书吗?

对于那些类似的问题,我们深表歉意。

我很确定 AWS ELB 无法取代 nginx 在这里所做的事情,但我想我会把它扔在那里,以防 ELB 也可以为我解决这个问题。

【问题讨论】:

    标签: ssl redirect nginx winstone


    【解决方案1】:

    1) 不,您可以使用Stream Module 让 Nginx Stream 直接连接到 Jenkins。

    请注意,这是在 1.9.0 中添加的,但不是默认构建的一部分,因此您可能必须自己构建

    它的工作原理很像 http server 块,但您必须在 http 块之外进行设置。

    stream {
        upstream jenkins_server {
            server jenkins:443;
        }
    
        server {
            listen 443;
            proxy_pass jenkins_server;
        }
    }
    

    2) 您不需要 nginx 上的证书,但您应该有一个用于端口 80 的 http 服务器块,它执行第 1 部分中讨论的 301 到 443 流。

    server {
        listen 80;
        server_name your_server_name_here;
        return 301 https://$host$request_uri;
    }
    

    3) 不,您不需要,因为您可以使用 nginx 流将 ssl 从客户端传递到 Jenkins 服务器。

    【讨论】:

      猜你喜欢
      • 2015-01-21
      • 2017-01-29
      • 2021-01-20
      • 1970-01-01
      • 2019-02-02
      • 2018-01-25
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      相关资源
      最近更新 更多