![SSL、Django、Gunicorn、NGINX - 无法使用 https:// + domain.com 访问网站](https://linux22.com/image/693158/SSL%E3%80%81Django%E3%80%81Gunicorn%E3%80%81NGINX%20-%20%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8%20https%3A%2F%2F%20%2B%20domain.com%20%E8%AE%BF%E9%97%AE%E7%BD%91%E7%AB%99.png)
我最近推出了一个使用 SSL 的网站,特别是 Comodo PositiveSSL。
我遇到的唯一问题是无法使用
https://example.com
我已经在 NGINX 中为 http 设置了重定向。这是我的配置:
upstream myapp {
server localhost:8000;
}
server {
listen 80;
server_name www.example.com example.com;
root /var/www/;
if ($host !~* ^(example.com|www.example.com)$ ) {
return 444;
}
return 301 https://$host$request_uri;
}
server {
listen 443 default ssl;
root /var/www/;
server_name www.example.com example.com;
if ($host !~* ^(example.com|www.example.com)$ ) {
return 444;
}
ssl_certificate /etc/nginx/ssl/my_crt.crt;
ssl_certificate_key /etc/nginx/ssl/my_crt.key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
access_log /var/log/nginx/myapp_access.log;
error_log /var/log/nginx/myapp_error.log;
gzip on;
gzip_http_version 1.0;
gzip_proxied any;
gzip_types text/css application/x-javascript;
gzip_vary on;
client_max_body_size 0;
try_files $uri @myapp;
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
}
location @myapp {
client_max_body_size 0;
proxy_pass http://domain;
proxy_redirect off;
proxy_read_timeout 5m;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
我的 DNS 注册商是 namecheap,并且我在 cpanel 中设置了 url 重定向:
host: @
value: http://www.example.com
通过这个我能够使用以下命令成功访问我的网站:
example.com = 302 Moved Temporarily
www.example.com = 302 Moved Temporarily
http://example.com = 302 Moved Temporarily
http://www.example.com = 302 Moved Temporarily
但这里却并非如此:
https://example.com = Failed to connect to domain.com port 443: Connection refused
我目前正在确保我的 SSL 证书允许以下两项操作:
https://example.com
https://www.example.com
似乎有文档说明了这一点:
Secures: www.site.com and site.com
任何能帮助我纠正错误问题的见解都将不胜感激。
谢谢。
更新:netstat -an | grep 443
输出:
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
unix 2 [ ACC ] STREAM LISTENING 6131379 /tmp/ssh-Cpqcfwspdv/agent.25443
答案1
因为你得到了连接被拒绝错误在监听套接字时TCP/443我认为肯定是数据包过滤器在传输过程中造成的。请检查主机上的防火墙配置,如果防火墙已禁用,请检查传输过程中的任何中间防火墙。
答案2
如果你的 NGINX 配置匿名化是正确的,那么你的proxy_pass
指令很可能是错误的。在当前状态下,到的连接http://example.com
被重定向到https://example.com
您点击try_files
指令首先尝试从 提供文件/var/www/
,如果不行,则将请求传递到指定位置@myapp
。
这就是我觉得奇怪的地方。我想象这应该是命中 Gunicorn 实例(上游myapp
),但它却将请求代理到,http://domain
而它最有可能被传递给http://myapp
。
它没有解释为什么http://domain
似乎被转换为https://domain.com
但无论如何,我建议你尝试一下。
答案3
感谢 @drookie 和 @Ginnungagap 的指导。通过这些指导,我能够排除服务器连接和 NGINX 配置的潜在原因。最终的解决方案分为两部分,其中一部分来自我的域名注册商 namecheap。解决方案如下:
1) 创建 A 记录以将我的裸域 (example.com) 指向我的服务器 IP 地址。2) 更新我的 nginx 配置以考虑流向 example.com 和 www.example.com 的流量
@Ginnungagap 在我最初的问题中尝试伪造我的 nginx 配置时,我proxy_pass
错误地输入了指令。它被传递给http://myapp
。
我在这里找到了更优化、更安全的配置nginx 配置
我根据他的配置调整了我的配置(为了更好的衡量,添加了额外的 SSL 安全指令)但最终看起来非常相似。
再次非常感谢您就此事付出的时间和指导。