Nginx配置网页认证访问

时间:2022-2-11    作者:冰城心无泪    分类: Linux应用


需求:访问网站或者网站的某个页面时,需输入认证信息即用户名和密码才能访问。

环境:centos7&8

工具:Nginx httpd-tools

此需求需要用到Nginx的ngx_http_auth_basic_module模块,此模块在安装Nginx时默认已安装,无需额外添加。

点此查看Nginx官网说明文档

安装Nginx,已安装略过,点此查看Nginx安装教程

安装httpd-tools,已安装略过,用于创建密码文件。

yum -y install httpd-tools

创建密码文件

使用命令:htpasswd

htpasswd参数说明

-b 命令行中一并输入用户名和密码而不是根据提示输入密码,可以看见明文,不需要交互
-c 创建passwdfile.如果passwdfile 已经存在,那么它会重新写入并删去原有内容.
-d 使用CRYPT加密(默认)
-D 删除指定的用户
-m 使用MD5加密(默认)
-n 不更新passwordfile,直接显示密码
-p 使用普通文本格式的密码
-s 使用SHA加密

命令格式组成:

htpasswd 参数选项 密码文件位置 用户名 密码(存在参数-b时才需要同时输入密码)

需要注意的是

1、参数-c是创建密码文件,若原先有同名密码文件将会被覆盖掉
2、若原先有同名密码文件,去掉-c选项,即可在文件内添加新用户
3、参数-b是同时输入用户名和密码,如果不加参数-b,创建用户时,只需输入用户名回车即可,会提示你输入密码
4、创建密码文件时用绝对路径,若未指定绝对路径,则在当前目录下创建
5、修改密码,重新添加需要修改密码的用户即可,密码信息会覆盖

在目录/home/创建密码文件user_passwd并添加用户test,同时设置用户密码为:test123456

htpasswd -cb /home/user_passwd test test123456

添加新用户demo,同时设置密码为demo123456

htpasswd -b /home/user_passwd demo demo123456

修改test用户密码为:123456

htpasswd -b /home/user_passwd test 123456

删除用户demo

htpasswd -D /home/user_passwd demo

Nginx配置

在Nginx配置文件中加入以下两行

注:整个网站验证,则加在server段,网站的某个网页验证,则加在location段

auth_basic   "登录认证";
auth_basic_user_file /home/user_passwd;

全站验证,配置如:

worker_processes  1;
events {
worker_connections  1024;
}
http {
include       mime.types;
default_type  application/octet-stream;
sendfile        on;
keepalive_timeout  65;
server {
    listen       80;
    server_name  localhost;
    auth_basic   "登录认证";  
    auth_basic_user_file /home/user_passwd;

    location / {
        root   html;
        index  index.html index.htm;
    }

    location /gp {
        proxy_redirect off;
        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_pass http://127.0.0.1:8888/gp;
        proxy_http_version 1.1;
    }

    error_page   500 502 503 504  /50x.html;

    location = /50x.html {
        root   html;
    }    
  }
}

单页面验证配置如下

worker_processes  1;
events {
worker_connections  1024;
}
http {
include       mime.types;
default_type  application/octet-stream;
sendfile        on;
keepalive_timeout  65;
server {
    listen       80;
    server_name  localhost;

    location / {
        root   html;
        index  index.html index.htm;
    }

    location /gp {
        auth_basic   "登录认证";  
        auth_basic_user_file /home/user_passwd;
        proxy_redirect off;
        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_pass http://127.0.0.1:8888/gp;
        proxy_http_version 1.1;
    }

    error_page   500 502 503 504  /50x.html;

    location = /50x.html {
        root   html;
    }
  }
}

重启Nginx服务后,访问web界面,查看是否弹出输入验证信息界面,能够弹出说明配置正确,报错的话,需要确认密码文件的路径是否正确。