我一直在这个工作了几个小时,仍然无法看到我的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 。
机:
就像总结一样,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.com和www.example.com做redirect。
然后,我们有一个https域名服务器块来做redirect。
然后我们有域名为www.example.com https服务器块,其中包含实际网站的设置。
正如评论中提到的,你应该在你的443块中添加内容。
例如,您应该添加上游并转发所有请求。