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

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

问题描述:

我试图让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; 

你的配置似乎是正确的,但这些参数? 也许这对你的作品:

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