必须放行系统防火墙443端口,否则外部请求在到达hyperf前即被拦截;需确认hyperf监听0.0.0.0:443、启用tls并配置有效证书路径,同时检查云平台安全组及端口占用。

要让单机部署的 Hyperf 服务通过 HTTPS(443 端口)对外提供服务,仅配置 Swoole 监听 443 并启用 TLS 是不够的——系统防火墙必须明确放行该端口,否则外部请求在到达 Hyperf 前就被拦截。
确认 Hyperf 已正确监听 443 并启用 HTTPS
确保 config/autoload/server.php 中已配置:
-
'port' => 443(整数,非字符串) -
'host' => '0.0.0.0'(不能是127.0.0.1,否则外部无法访问) -
'type' => SWOOLE_PROCESS且'ssl' => true -
'settings' => ['ssl_cert_file' => '/path/to/fullchain.pem', 'ssl_key_file' => '/path/to/privkey.pem']路径真实存在、权限可读(如www-data或运行用户能读取)
检查并放行防火墙中的 443 端口
根据操作系统选择对应操作:
-
CentOS 7+/RHEL 8+:运行
sudo firewall-cmd --list-ports查看是否含443/tcp;若无,执行sudo firewall-cmd --add-port=443/tcp --permanent && sudo firewall-cmd --reload -
Ubuntu/Debian(ufw 启用时):运行
sudo ufw status,若未放行,执行sudo ufw allow 443/tcp -
直接使用 iptables(较少见):确认规则中包含类似
iptables -I INPUT -p tcp --dport 443 -j ACCEPT,并保存(如iptables-save > /etc/iptables/rules.v4)
验证端口可达性
不要只依赖本地 curl https://127.0.0.1,需从外部机器测试:
- 从另一台局域网机器执行:
telnet your-server-ip 443或nc -zv your-server-ip 443 - 若连接超时或被拒绝,优先排查防火墙;若连接成功但返回空响应,再查 Hyperf 配置或证书路径
- 注意:部分云服务器(如阿里云、腾讯云)还需在安全组控制台手动放行 443 端口,这层独立于系统防火墙
补充提醒:避免常见陷阱
443 是特权端口,Linux 下普通用户无法绑定。确保:
- Hyperf 启动用户具备绑定特权端口权限(推荐用
root或通过setcap 'cap_net_bind_service=+ep' /usr/bin/php授权 PHP) - 未与其他服务(如 Nginx/Apache)冲突占用 443 —— 可用
sudo ss -tlnp | grep ':443'检查 - 证书链完整,
fullchain.pem必须包含域名证书 + 中间 CA,单独cert.pem会导致浏览器报ERR_SSL_VERSION_OR_CIPHER_MISMATCH










