Nginx的非wwwredirect到www与SSL不工作

我一直在这个工作了几个小时,仍然无法看到我的configuration有什么问题。 请看下面。

在/ etc / nginx的/启用的站点- /默认

server { listen 80; server_name example.com www.example.com; return 301 https://www.example.com$request_uri; } server { listen 443 ssl; server_name example.com www.example.com; 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 'ECDHE-RSA-AES128...; location / { include uwsgi_params; uwsgi_pass unix:/my_socket/site.sock; } location /static/ { alias /my_static/location/; } location /media { alias /my_media/location/; } location ~ /.well-known{ allow all; } return 301 https://www.example.com$request_uri; } 

当我尝试访问example.com时www.example.com将redirect到https://www.example.com (这正是我想要的),但是除非我删除下面的最后一行代码,否则该页面无法工作。

 return 301 https://www.example.com$request_uri; 

删除上面的行后,所有链接工作正常,但不redirect到www


机:

  • Ubuntu 14.04
  • nginx / 1.4.6(Ubuntu)与uWSGI
  • 在Google云端平台(Compute Engine)中运行的DJango 1.8.4

就像总结一样,configuration这些redirect的正确方法是:

 server { listen 80; server_name example.com www.example.com; return 301 https://www.example.com$request_uri; } server { listen 443 ssl; server_name example.com; 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 'ECDHE-RSA-AES128...; return 301 https://www.example.com$request_uri; } server { listen 443 ssl; server_name www.example.com; 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; ... rules for the actual website ... } 

所以,我们有一个服务器的http域用于example.comwww.example.com做redirect。

然后,我们有一个https域名服务器块来做redirect。

然后我们有域名为www.example.com https服务器块,其中包含实际网站的设置。

正如评论中提到的,你应该在你的443块中添加内容。

例如,您应该添加上游并转发所有请求。