Nginx 使用多个服务器块时使浏览器进入重定向循环

Nginx 使用多个服务器块时使浏览器进入重定向循环

我使用 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>.comThis 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,还是正确地对其进行符号链接,都可以为遇到类似困境的任何人解决问题。

我承认我的错。

相关内容