Nginx:将非wwwredirect到www https

我有我的下面的nginxconfiguration,我试图redirect到https:// www的所有内容,例如http : //example.com,http : //www.example.com或https://示例.com 。

我已经看了很多关于这个主题,并尝试了几件事情,但仍然难倒,我不能让https://example.comredirect到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 { } } 

使一个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; ... } 

请参阅此文档了解更多