2015-02-25 4 views
1

В Nginx, мы хотим, чтобы перенаправить все запросы, отправляемые:Перенаправление WWW и HTTP запросы на https: //, ловя все домены, в Nginx

https://www.<domain> 
http://www.<domain> 
http://<domain> 

To:

https://<domain> 

т.е. SSL , без префикса www, как уловки, без указания каждого домена по отдельности.

конфиги мы придумали почти работ:

server { 
     server_name "~^www\.(.*)$" ; 
     return 301 https://$1$request_uri ; 
} 

server { 
     listen     80 default; 
     client_max_body_size 10m; 
     client_body_buffer_size 128k; 
     return     301 https://$host$request_uri; 
} 

server { 
     listen     443; 
     ssl      on; 
     ..... etc ...... 

... но первый блок сервера (WWW улов), как представляется, соответствие всех запросов, а не только те, которые WWW *

ответ

2

nginx manual: A redirect to a main site

server { 
    listen 80; 
    listen [::]:80; 

    server_name www.example.com; 

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

    server_name www.example.com example.org; 

    ssl_certificate  /path/to/my/cert; 
    ssl_certificate_key /path/to/my/key; 
} 

не потерять «все остальное»:.

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

более эффективным, лишь запустив переписывают по протоколу HTTP, что избавляет от необходимости проверять переменную $ схемы на каждом запросе (IfIsEvil)

Может быть, вы можете попробовать использовать в одном месте 80/443:

server { 
    listen 80; 
    listen [::]:80; 
    listen 443 default ssl; 

    server_name www.example.com; 

    ssl_certificate  /path/to/my/cert; 
    ssl_certificate_key /path/to/my/key; 

    if ($ssl_protocol = "") { 
     rewrite^ https://$server_name$request_uri? permanent; 
    } 
} 
+0

Спасибо, Валерий. Вы знаете, как применить это, чтобы поймать все домены? –

+0

пустой сервер на самом деле поймал весь сервер –

+0

@ValeriySolovyov почему это условие 'if' в последнем фрагменте? –