phpEnv的Nginx配置文件位于C:\phpEnv\nginx\vhost\(Windows)或/Applications/phpEnv/nginx/vhost/(macOS),每个站点对应一个xxx.conf文件,修改后需在phpEnv界面重启Nginx才能生效。

phpEnv 默认用的是 Nginx,但它的配置文件不直接暴露给用户编辑,所以不能像标准 Nginx 那样直接改 vhost 或 nginx.conf;必须通过 phpEnv 自带的站点管理界面或手动修改其生成的 Nginx 配置模板才能生效。
phpEnv 的 Nginx 配置文件在哪
phpEnv 安装后,Nginx 的实际配置由它自动生成并托管。关键路径通常为:
-
C:\phpEnv\nginx\vhost\(Windows)或/Applications/phpEnv/nginx/vhost/(macOS) - 每个站点对应一个
xxx.conf文件,比如test.dev.conf - 这些文件不是“只读”,但每次在 phpEnv GUI 中点“保存设置”都可能被覆盖——所以改完要立刻测试,且建议备份
怎么加 80 端口 return 301 跳转
在对应站点的 .conf 文件里,找监听 80 端口的 server 块(不是 443 那个),确保它只做跳转,不处理业务逻辑:
server {
listen 80;
server_name test.dev www.test.dev;
return 301 https://$server_name$request_uri;
}
- 别用
rewrite,它会触发内部重写,不如return直接、高效、无副作用 -
$server_name比$host更安全——$host可被恶意Host头污染,$server_name是配置里写死的白名单值 - 如果站点绑定了多个域名(如
test.dev和www.test.dev),server_name必须全列出来,否则未列出的域名访问 80 端口会 404 或 fallback 到默认 server
为什么 POST 接口跳转后变 GET?该用 307 而不是 301
当你把 APP 的 HTTP 接口地址也设成跳转后,发现 POST 请求体丢失、方法变成 GET,这不是 phpEnv 或 Nginx bug,是 HTTP 协议规范行为:301 是“永久重定向”,浏览器对非 GET/HEAD 请求会自动降级为 GET 再发一次。
立即学习“PHP免费学习笔记(深入)”;
- 解决办法:把
return 301改成return 307 - 仅对 API 类服务(如
/api/路径)需要时才用 307;普通网页仍用 301,因 SEO 友好且用户无感 - 若需区分路径,可加 location 块:
location ^~ /api/ {
return 307 https://$server_name$request_uri;
}
HSTS 要不要加?phpEnv 开发环境慎开
在 443 的 server 块里加 add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; 确实能防协议降级,但:
- phpEnv 是本地开发环境,Chrome/Firefox 一旦收到 HSTS 头,后续哪怕你删掉证书、关掉 HTTPS,浏览器也会强制拒绝 HTTP 访问,只能清 HSTS 缓存(chrome://net-internals/#hsts)
- 本地域名如
test.dev不在 HSTS preload list 里,preload参数无效,反而增加调试成本 - 真要测 HSTS 行为,建议只临时设
max-age=300,验证完立刻删
最常被忽略的一点:phpEnv 启动后不会自动 reload Nginx 配置——改完 .conf 文件,必须在 phpEnv 界面点「重启 Nginx」或手动执行 nginx -s reload,否则修改完全不生效。



















