M
M
Max2018-11-11 00:56:36
Nginx
Max, 2018-11-11 00:56:36

How to properly configure nginx redirects from http to https and from non-www to www?

Good afternoon. Please take a look at my nginx config below. In the comments I wrote what's what.
Well, in general, who are the nginx gurus, plz tell a beginner where what can be changed or improved and how will it be more correct?)

#чисто для основного домена (без поддоменов) делаем редирект чтобы с 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";
    }
}

Answer the question

In order to leave comments, you need to log in

1 answer(s)
A
Alexander Chernykh, 2018-11-11
@sashkets

I give a clipping from our working config. Customize
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
.......

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question