LINUX.ORG.RU

Suspicious symbols NGINX

 , ,


0

2

До перехода на HTTPS у меня все работало «без WWW». Теперь пришла пора добавить еще немного инструкций склейки.

Вот конфиг для «любой сервер_нейм» (чтоб каждому домену не писать).

server {
        server_name _;

        #раньше только "с WWW" отправлял на "без WWW"
        if ($host ~* ^www\.(.+)$) {
                set $newhost $1;
                return 301 https://$newhost$request_uri;
        }

        #теперь нужно с "HTTP" направлять на "HTTPS"
        if ($scheme != "https") {
                return 301 https://$host$request_uri;
        }

}

Домены у меня описаны такими блоками

server {
        listen 80;
        listen 443 ssl http2;
        server_name https://site.ru;

        root /var/www/site.ru/folder;
        index index.php;

        ssl on;
        ssl_certificate     /etc/letsencrypt/live/site.ru/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/site.ru/privkey.pem;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM;

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }
}

И когда я делаю тест конфигов (nginx -t) на выхлопе варнинг.

nginx: [warn] server name "https://site.ru" has suspicious symbols in /etc/nginx/sites-enabled/site.ru:17
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Оно работает, но «подозрительные символы» :))

Лишних пробелов нет, точки с запятыми на концах строк есть... Что ему в символах не нравится то?

Если убрать из имени сервера протокол https, тогда редирект http://site.ru => https://site.ru перестанет исполняться.


server_name нужно указывать имена хостов без протоколов

Deleted
()
Ответ на: комментарий от goingUp

...то надо убрать и listen 80;

Убрал протокол из имени сервера, убрал listen 80;

Chrome - все редиректы ведут на https://site.ru (как надо). Safari - редирект с https://www.site.ru на https://site.ru не выполняется.

Кроме того, Safari ругается на неподписанность сертификата...

Я пересоздал letsencrypt, добавив в файл сертификата поддомен http://www.site.ru

Теперь во всех браузерах редирект с https://www.site.ru на https://site.ru не выполняется.

k0ttee
() автор топика
Ответ на: комментарий от goingUp

Редиректы в блоке

server {
        server_name _;

        #раньше только "с WWW" отправлял на "без WWW"
        if ($host ~* ^www\.(.+)$) {
                set $newhost $1;
                return 301 https://$newhost$request_uri;
        }

        #теперь нужно с "HTTP" направлять на "HTTPS"
        if ($scheme != "https") {
                return 301 https://$host$request_uri;
        }

}

k0ttee
() автор топика
Ответ на: комментарий от k0ttee

Эта секция работает только для 80 порта, т.е. http. Тебе нужно прописать первый редирект во вторую секцию server.

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

Теперь в Safari все ведет куда следует.

Но в Chrome адреса http://site.ru и http://www.site.ru вообще не открываются.

В секцию SSL добавил строку:

add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
В статьях обещали, что будет принудительно отправлять на HTTPS... Но почему-то в Chrome тупо блокирует HTTP :(((

k0ttee
() автор топика
Ответ на: комментарий от k0ttee

Оно блокировало до того, как ты добавил строку, или уже после? Учти, что этот заголовок будет действовать, даже если ты его уберешь :)

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

В сервере server_name _; только отправка на HTTPS. В сервере server_name site.ru; только редирект на «без WWW».

Ура. Открывается как было задумано во всех браузерах. И строка с макс-эджем на 2 года не мешает.

Теперь воюю с продлением Let’s Encrypt :((

./letsencrypt-auto renew

Хочется потестить, повесить на крон и забыть. А оно сопротивляется.

Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/site.ru.conf
-------------------------------------------------------------------------------
Cert not yet due for renewal

The following certs are not due for renewal yet:
  /etc/letsencrypt/live/site.ru/fullchain.pem (skipped)
No renewals were attempted.

В логах причины провала не наблюдаю cat /var/log/letsencrypt/letsencrypt.log

2016-11-05 17:37:40,104:DEBUG:certbot.main:Root logging level set at 20
2016-11-05 17:37:40,105:INFO:certbot.main:Saving debug log to /var/log/letsencrypt/letsencrypt.log
2016-11-05 17:37:40,105:DEBUG:certbot.main:certbot version: 0.9.3
2016-11-05 17:37:40,105:DEBUG:certbot.main:Arguments: []
2016-11-05 17:37:40,106:DEBUG:certbot.main:Discovered plugins: PluginsRegistry(PluginEntryPoint#standalone,PluginEntryPoint#manual,PluginEntryPoint#nginx,PluginEntryPoint#webroot,PluginEntryPoint#apache,PluginEntryPoint#null)
2016-11-05 17:37:40,117:INFO:certbot.renewal:Cert not yet due for renewal
2016-11-05 17:37:40,121:INFO:certbot.renewal:Cert not yet due for renewal
2016-11-05 17:37:40,121:DEBUG:certbot.renewal:no renewal failures

И че? Теперь 3 месяца ждать чтобы на крон повесить?

k0ttee
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.