为什么此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.