Nginx HTTPS работает только после обновления страницы - PullRequest
0 голосов
/ 04 ноября 2018

Я настроил letsencrypt для https, и он отлично работает, когда нет www. По какой-то причине я могу только заставить 'example.com' нормально работать с https (т. Е. Перенаправить на https://example.com), но когда я перехожу на "www.example.com", он не переходит прямо на https, только после того, как я обновляю страницу, она делает это. Вот мой nginx conf по умолчанию:

server {
listen              80;
server_name         www.example.com example.com;
return              301 https://$host$request_uri;
}

server {
    # listen 80 default_server;
    # listen [::]:80 default_server;
    listen 443 ssl;
    server_name example.com www.example.com;

    root /var/www/html;

    index index.html index.htm index.nginx-debian.html;

    server_name _;

    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            try_files $uri $uri/ =404;
    }



    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
}

Я перепробовал все виды перенаправлений в conf, но ни один из них, похоже, не работает. Таким образом, https, кажется, работает, но только после обновления страницы. Любая помощь будет оценена, спасибо.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

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

  server {
        listen      80;
        server_name www.example.com example.com;
        rewrite ^ https://$host$request_uri? permanent;
    }

    server {
        listen 443;
        server_name example.com www.example.com;
        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;

        ssl on;
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
        ssl_session_cache shared:SSL:2m;    


    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            try_files $uri $uri/ =404;
}
0 голосов
/ 04 ноября 2018

Я понятия не имею, почему это сработало, а другие ответы не дали, что, казалось, делало то же самое. Я изменил верхний блок сервера на это. Может быть полезно, так как я не смог найти ответ на эту конкретную проблему.

server {
    listen 80;
    listen [::]:80;
    server_name www.example.com;
    return 301 https://example.com$request_uri;
}
server {
    listen              80;
    server_name         example.com;
    return              301 https://example.com$request_uri;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...