我已经安装了新的 SSL 证书并设置了 Nginx 来使用它。但是尝试在网站上访问 HTTPS 时请求超时。当我通过端口 80 远程登录到我的域时,它会连接,但在端口 443 上超时。我不确定 Ubuntu 上是否有一些默认设置阻止了连接。cURL 也会超时到 HTTPS 地址,但会响应常规 HTTP。
UFW 状态显示:
443 ALLOW Anywhere
netstat -a 显示:
tcp 0 0 *:https *:* LISTEN
nmap localhost 显示:
443/tcp open https
Nginx 配置中的相关块是:
server {
listen 443;
listen [::]:80 ipv6only=on;
listen 80;
root /path/to/app;
server_name mydomain.com
ssl on;
ssl_certificate /etc/nginx/ssl/ssl-bundle.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
location / {
proxy_pass http://mydomain.com;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
编辑:尝试了一系列 nginx 配置选项后,我真的怀疑这是设置问题。如果 ssl-bundle.crt 搞砸了,是否会导致超时?如果是这样,我可以恢复到 PositiveSSL 寻求支持。
答案1
尝试这个:
server {
listen 443 ssl;
listen [::]:80 ipv6only=on;
listen 80;
root /path/to/app;
server_name mydomain.com
ssl_certificate /etc/nginx/ssl/ssl-bundle.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
location / {
proxy_pass http://mydomain.com;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
(移除ssl on;
,添加ssl
至listen 443;
)
答案2
我同意 Steffen 的评论(在同一个服务器块中监听 443 和监听 80)。
请在不同的服务器块中处理 HTTP 和 HTTPS。我假设第二个 listen 指令已覆盖您的第一个 listen 指令。此外,我错过了您用于端口 443 的 listen-directives 中的“ssl”关键字。
server {
listen 80;
listen [::]:80 ipv6only=on;
root /path/to/app;
server_name mydomain.com
location / {
proxy_pass http://mydomain.com;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 443 ssl;
listen [::]:443 ssl ipv6only=on;
root /path/to/app;
server_name mydomain.com
ssl on;
ssl_certificate /etc/nginx/ssl/ssl-bundle.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
location / {
proxy_pass http://mydomain.com;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
正如用户 xofer 所报告的那样,可以在一个服务器块中同时使用 HTTP 和 HTTPS。以下是此一体化解决方案的一个示例:
server {
listen 80;
listen [::]:80 ipv6only=on;
listen 443 ssl;
listen [::]:443 ssl ipv6only=on;
root /path/to/app;
server_name mydomain.com
ssl on;
ssl_certificate /etc/nginx/ssl/ssl-bundle.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
location / {
proxy_pass http://mydomain.com;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
答案3
这个问题不是 Nginx 的问题,也不是任何人都能解决的问题,所以我会把它留在这里,以防将来有人遇到这个问题。
问题是,由于我使用的是免费计划,所以 Cloudflare 上的 443 端口已关闭。免费计划不支持 SSL。