2017-06-05 235 views
1

我試圖讓nginx的HTTP重定向://WWW.example到https://例(SSL/HTTPS和非www)

  1. http://www.domain
  2. https://www.domain
  3. http:// domain
  4. https:// domain

所有重定向到4 https://domain

3和4都在4

1和2結束 - 不要在第4

我還試圖使用S3桶和CloudFront的做WWW到非www重定向結束,但不幸的是,這會導致證書問題。

這是我目前在我的nginx的配置:

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

server { 
    listen 443; 
    server_name www.{{ nginx_server_name }} 

    ssl on; 
    charset utf-8; 
    ssl_certificate  {{ certbot_output_dir }}/{{ letsencrypt_cert_filename }}; 
    ssl_certificate_key {{ certbot_output_dir }}/{{ letsencrypt_privkey_filename }}; 
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2; 
    ssl_ciphers   'ECDHE-.......... 
    ssl_prefer_server_ciphers on; 

    return 301 https://{{ nginx_server_name }}$request_uri; 
} 

server { 
    listen    443; 
    server_name   {{ nginx_server_name }}; 
    ssl on; 
    charset utf-8; 

    ssl_certificate  {{ certbot_output_dir }}/{{ letsencrypt_cert_filename }}; 
    ssl_certificate_key {{ certbot_output_dir }}/{{ letsencrypt_privkey_filename }}; 

    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2; 
    ssl_ciphers   'ECDHE-.......... 
    ssl_prefer_server_ciphers on; 

回答

0

你的配置似乎是正確的,但這些參數? 也許這對你的作品:

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

這將所有的HTTP請求www.example.com和example.com轉發給https://example.com你應該再還與主機名www.example.com HTTPS創建一個監聽器以相同的方式轉發。 那麼不使用參數,或者是因爲混淆?

+0

嗨斯蒂芬 的參數是ansible變量 nginx_server_name:domain.com 此外,將在第二服務塊你所描述的不是嗎? ,即這幾行會在https上用主機名監聽www.domain.com 服務器監聽443; server_name www。{{nginx_server_name}} ssl on; –

+0

如果您在返回301 ...行中指定域,它將修復您的問題。因爲它是一個參數,它會一直匹配。 – Stephan

相關問題