django - Nginx 重定向(非 www 到 www)不适用于 Certbot
问题描述
我有一个运行 Python/Django/uWSGI/Nginx 设置的网站。我还使用 Certbot 在我的网站上启用 https。我从非 www 到 www 的重定向(例如“example.com”到“www.example.com”)会导致“错误请求(400)”消息,即使我无法发现与 Nginx/Certbot 文档的任何偏差. 这是我的sites-available
Nginx 代码的相关部分:
server {
listen 80;
server_name example.com www.example.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/myname/example;
}
location / {
include uwsgi_params;
uwsgi_pass unix:/run/uwsgi/activities.sock;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; #managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; #managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
if ($scheme != "https") {
return 301 https://$host$request_uri;
} # managed by Certbot
}
我找到了一个类似的 StackOverflow 答案(Nginx: redirect non-www to www on https),但没有一个解决方案对我有用。我有 example.com 和 www.example.com 的 SSL 证书。我还尝试根据该答案中的评论为 example.com 创建一个单独的 443 ssl 服务器块,但它也不起作用。我的sites-available
和sites-enabled
代码是一样的。
我究竟做错了什么?
解决方案
似乎 server_name 在转换为 $host 变量时选择了 server_name 列表中的第一个。让我知道这是否有效。我目前无法对此进行完全测试。
尝试将 server_name 交换server_name www.example.com example.com;
为以及更改return 301 https://$host$request_uri;
为return 301 https://$server_name$request_uri;
server {
server_name www.example.com example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
# SSL CERT STUFF.
server_name example.com;
return 301 https://www.$server_name$request_uri;
}
server {
listen 443 ssl;
# SSL CERT STUFF.
server_name www.example.com;
# LOCATION STUFF
}
推荐阅读
- json - 我可以在 Loki 和 Grafana 的同一个 CDK 部署代码中创建 2 个或更多 ECS 任务吗?
- javascript - 点击链接后隐藏导航栏?
- rust - 特征界限不适用于枚举作为通用参数
- python - Python文件在输入后立即退出
- offline - 有没有办法在不登录云的情况下对 Onenote 2010/2013 桌面进行编程?
- python - 将 datetime.weekday( ) 更改为 "MON"
- java - Java抛出异常自定义消息?
- python - BeautifulSoup 帮助带有来自多个的多个字符串
标签,find_all 研究,
- c++ - 由于 reinterpret_borrow “找不到匹配的重载函数”,pybind11 无法编译
- java - java Socket异常错误连接重置