«

Nginx配置访问密码,限制后台访问

时间:2026-10-7 07:50     作者:emer     分类: 无


前言

网站后台地址公开,谁都能访问,容易被别人扫到然后暴力破解。给后台加一层 Nginx 访问密码,多一道防护。

什么是访问密码

就是访问某个目录前,浏览器先弹一个登录框,输入用户名密码才能进去。和网站本身的登录是两回事。

第一步:生成密码文件

用 htpasswd 命令生成密码文件:

htpasswd -c /etc/nginx/.htpasswd admin

第一次加 -c 创建文件,输入两次密码。

不加 -c 是追加新用户:

htpasswd /etc/nginx/.htpasswd user2

如果没有 htpasswd 命令,先装:

yum install -y httpd-tools

第二步:Nginx 配置

给后台目录加密码:

location /admin/ {
    auth_basic "Admin Login";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

完整配置示例

server {
    listen       80;
    server_name  www.example.com;

    root  /var/www/html;
    index index.php index.html;

    # 后台加密码
    location /admin/ {
        auth_basic "Admin Login";
        auth_basic_user_file /etc/nginx/.htpasswd;

        # 后台本身的 PHP 配置
        location ~ \.php$ {
            fastcgi_pass   unix:/run/php-fpm/www.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }

    # 前台正常访问
    location / {
        try_files $uri $uri/ =404;
    }
}

重载生效

nginx -t
nginx -s reload

常见坑

坑1:.htpasswd 文件权限不对

Nginx 读不到密码文件。

解决: 确保文件权限是 644,属主是 www:

chown www:www /etc/nginx/.htpasswd
chmod 644 /etc/nginx/.htpasswd

坑2:PHP 文件不弹密码

访问 /admin/index.php 直接就进了,没弹密码框。

原因: PHP 的 location 把请求拦截了,没走 auth_basic。

解决: 把 auth_basic 配置放到 PHP 的 location 里,或者放到 server 级别。

坑3:忘记密码

自己把密码忘了。

解决: 重新生成:

htpasswd -b /etc/nginx/.htpasswd admin 新密码

坑4:密码文件放网站目录里

把 .htpasswd 放在了网站根目录下,别人能直接下载。

解决: 密码文件放在网站目录外面,比如 /etc/nginx/ 下面。

总结

两步搞定:

  1. htpasswd 生成密码文件
  2. Nginx 加 auth_basic 配置

记住: 密码文件别放网站目录里,放在外面安全。

遇到问题加QQ23979811 协助处理

标签: Nginx 安全 访问密码 auth_basic 后台