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/ 下面。
总结
两步搞定:
htpasswd生成密码文件- Nginx 加
auth_basic配置
记住: 密码文件别放网站目录里,放在外面安全。
遇到问题加QQ23979811 协助处理
标签: Nginx 安全 访问密码 auth_basic 后台