2017-02-14 7 views
7

У меня есть мой ниже nginx config, я пытаюсь перенаправить все на https://www, независимо от того, что входит, например, http://example.com, http://www.example.com или https://example.com.Nginx: перенаправить не-www на www https

Я просмотрел множество тем, посвященных SO, и попробовал пару вещей, но все еще в тупике, я никогда не смогу получить https://example.com для перенаправления на шаблон https://www !?

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

server { 
    listen  443 ssl; 

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; 
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
    ssl_prefer_server_ciphers on; 
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; 
    ssl_dhparam /etc/nginx/ssl/dhparams.pem; 
    ssl_session_timeout 30m; 
    ssl_session_cache shared:SSL:10m; 
    ssl_buffer_size 8k; 
    add_header Strict-Transport-Security max-age=31536000; 

    root   /usr/share/nginx/html; 

    # Load configuration files for the default server block. 
    include /etc/nginx/default.d/*.conf; 

    location/{ 
    } 

    error_page 404 /404.html; 
     location = /40x.html { 
    } 

    error_page 500 502 503 504 /50x.html; 
     location = /50x.html { 
    } 
} 

ответ

6

Сделать один server блок сервера по умолчанию и дать другой server блокировать один истинный server_name.

server { 
    listen 80 default_server; 
    listen 443 ssl default_server; 

    ssl_certificate ...; 
    ssl_certificate_key ...; 
    return 301 https://www.example.com$request_uri; 
} 

server { 
    listen 443 ssl; 
    server_name www.example.com; 

    ssl_certificate ...; 
    ssl_certificate_key ...; 
    ... 
} 

Для сервера по умолчанию для https требуется действующий сертификат. Предполагая, что у вас есть подстановочный знак - большинство операторов ssl_ можно было перемещать во внешний блок и наследовать оба блока сервера. Например:

ssl_certificate ...; 
ssl_certificate_key ...; 
ssl_...; 

server { 
    listen 80 default_server; 
    listen 443 ssl default_server; 
    return 301 https://www.example.com$request_uri; 
} 

server { 
    listen 443 ssl; 
    server_name www.example.com; 
    ... 
} 

См this document больше.

 Смежные вопросы

  • Нет связанных вопросов^_^