使用Nginx auth_basic实现轻量级用户名密码登录认证(小项目快速落地)

需求描述

  • 针对于某些线上生产小项目,可能因为某些原因,需要做做一下登录认证
  • 比如某个项目本来大家都可以访问的,现在临时要设置成只有某个账号登录以后,才能访问
  • 这个时候,若是再去写后端,去新建用户表、做JWT的token认证,有些杀鸡用牛刀了
  • 这个时候,我们可以使用Nginx自带的auth_basic进行对应用户名密码登录控制
  • 如下效果图

实际操作

1. 一个小项目

比如,笔者的这个4433端口上,跑着的是一个使用FFmpeg做的音频混合工具

现在需要做轻量级的登录控制,输入用户名和密码才能登录成功后访问

这里,笔者的服务器是乌班图,如下:

sh 复制代码
root@iv-ydy912e3nkay8n6x7ufo:~# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.5 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

2. 安装apache2-utils

执行命令

sh 复制代码
apt install apache2-utils -y

安装成功以后,可以查看对应版本

sh 复制代码
root@iv-ydy912e3nkay8n6x7ufo:~# dpkg -l apache2-utils
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version            Architecture Description
+++-==============-==================-============-=====================================================
ii  apache2-utils  2.4.52-1ubuntu4.18 amd64        Apache HTTP Server (utility programs for web servers)

3. 注意,现有项目的路径位置

笔者的生产服务器部署了多个项目,其中就有这个audio-mix项目,就是上述的音频混合项目

sh 复制代码
root@iv-ydy912e3nkay8n6x7ufo:/etc/nginx/conf.d# ls
audio-mix.conf  xxx.conf  yyy.conf  main.conf  zzz.conf

查看一下内容

nginx 复制代码
root@iv-ydy912e3nkay8n6x7ufo:/etc/nginx/conf.d# cat audio-mix.conf 
server {
    listen 4433 ssl;
    server_name ashuai.site;

    ssl_certificate     /etc/nginx/certs/ashuai.site.pem;
    ssl_certificate_key /etc/nginx/certs/ashuai.site.key;

    # 可选:SSL 安全配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    client_max_body_size 50M;

    location / {
        proxy_pass http://127.0.0.1:3333;
        proxy_http_version 1.1;
        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;
        proxy_connect_timeout 60s;
        proxy_send_timeout 300s;
        proxy_read_timeout 300s;
    }
}

4. 创建audio-mix项目对应的admin用户的密码文件

为了方便,我直接创建audio-mix项目对应的admin用户的密码文件,在同级目录下

执行命令sudo htpasswd -c /etc/nginx/conf.d/.htpasswd_audio_mix admin会让输入设置一下对应admin用户的密码,而后在重新输入一下,回车即可

sh 复制代码
root@iv-ydy912e3nkay8n6x7ufo:/etc/nginx/conf.d# sudo htpasswd -c /etc/nginx/conf.d/.htpasswd_audio_mix admin
New password: 
Re-type new password: 
Adding password for user admin

然后,执行ls -a查看所有文件,就能看到刚刚创建的那个文件了,然后查看这个文件的内容,我们发现,就是用户名冒号密码,只不过这里的密码被加密成字符串了

sh 复制代码
root@iv-ydy912e3nkay8n6x7ufo:/etc/nginx/conf.d# ls -a
.  ..  audio-mix.conf  .htpasswd_audio_mix  main.conf  xxx.conf  ...
root@iv-ydy912e3nkay8n6x7ufo:/etc/nginx/conf.d# cat .htpasswd_audio_mix
admin:$apr1$0LaARKj4$mDBVdf8oGU/gcp.YG9wXC.

好的,现在设置好了用户名和密码,而后再将其关联到对应nginx项目模块配置文件里面即可

当然,为了进一步安全,还可以使用chmod 和 chown进行文件目录的进一步控制,这里不赘述

5. 在对应的nginx模块中使用之

这里直接在location中使用即可

nginx 复制代码
server {
    listen 4433 ssl;
    server_name ashuai.site;

    ssl_certificate     /etc/nginx/certs/ashuai.site.pem;
    ssl_certificate_key /etc/nginx/certs/ashuai.site.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    client_max_body_size 50M;

    location / {
        # 核心:添加 admin 用户名密码认证
        auth_basic "音频混合工具 - 请输入认证密码";
        # 使用刚刚创建好的那个用户名和密码文件作为登录认证
        auth_basic_user_file /etc/nginx/conf.d/.htpasswd_audio_mix; 

        # 原有代理配置(完全保留)
        proxy_pass http://127.0.0.1:3333;
        proxy_http_version 1.1;
        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;
        proxy_connect_timeout 60s;
        proxy_send_timeout 300s;
        proxy_read_timeout 300s;
    }
}

如果还想进一步控制,比如防爆破限流,可以使用limit_req、limit_conn等,不赘述

别忘了 nginx -t 和 nginx -s reload 重新加载nginx配置,使其生效

6. 效果图

这样,经过上述一波操作,用户再访问我们的项目的时候,就需要输入正确的,就是原先设置好的用户名和密码后,才能访问了
好记性不如烂笔头,记录一下吧...

相关推荐
catoop1 小时前
Nginx 解决 upstream sent too big header 错误
运维·nginx
市安2 小时前
基于 Alpine 构建轻量 Nginx 错误页面 Docker 镜像
运维·nginx·docker·alpine
猫头虎19 小时前
web开发常见问题解决方案大全:502/503 Bad Gateway/Connection reset/504 timed out/400 Bad Request/401 Unauthorized
运维·前端·nginx·http·https·gateway·openresty
Trouvaille ~3 天前
【Linux】网络进阶:NAT技术与代理服务器详解
linux·运维·网络·nginx·ip·nat·代理服务器
之歆3 天前
Nginx + Tomcat 反向代理完全指南
nginx·tomcat·firefox
匀泪3 天前
云原生(nginx实验(4))
运维·nginx·云原生
FJW0208144 天前
《Nginx 进阶实战:配置详解、站点发布与常用功能大全》(2)
运维·nginx
问道飞鱼4 天前
【服务器知识】nginx配置负载均衡完全解读
服务器·nginx·负载均衡
一叶星殇4 天前
Windows 下用 Nginx 部署 Vue + .NET WebApi 全流程实战
vue.js·windows·nginx