Ubuntu

在子域上配置 nginx - http 到 https 重定向

  • September 26, 2017

我正在嘗試設置一個強制使用 https 的網路伺服器。目前根域(我稱之為name.com)重定向到https沒有問題,但子域(my.name.com)沒有。https://my.name.com確實有效。

這是我的配置文件:

server {
   listen 80;
   listen [::]:80;
   return 301 https://$host$request_uri;
}    
server {
   # SSL configuration
   listen 443 ssl default_server;
   listen [::]:443 ssl default_server;

   root /var/www/html;

   # Add index.php to the list if you are using PHP
   index index.html index.htm index.nginx-debian.html;

   server_name my.name.com www.my.name.com;
   location / {
       proxy_pass http://localhost:8080;
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection 'upgrade';
       proxy_set_header Host $host;
       proxy_cache_bypass $http_upgrade;
   }
   ssl_dhparam /etc/ssl/certs/dhparam.pem;

   ssl_certificate <path to cert>
   ssl_certificate_key <path to key>
   include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot     
}

我在這裡想念什麼?

根據您的配置,這似乎是伺服器上的預設站點,如果是這樣,請嘗試將您的第一個服務塊編輯為:

伺服器 {
聽 80 default_server;
聽 [::]:80 預設伺服器;
伺服器名稱 _;
返回 301 https://$host$request_uri;
}

您沒有第一個塊作為埠 80 的 default_server,也沒有列出任何 server_names(如果它不是預設伺服器,則需要),因此可能沒有流量到達第一個伺服器塊。

當一個塊設置為 default_server 時,它告訴 Nginx 使用該塊來處理該塊綁定到的埠/IP 地址上的所有請求(在本例中為所有 IP 上的埠 80),這些請求與更具體的伺服器塊不匹配姓名。另一種看待它的方式是“包羅萬象”塊。

當一個塊設置了一個或多個特定的伺服器名稱時,該塊將僅適用於這些主機名。因此,在您的情況下,第二個伺服器塊將僅響應 my.name.com 和 www.my.name.com

有關 SSL 重定向的更多資訊和詳細資訊,請參閱此站點

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