@kopcapuk

Как правильно настроить перенаправления nginx с http на https и с non-www на www?

Добрый день. Рассмотрите плиз мой nginx конфиг ниже. В комментах написал что к чему.
Ну и вообще, кто гуру nginx, подскажите плз новичку, где что можно изменить или улучшить и как будет правильней?)

#чисто для основного домена (без поддоменов) делаем редирект чтобы с www было
#с этой частью конфига все сайты перестали открываться
server {
    listen 62.109.8.247:80;
    listen 62.109.8.247:443 ssl http2; #если убрать это правило, то всё работает, но надо чтобы и при https://domain.ru редиректило на www
    
    server_name domain.ru;
    
    return 301 https://www.domain.ru$request_uri;
}

#абсолютно для всех поддоменов и основного домена перенаправляем с http на https
server { 
    listen 62.109.8.247:80;
    
    server_name .domain.ru; #тут кстати знаю, что не совсем верно, но так удобней, чтобы каждый раз не добавлять сюда новый поддомен
    
    return 301 https://$host$request_uri;
}

#основная секция
server {
    listen 62.109.8.247:443 ssl http2;
    
    server_name www.domain.ru spb.domain.ru vlg.domain.ru;

    root /var/www/www-root/data/www/domain.ru/public_html;

    include /var/www/www-root/data/www/ssl.conf;

    location / {
        rewrite ^/(.*)/$ /$1 permanent; #редиректим чтобы без слеша на конце было
    
        try_files $uri /index.php?$args; #перенаправляем все запросы (если это не файл) на index.php
    }
    
    #как сделать следующие 3 правила более универсальными?
    location /robots.txt {
        if ($host = 'spb.gdebar.ru') {
            rewrite robots.txt /robots-spb.txt break;
        }
        
        if ($host = 'www.gdebar.ru') {
            rewrite robots.txt /robots-msk.txt break;
        }

        if ($host = 'vlg.gdebar.ru') {
            rewrite robots.txt /robots-vlg.txt break;
        }
    }
    
    location ~ \.php {
        include fastcgi_params;
        fastcgi_param SERVER_NAME $host;
        fastcgi_pass unix:/var/www/php-fpm/www-root.sock;
        fastcgi_param PHP_ADMIN_VALUE "error_log = /var/www/www-root/data/www/domain.ru/errors.log";
    }
}
  • Вопрос задан
  • 66 просмотров
Пригласить эксперта
Ответы на вопрос 1
sashkets
@sashkets
Прекратил отвечать после 24.02.2022
Даю вырезку из нашего рабочего конфига. Адаптируйте под себя

server {
listen 80;
server_name domain.tld www.domain.tld;
rewrite ^ https://domain.tld$request_uri? permanent;
}

server {
listen 443 ssl;
server_name www.domain.tld;
include inc/ssl.conf;
rewrite ^ https://domain.tld$request_uri? permanent;
}

server {
listen 443 ssl;
server_name domain.tld;
.......
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы