为什么此Nginx服务器重定向到错误的域? [英] Why does this nginx server redirect to a wrong domain?

查看:113
本文介绍了为什么此Nginx服务器重定向到错误的域?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为什么此Nginx服务器重定向到错误的域?我的Nginx Web服务器有两个服务域,server1.eu和server2.eu,为什么它们相互干扰?当我设置新的干净"服务器安装时,不会出现此现象,因此此服务器的设置有什么问题.

Why does this nginx server redirect to a wrong domain? My nginx webserver has two domains to serve, server1.eu and server2.eu, why do they interfere with each other? When I set up a new 'clean' server install, this behaviour does NOT appear, so what is wrong in this servers' setup.

侦听IPv6的Nginx Web服务器优先于IPv4并干扰SNI.通过删除服务器进行测试可以揭示nginx的行为.

The nginx webserver listening to IPv6 takes precedence over IPv4 and interferes with SNI. Testing with removing servers reveals the behaviour of nginx.

删除除启用了IPv4和IPv6的服务器1之外的所有服务器,重新加载nginx,然后仅使用IPv4侦听器激活服务器2,然后再次重新加载nginx.浏览到服务器2将使您最终进入服务器1.看来,nginx会自动侦听第一个添加的IPv6.因此,交换激活顺序将切换路由.

Remove all servers except server 1, with IPv4 and IPv6 enabled, reload nginx, then activate server 2, with only an IPv4 listener and reload nginx again. Browsing to server 2 will let you end up at server 1. It appears that nginx automatically listens to the first added IPv6. So interchanging the sequence of activation will switch the routing.

找到/etc/nginx/{conf.d,sites-enabled}给出的

find /etc/nginx/{conf.d,sites-enabled} gives

/etc/nginx/sites-enabled/server1.eu 
/etc/nginx/sites-enabled/server2.eu 

区域文件记录:

AAAA    server1.eu    directs to IPv6 address
A   server1.eu    directs to IPv4 address
AAAA    server2.eu  directs to IPv6 address
A server2.eu directs to IPv4 address

nginx服务器配置:

the nginx server configuration:

server {
    listen 80;
    listen [::]:80;
server_name server1.eu;
    return 301 https://www.server1.eu;
}
server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        ssl_certificate /etc/letsencrypt/live/server1.eu/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/server1.eu/privkey.pem;
        include snippets/ssl-params.conf;

        server_name www.server1.eu;
        root /var/www/server1.eu/webroot;
        index index.php index.html index.htm ;

        location / {
            try_files $uri $uri/ /index.php?$args;
        }

        location ~ \.php$ {
            include fastcgi.conf;
            fastcgi_pass unix:/run/php/php7.2-fpm.sock;
        }
}

server {
    listen 80;
    listen [::]:80;
    server_name www.server2.eu;
    return 301 https://$server_name$request_uri;
}

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
    ssl_certificate /etc/letsencrypt/live/server2.eu/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/server2.eu/privkey.pem;
    include snippets/ssl-params.conf;
    server_name www.server2.eu;
    root /var/www/server2.eu/webroot;
    index index.php index.html index.htm ;

        location / {
            try_files $uri $uri/ /index.php?$args;
        }

        location ~ \.php$ {
            include fastcgi.conf;
            fastcgi_pass unix:/run/php/php7.2-fpm.sock;
        }
}

推荐答案

我已经修改了您的Nginx配置.

I have modified your Nginx configuration.

这应该有效:

服务器1:

server {
        listen 443 default_server ssl http2;
        listen [::]:443 default_server ssl http2;

        root /var/www/server1.eu/webroot;
        index index.php index.html index.htm;

        server_name www.server1.eu;

        ssl_certificate /etc/letsencrypt/live/server1.eu/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/server1.eu/privkey.pem;

        location / {
                try_files $uri $uri.html $uri/ @extensionless-php;
                autoindex on;
        }

        location @extensionless-php {
            rewrite ^(.*)$ $1.php last;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;

        #       # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        }
}

server {
    listen 80;
    server_name www.server1.eu;
    return 301 https://$host$request_uri;
}

服务器2:

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        root /var/www/server2.eu/webroot;
        index index.php index.html index.htm;

        server_name www.server2.eu;

        ssl_certificate /etc/letsencrypt/live/server2.eu/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/server2.eu/privkey.pem;

        location / {
                try_files $uri $uri.html $uri/ @extensionless-php;
                autoindex on;
        }

        location @extensionless-php {
            rewrite ^(.*)$ $1.php last;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;

        #       # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        }
}

server {
    listen 80;
    server_name www.server2.eu;
    return 301 https://$host$request_uri;
}

注意:

更改 default_server 会导致server1是您的默认服务器.

The change default_server causes that server1 is your default server.

这篇关于为什么此Nginx服务器重定向到错误的域?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆