Nginx

帶有透明埠/代理的 Nginx 映射(?)

  • August 23, 2019

我不完全確定我在這裡尋找的是什麼,所以我無法有效地搜尋我的答案。

我正在為 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 中設置的東西是造成混亂的原因,但我並不肯定。

有沒有一種方法可以更新我的 nginx 配置以仍然允許脫水伺服器工作,但也告訴瀏覽器這:3443不是他們應該連接的真正內容?(或者至少不要在地址欄中顯示)

更新

當我這樣做curl https://www.wanderingwerners.com/a-beginning時,它會給我一個 301 重定向。我的 nginx 配置在這里肯定發生了一些事情。

另一個更新

當我這樣做時curl https://www.wanderingwernerx.com/a-beginning/,它工作得很好,所以看起來它正在用尾隨做某事/

當您從 URL 中省略尾部斜杠時,您描述的重定向來自 nginx。你應該可以用port_in_redirect off;.

執行在埠 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 不會暴露在您的伺服器之外,它只能從伺服器本身訪問。應用此配置意味著您需要先修復上一個問題。

引用自:https://serverfault.com/questions/980475