单台服务器用Nginx反向代理实现Hyperf项目HTTPS访问,核心是Nginx终止TLS并将解密后的HTTP请求转发至Hyperf的9501端口;Hyperf保持HTTP模式运行,依赖X-Forwarded-Proto识别协议,需正确配置SSL证书、proxy headers及安全限制。

单台服务器用 Nginx 配置 HTTPS 访问 Hyperf 项目,核心是让 Nginx 做反向代理,把 HTTPS 请求解密后转发给 Hyperf 的 HTTP 服务(通常是 9501 端口),而不是让 Hyperf 自己处理 SSL。Hyperf 本身不内置 HTTPS 支持,必须依赖 Nginx 或其他反向代理层完成 TLS 终止。
确认基础环境已就绪
确保以下几项已完成:
- Nginx 已安装且含
--with-http_ssl_module模块(运行nginx -V 2>&1 | grep ssl可验证) - Hyperf 服务正在监听本地端口(如
127.0.0.1:9501),可通过curl http://127.0.0.1:9501测试通路 - 域名已解析到该服务器 IP,并开放了 80 和 443 端口
- SSL 证书已获取(推荐 Let’s Encrypt,路径如
/etc/letsencrypt/live/yourdomain.com/fullchain.pem和privkey.pem)
配置 Nginx server 块支持 HTTPS
在站点配置文件(如 /etc/nginx/conf.d/pay.yourdomain.com.conf)中写入:
注意:一个 server 块同时处理 HTTP 自动跳转和 HTTPS 服务更稳妥
server {
listen 80;
server_name pay.yourdomain.com;
return 301 https://$host$request_uri;
}
<p>server {
listen 443 ssl http2;
server_name pay.yourdomain.com;</p><pre class="brush:php;toolbar:false;">ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# 关键:转发请求到 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_set_header X-Forwarded-Port $server_port;
}
# 防止敏感文件被直接访问
location ~ ^/(\.user\.ini|\.git|\.svn|\.project|LICENSE|README\.md) {
return 404;
}}
Hyperf 端需配合调整
Hyperf 不需要开启 HTTPS,但要注意两点:
- 启动命令保持默认 HTTP 模式,例如:
php bin/hyperf.php start(确保config/autoload/server.php中port是 9501,type是Server::TYPE_HTTP) - 若项目中生成绝对 URL(如微信回调地址、支付跳转链接),应通过
X-Forwarded-Proto判断协议,避免硬编码http://。Hyperf 内置的Request对象可识别该头,无需额外插件
验证与调试要点
配置完成后执行:
-
sudo nginx -t检查语法是否正确 -
sudo systemctl reload nginx重载配置 - 用浏览器访问
https://pay.yourdomain.com,观察是否正常响应且锁图标为绿色 - 查看 Nginx 错误日志:
tail -f /var/log/nginx/error.log,常见错误包括证书路径错、权限不足(Nginx 用户需有读取证书的权限)、proxy_pass 地址不通 - 检查 Hyperf 日志是否收到请求(
runtime/logs/),确认不是 502 错误


















