Ubuntu
在子域上配置 nginx - http 到 https 重定向
我正在嘗試設置一個強制使用 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 重定向的更多資訊和詳細資訊,請參閱此站點。