Задача: есть сайт example.com с двумя поддоменами: ru.example.com , en.example.com .
Требуется обеспечить редиректы с http ( c www и без ) на https без www , и с
https://www.* на https без www
DNS-сервера на хосте нет.
обнаружилось, что если в конфиг добавить строчку:
resolver 127.0.0.1;
то редиректы начинают работать неверно: с
https://example.com перекидывает на
https://en.example.com . Кто-нибудь может объяснить, почему? И почему именно на en.example.com - потому, что он последний в директиве server_name ?
Конфиг привожу ниже
server {
listen 80; ## listen for ipv4
server_name ~^(www\.)?(ru\.|en\.)?(example.com)$;
location /.well-known/acme-challenge/ {
alias /var/www/letsencrypt/;
}
location / {
rewrite ^ https://$2$3$request_uri permanent;
}
}
server {
listen 250.250.250.250:443 ssl;
server_name ~^(www\.)(ru\.|en\.)?(example.com)$;
access_log off;
include snippets/example.com.ssl;
expires max;
return 301 https://$2$3$request_uri;
}
server {
server_name example.com ru.example.com en.example.com;
listen 250.250.250.250:443 ssl;
include snippets/example.com.ssl;
root /var/www/example.com/public;
# Point index to the Laravel front controller.
index index.php;
# Remove trailing slash to please routing system.
if (!-d $request_filename) {
rewrite ^/(.+)/$ /$1 permanent;
}
location /.well-known/acme-challenge/ {
alias /var/www/letsencrypt/;
}
location / {
# URLs to attempt, including pretty ones.
try_files $uri $uri/ /index.php?$args;
}
# PHP FPM configuration.
location ~* \.php$ {
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}