LINUX.ORG.RU
решено ФорумAdmin

http и https вместе nginx. Centos7.

 , ,


0

1

Всем доброго времени суток. Настраивал сервер по http, сейчас нужно сделать также и для https, так как есть сертификаты свои.

Изначально настройка конфига nginx была такой :

server {
    listen       80 default_server;
    set $root_path /usr/share/nginx/html;

    location / {
        root   $root_path;
        index index.php index.hml;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php-fpm/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_param DOCUMENT_ROOT $root_path;
    }
}

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

server {
    listen       80 default_server;
    listen       443 ssl;
    set $root_path /usr/share/nginx/html/webmail;
    ssl on;

    location / {
        root   $root_path;
        index  index.php index.hml;
    }
    client_max_body_size 1024m;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php-fpm/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_param DOCUMENT_ROOT $root_path;
}
 /scripts$fastcgi_script_name;
        ssl_certificate /etc/ssl/mail/public.crt;
        ssl_certificate_key /etc/ssl/mail/private.key;

В первом варианте нет доступа по https, а во втором пропадает по http, но появляется по https. Подскажите, пожалуйста, в какую сторону копать или, где в настройках я ошибся?



Последнее исправление: maximice (всего исправлений: 1)

Ты опять выходишь на связь))

Заведи как минимум отдельный блок server, а еще лучше отдельный конфиг-файл для ssl. HTTPS для nginx готовится именно так.

Например, посмотри 8-й пункт здесь

В одном блоке сервер два порта у тебя работать не будут, ты это уже видишь.

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

Может быть. Я говорю как много раз настраивал я и все работает.

Twissel ★★★★★
()

Во втором случае убери «ssl on;» - оно и так заявлено на 443 порту, а в этом виде заявляется ещё и на 80-м.

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

Можете еще подсказать. Нужно сделать редирект с http на https. Нашел вариант вписать строку в блок сервера 80 порта:

rewrite ^(.*) http://$host$1 permanent;

Но столкнулся с проблемой, сделал в конфиге nginx'а два блока сервера:

server {
    listen       80 default_server;
    set $root_path /usr/share/nginx/html/webmail;

    location / {
        root   $root_path;
        index  index.php index.hml;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php-fpm/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_param DOCUMENT_ROOT $root_path;
}
}

server {
        listen          443 ssl;
        set $root_path /usr/share/nginx/html;

    location / {
        root   $root_path;
        index index.php index.hml;
        }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php-fpm/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_param DOCUMENT_ROOT $root_path;
    }
        ssl_certificate /etc/ssl/mail/public.crt;
        ssl_certificate_key /etc/ssl/mail/private.key;
}

По 80ому работает, по 443 нет. Подскажите в какую сторону копать?

maximice
() автор топика

Я обычно делаю так:

server {
    listen 80;
    listen 443 ssl http2;

    server_name .domain.com;

    ssl_certificate     /etc/letsencrypt/live/domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;

    include conf.d/redirect-to-https.conf;

    .... остальные настройки ....
}

/etc/nginx/conf.d/redirect-to-https.conf
if ($https != on){ return 301 https://$http_host$request_uri; }

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

Спасибо большое. Отдельным файлом не проконало, а вот вписав в основном конфиг заработало

if ($https != on){ return 301 https://$http_host$request_uri; }

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