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.
The nginx webserver listening to IPv6 takes precedence over IPv4 and interferes with SNI. Testing with removing servers reveals the behaviour of nginx.
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.
find /etc/nginx/{conf.d,sites-enabled} gives
/etc/nginx/sites-enabled/server1.eu
/etc/nginx/sites-enabled/server2.eu
The zone file records:
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
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;
}
}
and
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;
}
}
This was due to a misconfiguration resulting from our lack of understanding of the Nginx listen parameter in the server directives. When you configure your server with multiple tenants, you create one or more new Nginx server blocks in the nginx.conf file for each endpoint or domain you'll be responding to.
The ability to forward the URL of the website to another address or point based on your criteria is an essential feature of the Nginx web server. An Nginx redirect is simple and easy to set up. Often users choose to redirect a page that has good SEO ranking.
Restart the Nginx web server to put the changes into effect using the command: sudo systemctl restart Nginx If you wish to redirect from non-www to www, simply replace the website URL’s mentioned in the above command. Replace www.devisers.in with devisers.in and vice versa.
It can work as a reverse proxy or POP3/IMAP proxy. It is the third most popular web server and well known for its enhanced performance, ease of use and configuration, stability and minimum resource utilization. That’s why in this tutorial, we’ll show you how to use Nginx to redirect traffic in different ways.
I have modified your Nginx configuration.
This should work:
Server 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;
}
Server 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;
}
Note:
The change default_server causes that server1 is your default server.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With