Nginx需显式配置禁止访问.git等敏感目录,最简方式为location ~ /\. { deny all; },应置于server块顶层且在PHP处理规则之前,防止源码泄露。

location ~ /\. 匹配所有以点开头的隐藏文件和目录
这是最简也最通用的写法,覆盖 `.git`、`.svn`、`.hg`、`.env`、`.htaccess` 等所有常见隐藏资源:
location ~ /\. {
deny all;
}
- 正则
~ \.中的\.匹配字面量点号,/\.表示路径开头紧跟一个点(如/.git/、/.env) - 它不匹配
/public/.gitignore这类在子目录里的点文件——因为路径不是以/.git开头,而是以/public/开头 - 放在
server块顶层即可生效,无需嵌套在其他location内 - 注意:该规则对
/.git/有效,但对/.gitmodules或/composer.json无效——它们不以/.开头,需额外处理
location ~ ^/(.git|.svn|.hg) 匹配根级版本控制目录
如果你只关心 `.git` 等典型版本库目录,且希望明确控制范围(避免误拦其他点文件),用这个更精准:
CNB 云原生构建平台的 Git 操作技能,支持代码克隆、提交、推送、分支管理、Merge Request 管理、流水线触发与结果读取。初次使用需收集用户的 Git 用户名和邮箱。
location ~ ^/(.git|.svn|.hg|\.project|composer.json|package.json)$ {
deny all;
}
-
^/确保只匹配 URL 根路径下的这些项,比如/.git/或/composer.json,不匹配/src/.git/ - 末尾的
$很关键:它防止匹配到/git-branch这类误伤;没有它,.git会变成子串匹配 -
composer.json和package.json虽非隐藏文件,但常含敏感依赖或脚本,一并拒绝是合理加固 - 该规则必须放在所有 PHP 处理块(如
location ~ \.php$)之前,否则可能被后续更宽泛的 location 优先匹配而跳过
phpEnv 中修改 nginx.conf 的实际位置和 reload 方式
phpEnv 的 Nginx 配置通常位于 C:\phpEnv\nginx\conf\nginx.conf(Windows)或 /usr/local/phpenv/nginx/conf/nginx.conf(Linux/macOS),但更推荐改站点专属配置:
- 找到对应站点的
server块,一般在conf/vhost/下某个.conf文件里 - 把上面任一
location规则粘贴进server { ... }内,**不要**放进location / { ... }里面 - 保存后执行
nginx -s reload(phpEnv 自带终端里运行);若报错,用nginx -t检查语法 - 验证方式:浏览器访问
http://localhost/.git/config,应返回 403;用curl -I http://localhost/.git/config看响应头是否含HTTP/1.1 403 Forbidden
rsync --exclude='.git' 或构建时清理),而不是依赖运行时拦截。


















