我正在使用 Nginx 託管多個虛擬主機(或伺服器區塊在 Nginx 命名法中)。這些主機都共用同一個網域,並且每個主機都分配有自己的子網域。一個子域進入無限的重定向循環,這顯然是不受歡迎的行為。
注意:我已經編輯了我的域名並將其替換為<mysite>
.
根域 -www.<mysite>.com
按預期接收請求。它還將 HTTP 請求重定向到 HTTPS。它配置在<mysite>-www
.
子網域assets.<mysite>.com
也按預期接收請求。它未配置為將 HTTP 重新導向到 HTTPS,提供任一協定。沒有什麼麻煩。它配置在<mysite>-holding
.
最終子域soft.<mysite>.com
的配置與此相同,assets.<mysite>.com
但它不穩定。相反,它會向瀏覽器發送重定向循環,每次都指向https://soft.<mysite>.com
This,儘管該虛擬主機的設定檔中沒有此類設定。它配置在<mysite>-soft
.
配置為<mysite>-www
:
server {
server_name www.<mysite>.com;
listen 80 default_server ;
listen [::]:80 default_server;
location / {
return 301 https://$server_name$request_uri;
}
root /var/www/html;
}
server {
listen 443 ssl default_server;
ssl_certificate /etc/letsencrypt/live/www.<mysite>.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.<mysite>.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
root /var/www/html;
server_name www.<mysite>.com;
error_page 404 /404.html;
location / {
limit_req zone=mylimit burst=20 nodelay;
try_files $uri $uri/ =404;
index index.html index.htm;
}
}
配置為<mysite>-holding
:
server {
listen 80;
listen [::]:80;
listen 443 ssl;
server_name assets.<mysite>.com;
ssl_certificate /etc/letsencrypt/live/assets.<mysite>.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/assets.<mysite>.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
root /var/www/holding/html;
location / {
limit_req zone=mylimit burst=20 nodelay;
try_files $uri $uri/ =404;
index index.html;
}
設定檔soft.<mysite>.com
與上面的設定檔相同,除了「資產」和「軟」的地方不同。然而它進入了這個無限的重定向循環。
我嘗試過改變位置指令。我諮詢過文件這比預期的要好。儘管如此,它仍然循環。幫助將不勝感激!
答案1
事實上,問題如下:
我沒有正確地從/sites-enabled
到進行符號鏈接/sites-available
,並且它使用了舊的副本,<mysite>-www
導致了重定向循環。
在我的問題中按照上述設定檔就是解決方案。將其複製到啟用的站點,或正確地對其進行符號連結都可以為處於類似困境的任何人解決問題。
抱歉。