我已经处理了好几个小时,但仍然看不出我的配置有什么问题。请参见下文。
/etc/nginx/sites-enabled/default
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;
}
当我尝试访问示例.com,www.example.com它会重定向到https://www.example.com(这就是我想要的)但是除非我删除下面最后一行代码,否则页面将无法正常工作。
return 301 https://www.example.com$request_uri;
删除上面那行之后,所有链接都正常工作,但没有重定向到万维网。
机器:
- Ubuntu 14.04
- nginx/1.4.6 (Ubuntu) 和 uWSGI
- 在 Google Cloud Platform (Compute Engine) 中运行的 DJango 1.8.4
答案1
总结一下,配置这些重定向的正确方法是:
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
执行重定向。
example.com
然后我们有一个用于执行重定向的域的 https 服务器块。
然后我们有用于域的 https 的服务器块www.example.com
,其中包含实际网站的设置。
答案2
正如评论中提到的,您应该在 443 块中添加内容。
例如,您应该添加上游并将所有请求转发到那里。