启用Let's Encrypt证书后HTTPS响应被拦截/阻塞,HTTP正常的问题排查求助
启用Let's Encrypt证书后HTTPS响应被拦截/阻塞,HTTP正常的问题排查求助
各位大佬好,我遇到了一个头疼的问题:我的网站 http://bavarian-joke-generator.org 目前HTTP版本可以正常运行,但在通过Certbot配置Let's Encrypt证书启用HTTPS之后,HTTPS的响应似乎被拦截或者阻塞了,客户端根本拿不到正常响应。
浏览器的表现如下:
- Firefox:(原提问未记录具体错误表现)
- Safari:(原提问未记录具体错误表现)
我已经折腾了好一阵,实在摸不清到底哪里出问题了,想请大家帮忙看看!
已排查的细节
- 从Nginx日志来看,我的Nginx容器已经成功发送了HTTPS响应,但客户端这边就是收不到,感觉像是中间被拦截了
- 被阻塞的HTTPS响应日志(原提问未提供具体内容)
- 正常工作的HTTP响应日志(原提问未提供具体内容)
- 服务器是Hetzner提供的,当前UFW防火墙规则已配置,被屏蔽的IP不是我自己的
- 项目完整代码可以在它的GitHub仓库查看
- 重点说下我的Nginx配置:Nginx是作为Docker Compose的一部分运行的容器,具体配置如下:
Nginx主配置
user nginx; worker_processes auto; error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; gzip on; proxy_max_temp_file_size 0; include /etc/nginx/conf.d/*.conf; }
包含的Server块配置
server { server_name bavarian-joke-generator.org www.bavarian-joke-generator.org; listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate /etc/nginx/ssl/live/bavarian-joke-generator.org/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/live/bavarian-joke-generator.org/privkey.pem; listen 80; listen [::]:80; add_header Strict-Transport-Security 'max-age=63072000; includeSubDomains; preload' always; add_header Content_Security-Policy "default-src 'self'; script-src 'sha384-7FvcOpf85HsGS89sLrvOOHZYqgaEqbfUi87HhpbqbndTSFw+XpzbDMK5ZcxD28fe'; frame-ancestors: 'self'; form-action 'self'; base-uri 'self';"; add_header X-Content-Type-Options: "nosniff"; root /usr/share/nginx/html; error_page 400 /errors/400_wrong_input.html; error_page 404 /errors/404_joke_not_found.html; location / { } # SSL Certificate: location /.well-known/acme-challenge/ { root /var/www/certbot; } location /errors/ { root /usr/share/nginx/html; internal; } location ^~ /assets/ { root /usr/share/nginx; } location ^~ /RegEx/ { root /usr/share/nginx; } location ^~ /ssr/ { # pass will exchange ssr/ for /: proxy_pass "http://${SSR_HOST}:${SSR_PORT}/"; proxy_http_version 1.1; proxy_set_header "Connection" ""; proxy_intercept_errors on; } location ^~ /auth/ { # pass will exchange auth/ for /: proxy_pass "http://${AUTH_HOST}:${AUTH_PORT}/"; proxy_http_version 1.1; proxy_set_header "Connection" ""; # No error pages -> Do not intercept errors } location ~ \.(?:js|.css)$ { root /usr/share/nginx/html; } }
已尝试的解决办法
- 将Nginx的Server块拆分成两个独立块:一个专门监听80端口,另一个监听443端口,同时配置HTTP到HTTPS的重定向
- 重新启用UFW的防火墙规则
- 重新续期了SSL证书
- 通过sslhopper.com检查过SSL证书的有效性,显示正常
- 检查过服务器上是否存在其他防火墙规则导致阻塞,暂时未发现问题
实在没辙了,有没有大佬能指点一下可能的原因?
备注:内容来源于Stack Exchange,提问作者SturmDerLiebe
相关产品推荐
相关产品推荐

