我使用 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 is 尽管此虚拟主机的配置文件中没有这样的设置。它配置在 中<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
与上面的配置文件相同,除了“assets”处写着“soft”。但它却进入了这个无限的重定向循环。
我尝试过改变位置指令。我咨询过文档比预期的要好。不过,它还是循环了。非常感谢您的帮助!
答案1
事实上,问题如下:
我没有正确地从/sites-enabled
到建立符号链接/sites-available
,并且它使用了旧的重复,<mysite>-www
这导致了重定向循环。
按照我的问题中的上述配置文件是解决方案。无论是将其复制到 sites-enabled,还是正确地对其进行符号链接,都可以为遇到类似困境的任何人解决问题。
我承认我的错。