2016-01-30 4 views
2

У меня есть следующая конфигурация nginx.Nginx перенаправление на домен www не работает

server { 
    listen 80; 
    listen [::]:80; 
    listen 443 ssl; 
    server_name example.com; 
    return 301 https://www.example.com$request_uri; 
} 
  • перенаправляет http://example.com к https://www.example.com
  • но не перенаправляет https://example.com к https://www.example.com.

Как перенаправить https://example.com на номер https://www.example.com?

+0

У вас есть действующий сертификат, установленный на этом точном сервере (не главный 'www.-' один? – Vasfed

+0

№. Сертификат предназначен только для субдомена www. Это проблема? @Vasfed –

+0

Это может быть, поскольку ssl не полностью настроен таким образом. Сертификаты обычно выдаются как для '' '' '' '' '' '' '' '' ', поэтому попробуйте просто скопировать его конфигурацию, даже если она не будет действительной - вы должны хотя бы получить предупреждение вместо того, чтобы молча работать – Vasfed

ответ

3

отделите http и https-трафик. ваша текущая конфигурация немного путается с вещами. Следующий код переписывает весь запрос от http://example.com к https://example.com, используя постоянную переадресацию:

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

Второго блок код будет обрабатывать запрос, поступающий из порта 443 (пример здесь даст вам рейтинг А на ssllabs.com):

server { 
    listen 443 ssl; 
    server_name example.com; 

    ssl_certificate /path_to/ssl.crt; 
    ssl_certificate_key /path_to/ssl.key; 
    ssl_session_timeout 1d; 
    ssl_session_cache shared:SSL:10m; 
    # ssl_session_tickets off; 

    # openssl dhparam -out dhparam.pem 2048 
    # ssl_dhparam /etc/nginx/SSL/dhparams.pem; 

    ssl_protocols TLSv1.1 TLSv1.2; 
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGC$ 
    ssl_prefer_server_ciphers on; 

    add_header Strict-Transport-Security "max-age=15768000;includeSubdomains; preload"; 

    root /srv/wwwroot/; 
    index index.html index.htm index.php; 

    client_max_body_size 20M; 

    location/{ 
     # your special config if needed 
    } 


} 

и, наконец, третий блок в нашей конфигурации мы перепишем https://www.example.com обратно https://example.com:

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

Надеюсь, это поможет.

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