先澄清一个端口问题
Nginx 不能同时监听 8080 又转发到 8080(端口冲突)。常见做法是:
Nginx 监听 443(HTTPS + SSL 证书)→ 转发到本机 8080 服务
配置文件
Debian/Ubuntu 系统
创建 /etc/nginx/sites-available/myproxy.conf:
# HTTP 自动跳转 HTTPS
server {
listen 80;
listen [::]:80;
server_name u.177857.xyz; # 改成你的域名
return 301 https://$host$request_uri;
}
# HTTPS 反向代理
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on; # Nginx >= 1.25.1;旧版本用 listen 443 ssl http2;
server_name u.177857.xyz; # 改成你的域名
# SSL 证书路径(Let's Encrypt 示例,按实际路径修改)
ssl_certificate /etc/ssl/_.177857.xyz.pem;
ssl_certificate_key /etc/ssl/_.177857.xyz.key;
# SSL 安全配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# 反向代理到本机 8080
location / {
proxy_pass http://127.0.0.1:8080;
# 传递真实客户端信息
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket 支持(可选,不需要可删除)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 超时设置(按需调整)
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}启用配置:
sudo ln -s /etc/nginx/sites-available/myproxy.conf /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginxCentOS/RHEL 系统
直接创建 /etc/nginx/conf.d/myproxy.conf,内容同上,然后:
sudo nginx -t && sudo systemctl reload nginx关键点说明
常见问题
1. CentOS 上报 502(SELinux 拦截)
sudo setsebool -P httpd_can_network_connect 12. 防火墙放行 443
# Ubuntu
sudo ufw allow 443/tcp
# CentOS
sudo firewall-cmd --permanent --add-service=https && sudo firewall-cmd --reload3. 还没有 SSL 证书? 用 Let's Encrypt 免费申请:
sudo apt install certbot python3-certbot-nginx # Debian/Ubuntu
sudo certbot --nginx -d u.177857.xyz报错:cannot load certificate
2026/09/22 10:09:21 [emerg] 449116#449116: cannot load certificate "/etc/ssl/_.177857.xyz.pem": BIO_new_file() failed (SSL: error:80000002:system library::No such file or directory:calling fopen(/etc/ssl/_.177857.xyz.pem, r) error:10000080:BIO routines::no such file)
nginx: configuration file /etc/nginx/nginx.conf test failed问题已经定位了。你 Nginx 配置里写的证书文件名是 _.177857.xyz.pem,但实际目录里并没有这个文件。
通过 ll /etc/ssl 命令的输出可以看到,你的证书文件是分开存放的,并且文件名里包含了括号,这很可能是导致问题的根源。
📂 文件分析
你当前目录下的证书文件如下:
c:这是你的域名证书。_.177857.xyz.key:这是你的私钥。'_.177857.xyz (intermedia).pem':这是中间证书。'_.177857.xyz (server).pem':这是服务器证书。
Nginx 的 ssl_certificate 指令需要一个包含域名证书和中间证书的完整证书链文件。
🛠️ 解决方案
你需要将域名证书和中间证书合并成一个文件,并在 Nginx 配置中引用它。
检查 .crt 是否已包含完整证书链
grep -c "BEGIN CERTIFICATE" _.177857.xyz.crt输出 1 → 只有服务器证书,需要手动合并
输出 2 或更多 → 已含完整链,直接用
_.177857.xyz.crt
1. 合并证书文件(仅当上一步输出为 1 时)
顺序必须是 服务器证书在前,中间证书在后。
在终端执行以下命令,将 .crt 文件和 (intermedia).pem 文件合并成一个新的 .pem 文件。
注意:因为文件名里有空格和括号,所以必须用单引号 ' 把文件名括起来。
cat '/etc/ssl/_.177857.xyz (intermedia).pem' /etc/ssl/_.177857.xyz.crt > /etc/ssl/_.177857.xyz.pem这个命令会创建一个新的 /etc/ssl/_.177857.xyz.pem 文件,它包含了完整的证书链。
2. 检查并修改 Nginx 配置
打开你的 Nginx 配置文件,确保 ssl_certificate 和 ssl_certificate_key 指向正确的文件。
nano /etc/nginx/conf.d/u.177857.xyz.conf配置应该修改为:
# 指向我们刚刚合并生成的完整证书链文件
ssl_certificate /etc/ssl/_.177857.xyz.pem;
# 指向你的私钥文件
ssl_certificate_key /etc/ssl/_.177857.xyz.key;3. 再次测试配置
保存修改后,重新测试 Nginx 配置:
nginx -t如果一切顺利,你应该会看到 test is successful 的提示。
💡 小提示 文件名里带空格和括号在命令行操作时非常容易出错。为了以后方便管理,建议你把证书文件重命名为不带特殊字符的名字,例如 177857.xyz_bundle.pem 和 177857.xyz.key。
验证
curl -I https://u.177857.xyz返回后端服务的响应头即配置成功。