Nginx 映射透明端口/代理(?)

Nginx 映射透明端口/代理(?)

我不完全确定我在这里寻找什么,所以我无法有效地寻找答案。

我在用着脱水针对 LetsEncrypt 的 TLS-ALPN 挑战。我使用 nginx 托管服务

stream {
    map $ssl_preread_alpn_protocols $tls_port {
        ~\bacme-tls/1\b 10443;
        default 3443;
    }

    server {
        listen 443;
        listen [::]:443;
        proxy_pass 127.0.0.1:$tls_port;
        ssl_preread on;
    }
}

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    return 301 https://$host$request_uri;
}

server {
    listen 3443 ssl;
    listen [::]:3443 ssl;

    server_name wanderingwerners.com www.wanderingwerners.com;

    ssl_certificate /path/to/my/fullchain.pem;
    ssl_certificate_key /path/to/my/privkey.pem;

    index index.html;
    root /var/www/wanderingwerners.com/;
}

这效果很好 - 我可以在零停机时间内获得新证书,并且我的网站可以访问。但是,当我访问我的页面时,它运行正常。当我将鼠标悬停在链接上时,它会显示我https://www.wanderingwerners.com/a-beginning/

但是,点击该链接后,我会https://www.wanderingwerners.com:3443/a-beginning/

这是不可取的 - 我希望它显示为普通的https://www.wanderingwerners.com/a-beginning/

我假设我在 nginx 中设置的某些内容是造成混乱的原因,但我并不确定。

:3443有没有办法可以更新我的 nginx 配置,让脱水服务器继续工作,但同时也告诉浏览器真的他们应该连接到哪里?(或者至少不要在地址栏中显示)

更新

当我这样做时,curl https://www.wanderingwerners.com/a-beginning它给了我一个 301 重定向。这里肯定是我的 nginx 配置出了问题。

另一个更新

当我这样做的时候,curl https://www.wanderingwernerx.com/a-beginning/它工作得很好,所以看起来它正在做一些事情/

答案1

您描述的重定向来自 nginx,因为您省略了 URL 中的尾部斜杠。您应该能够使用 来取消它port_in_redirect off;

答案2

很可能在端口 3443 上运行的网站软件正在其 HTML 代码中生成包含端口号的链接。

您需要找到一种方法让软件生成指向没有端口号的域的链接。

我建议您的另一个改变是:

server {
    listen 127.0.0.1:3443 ssl;

    server_name wanderingwerners.com www.wanderingwerners.com;

    ssl_certificate /path/to/my/fullchain.pem;
    ssl_certificate_key /path/to/my/privkey.pem;

    index index.html;
    root /var/www/wanderingwerners.com/;
}

使用此配置,端口 3443 不会暴露在服务器外部,只能从服务器本身访问。应用此配置意味着您需要先修复上一个问题。

相关内容