Nginx反向代理Hyperf需配置HTTPS卸载、请求转发与安全加固:监听443端口并引用fullchain.pem和privkey.pem证书,proxy_pass指向http://127.0.0.1:9501(不加尾部斜杠),设置X-Forwarded-*头传递原始信息,隐藏Server/X-Powered-By头,并关闭server_tokens。

Hyperf 默认监听本地端口(如 9501),不直接暴露 HTTPS 和公网访问能力。要让外网通过域名安全访问,必须用 Nginx 做反向代理,完成 HTTPS 卸载、端口隐藏和请求转发三件事。核心不是改 Hyperf,而是让 Nginx 成为唯一对外入口。
配置 HTTPS 域名与 SSL 证书
先确保你已拥有有效域名(如 pay.example.com)并申请了 SSL 证书(推荐 Let’s Encrypt 或阿里云免费证书)。证书文件通常包含:
- fullchain.pem:完整证书链
- privkey.pem:私钥文件
把这两个文件放到服务器固定路径,例如 /etc/letsencrypt/live/pay.example.com/。Nginx 配置中需明确引用它们,否则 443 端口无法启用 HTTPS。
编写 Nginx 反向代理规则
在 /etc/nginx/sites-available/pay.example.com 中写入以下最小可用配置:
server {
listen 80;
listen 443 ssl http2;
server_name pay.example.com;
<pre class="brush:php;toolbar:false;">ssl_certificate /etc/letsencrypt/live/pay.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/pay.example.com/privkey.pem;
# 关键:把所有请求转给本地 Hyperf
location / {
proxy_pass http://127.0.0.1:9501;
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;
}
# 防止泄露后端信息
proxy_hide_header X-Powered-By;
proxy_hide_header Server;}
注意:proxy_pass 后不能加斜杠(即不能写成 http://127.0.0.1:9501/),否则 Hyperf 的路由前缀可能错乱;不要硬编码 Host,始终用 $host 保持原始域名上下文。
隐藏后端特征与加固响应头
仅靠 proxy_pass 不足以隐藏架构细节。还需补充两项关键防护:
- 在
http{}全局块中添加server_tokens off;,关闭 Nginx 版本标识 - 在 server 块内使用
proxy_hide_header Server;和proxy_hide_header X-Powered-By;,清除后端服务返回的敏感头
这样外部看到的响应头里既没有 Server: nginx/1.24.0,也没有 X-Powered-By: Hyperf,攻击者无法快速识别技术栈。
验证与上线检查项
配置完成后执行三步确认:
- 运行
sudo nginx -t检查语法是否正确 - 执行
sudo systemctl reload nginx重载配置(不中断连接) - 用浏览器访问
https://pay.example.com,观察是否正常加载,同时打开开发者工具 → Network → Response Headers,确认无 Server/X-Powered-By 字段
如果 Hyperf 启用了静态资源服务(如 public 目录),建议仍由 Nginx 直接托管,避免绕过代理造成 404 —— 只需在 location / 前加一段静态资源匹配规则即可。











