Jump to content
Sign in to follow this  
magneto2010

Поделитесь файлом ***.nginx.conf с редиректами на https и на www

Recommended Posts

Posted (edited)

второй день не получается запустить нормально редиректы на https и на www

 

Сертбор прописал редирект на https, но не получается сделать редирект еще на www. Если добавить  www в этот редирект return 301 https://www.$host$request_uri; то он срабатывает когда пытаются перейти по http. Если убрать www с ссылки в браузере, то нормально открывается версия без www, чего не должно быть. Помогите пожалуйста, кто шарит. 

 

Спойлер

server {
    server_name site.ru www.site.ru;
    root        /home/admin/web/site.ru/public_html;
    index       index.php index.html index.htm;
    access_log  /var/log/nginx/domains/site.ru.log combined;
    access_log  /var/log/nginx/domains/site.ru.bytes bytes;
    error_log   /var/log/nginx/domains/site.ru.error.log error;
    location / {
        try_files $uri $uri/ @opencart;
        location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ {
            expires     max;
        }

        location ~ [^/]\.php(/|$) {
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            if (!-f $document_root$fastcgi_script_name) {
                return  404;
            }

            fastcgi_pass    127.0.0.1:9001;
            fastcgi_index   index.php;
            include         /etc/nginx/fastcgi_params;
        }
    }

    location @opencart {
        rewrite ^/(.+)$ /index.php?_route_=$1 last;
    }

    location /vstats/ {
        alias   /home/admin/web/site.ru/stats/;
        include /home/admin/conf/web/site.ru.auth*;
    }

    error_page  403 /error/404.html;
    error_page  404 /error/404.html;
    error_page  500 502 503 504 /error/50x.html;

    location /error/ {
        alias   /home/admin/web/site.ru/document_errors/;
    }

    location ~* "/\.(htaccess|htpasswd)$" {
        deny    all;
        return  404;
    }

    include     /etc/nginx/conf.d/phpmyadmin.inc*;
    include     /etc/nginx/conf.d/phppgadmin.inc*;
    include     /etc/nginx/conf.d/webmail.inc*;

    include     /home/admin/conf/web/nginx.site.ru.conf*;

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/site.ru/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/site.ru/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot


}
server {
    if ($host = www.site.ru) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    if ($host = site.ru) {
        return 301 https://www.$host$request_uri;
    } # managed by Certbot


    listen      46.30.42.143:80;
    server_name site.ru www.site.ru;
    return 404; # managed by Certbot




}

 

 

Edited by magneto2010

Share this post


Link to post
Share on other sites

site.nginx.conf

server {
	listen     xx.xx.xx.xx:80;
	...
	## redirect http to https ##
	return      301 https://$server_name$request_uri;
	...

site.ssl.nginx.conf

server {
	listen      xx.xx.xx.xx:443 ssl http2;
	...
	## redirect www to no www
	if ($host = 'www.sute.ru' ) {
		rewrite ^/(.*)$ https://sute.ru/$1 permanent;
	}
	...

 

Share this post


Link to post
Share on other sites

я тоже вчера гуглил это, спасибо. Я смотрел гугл и забугорний и ру. Почему-то у меня только 1 файл конфига, в котором вписаны и сертификаты. Ни разу не видел чтоб было 2 файла конфига.

Share this post


Link to post
Share on other sites
2 минуты назад, magneto2010 сказал:

я тоже вчера гуглил это

это я с сервера своего снял

Share this post


Link to post
Share on other sites

вот с второго сервера, там один конфиг:

server {
    listen      80;
    server_name site.ru;
    access_log off;
    error_log off;
    ## redirect http to https ##
    return      301 https://$server_name$request_uri;
}

## our http server at port 443
server {
    listen      443 ssl http2;
    listen [::]:443 ssl http2;
    server_name site.ru;

...

    ## redirect www to no www
    if ($host = 'www.site.ru' ) {
        rewrite ^/(.*)$ https://site.ru/$1 permanent;
    }

 

Share this post


Link to post
Share on other sites
17 минут назад, magneto2010 сказал:

Почему-то у меня только 1 файл конфига, в котором вписаны и сертификаты.

можете сделать два, вы их подключаете в nginx.conf:

include             /etc/nginx/conf.d/*.conf;

Share this post


Link to post
Share on other sites
37 минут назад, magneto2010 сказал:

Помогите пожалуйста, кто шарит

Надо чтобы всегда перекидывало на https://www.site.ru?

Share this post


Link to post
Share on other sites
23 минуты назад, ibond сказал:

вот с второго сервера, там один конфиг:

А если в server_name не указаны варианты с www, то они же вроде вообще не обрабатываются в этих правилах

24 минуты назад, ibond сказал:

server_name site.ru;

т.е. может ли вообще такая вот ситуация возникнуть?

25 минут назад, ibond сказал:

## redirect www to no www if ($host = 'www.site.ru' ) { rewrite ^/(.*)$ https://site.ru/$1 permanent; }

 

Share this post


Link to post
Share on other sites
10 минут назад, i3bepb сказал:

Надо чтобы всегда перекидывало на https://www.site.ru?

да, именно так.

Share this post


Link to post
Share on other sites
Posted (edited)
1 минуту назад, magneto2010 сказал:

да, именно так.

 Вот получается 4 варианта:

http c www

http без

https c www

https без

 

Первые два случая во втором server у Вас, где слушается 80 порт:

server {
    listen      46.30.42.143:80;
    server_name site.ru www.site.ru;
    return 301 https://www.site.ru$request_uri;
}

Т.е. если пришел на 80 порт то явно по http и без разницы с www или без в любом случае надо на https://www.site.ru перебросить. Т.е. все эти if-ы лишние и только тормозят. Осталось еще два следующих случая обработать - https с www это наш рабочий вариант тут должен уже отработать сайт с ним все ясно. Остается еще вариант "https без", его обработку надо в первый server написать

Edited by i3bepb
не дописал
  • +1 1

Share this post


Link to post
Share on other sites
2 часа назад, i3bepb сказал:

т.е. может ли вообще такая вот ситуация возникнуть?

Я дал как пример, а думать уже самому ... Могу подсказать:

server_name domain.ru;
return 301 http://www.$host$request_uri;

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.