在部署 Web 应用时,我们常常希望对某些敏感页面或后台接口增加一层访问控制。Nginx 作为一款高性能的 Web 服务器和反向代理工具,支持通过 HTTP 基本身份验证(Basic Authentication)来限制访问。本教程将从零开始,教你如何在 Nginx 反向代理中配置身份验证,即使你是完全的新手也能轻松上手。
什么是 Nginx 反向代理?
简单来说,反向代理就是 Nginx 接收客户端请求后,将请求转发给后端服务器(如 Node.js、Python Flask、Tomcat 等),再把后端的响应返回给客户端。这样做的好处包括负载均衡、隐藏真实服务器、提升安全性等。
为什么需要身份验证?
当你希望只有授权用户才能访问某个内部系统(比如管理后台、API 文档、测试环境等),就可以使用 Nginx 的 HTTP 基本身份验证功能。用户在浏览器中访问受保护页面时,会弹出一个登录框,输入正确的用户名和密码后才能继续访问。
准备工作
- 一台已安装 Nginx 的 Linux 服务器(Ubuntu/CentOS 等)
- 拥有服务器的 root 或 sudo 权限
- 一个正在运行的后端服务(例如运行在 localhost:3000 的应用)
第一步:安装 httpd-tools(用于生成密码文件)
我们需要使用 htpasswd 工具来创建保存用户名和密码的文件。该工具通常包含在 apache2-utils(Debian/Ubuntu)或 httpd-tools(CentOS/RHEL)包中。
Ubuntu/Debian 系统:
sudo apt updatesudo apt install apache2-utils CentOS/RHEL 系统:
sudo yum install httpd-tools 第二步:创建密码文件
运行以下命令创建第一个用户(例如用户名为 admin):
sudo htpasswd -c /etc/nginx/.htpasswd admin 系统会提示你输入并确认密码。注意:-c 参数表示创建新文件,如果后续要添加更多用户,请去掉 -c,否则会覆盖原有文件。
例如,再添加一个用户 user1:
sudo htpasswd /etc/nginx/.htpasswd user1 第三步:配置 Nginx 反向代理 + 身份验证
编辑你的 Nginx 站点配置文件(通常位于 /etc/nginx/sites-available/ 或直接在 /etc/nginx/nginx.conf 中)。下面是一个完整的配置示例:
server { listen 80; server_name your-domain.com; location / { # 启用身份验证 auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/.htpasswd; # 反向代理到后端服务 proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }} 关键说明:
auth_basic:启用基本认证,引号内的文字是浏览器弹窗的提示信息。auth_basic_user_file:指定密码文件路径。proxy_pass:将请求转发到本地 3000 端口的后端服务。
第四步:测试并重载 Nginx
先检查配置是否正确:
sudo nginx -t 如果显示 “syntax is ok” 和 “test is successful”,说明配置无误。然后重载 Nginx 使配置生效:
sudo systemctl reload nginx 第五步:验证效果
打开浏览器,访问 http://your-domain.com,你应该会看到一个弹窗要求输入用户名和密码。输入你在第二步中创建的账号(如 admin 和对应密码),即可正常访问后端服务。
安全提示
HTTP 基本身份验证默认以 Base64 编码传输凭证,**不加密**!因此强烈建议配合 HTTPS 使用(即配置 SSL 证书),否则密码可能被中间人截获。你可以使用 Let's Encrypt 免费获取 SSL 证书。
总结
通过本教程,你已经学会了如何在 Nginx 反向代理中添加身份验证,有效提升了网站或内部系统的安全性。这项技术特别适用于保护开发环境、管理后台或私有 API。记住关键词:Nginx反向代理、身份验证配置、HTTP基本认证 和 Nginx安全设置,它们是你进一步学习和优化的重要方向。
现在,快去为你的项目加上这道“门锁”吧!🔒
