我在django框架中有一个web应用程序,我已经设置了一个nginx服务器来为该站点提供服务。我还在网站上设置了SSL。该网站适用于http和https。
现在我想将所有http请求定向到https,以便我的用户始终使用安全版本。
这是我的nginx配置:
server {
listen 80;
listen 443 ssl;
server_name site.com www.site.com;
ssl_certificate /path/to/SSL;
ssl_certificate_key /path/to/SSL/key;
location = /favicon.ico { access_log off; log_not_found off; }
location /site_media/static/ {
alias /home/user/folder/static/dist/;
}
location / {
include uwsgi_params;
uwsgi_pass unix:/tmp/site.sock;
}
}
现在,当我将301重定向插入https并重新启动服务器时,该网站没有响应。
return 301 https://$server_name$request_uri;
进入我的
server { ... }
任何想法如何解决这个问题,任何建议都将受到高度赞赏。
答案 0 :(得分:2)
将未受保护的return
语句放入服务器块将尝试重定向http
和https
站点,从而产生循环。您可以将return
语句放在if
块中,并检测协议何时不是https
,或者更常见的解决方案是将配置拆分为两个server
块,例如:
server {
listen 80;
server_name site.com www.site.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name site.com www.site.com;
ssl_certificate /path/to/SSL;
ssl_certificate_key /path/to/SSL/key;
location = /favicon.ico { access_log off; log_not_found off; }
location /site_media/static/ {
alias /home/user/folder/static/dist/;
}
location / {
include uwsgi_params;
uwsgi_pass unix:/tmp/site.sock;
}
}