Nginx 配置不当导致源码泄露:3个常见错误与修复方案


Nginx 作为最流行的 Web 服务器之一,配置看似简单,但几个小疏忽就可能导致严重安全问题。上周在帮朋友排查网站时,发现他的 Nginx 配置存在源码泄露风险,攻击者可以直接下载 .git、.env 等敏感文件。今天把常见的 3 个高危配置错误和修复方案整理出来,建议所有站长自查。

错误一:未禁止访问隐藏文件

问题:默认配置下,Nginx 不会阻止访问以 . 开头的隐藏文件,如 .git.env.htaccess

风险:攻击者访问 http://yourdomain.com/.git/ 即可下载整个 Git 仓库,包含源码、配置、甚至数据库密码。

修复方案:
在 Nginx 配置中添加:

location ~ /\. {
    deny all;
    access_log off;
    log_not_found off;
}

错误二:PHP 解析配置不当导致非 PHP 文件被执行

问题:部分配置会把所有文件都交给 PHP 处理,包括上传的图片。

风险:攻击者上传一个伪装成图片的 PHP 文件(如 shell.jpg.php),Nginx 会将其作为 PHP 执行,直接获取服务器权限。

修复方案:
使用安全的 PHP 解析配置:

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

关键点:try_files $uri =404; 确保文件真实存在才解析。

错误三:目录遍历未关闭

问题:Nginx 默认开启 autoindex,或配置中遗漏关闭。

风险:攻击者可以浏览服务器目录结构,获取敏感文件路径。

修复方案:
在 server 块中显式关闭:

server {
    autoindex off;
    # 其他配置...
}

完整安全配置模板

server {
    listen 80;
    server_name example.com;
    root /var/www/html;
    index index.php index.html;

    # 禁止访问隐藏文件
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }

    # 禁止访问敏感文件
    location ~* \.(git|env|sql|log|ini)$ {
        deny all;
    }

    # 安全解析 PHP
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # 关闭目录遍历
    autoindex off;
}

自查清单

  • 访问 http://yourdomain.com/.git/ 是否返回 403?
  • 访问 http://yourdomain.com/.env 是否返回 403?
  • 上传一个 PHP 文件到图片目录,尝试访问是否被执行?
  • 访问 http://yourdomain.com/uploads/ 是否显示目录列表?

总结

Nginx 的安全配置不是"能用就行",很多漏洞都源于"默认配置"的疏忽。建议所有站长对照上面的清单自查一遍,花10分钟修复,可能避免一次严重的数据泄露。


2026年7月国内轻量云服务器横评:阿里云、腾讯云、华为云哪家更值得入手?

Namecheap 2026夏季促销:.com域名首年$0.98,附注册+转入全流程

评 论
更换验证码