Nginx: 配置项之access模块、auth_basic模块、auth_request模块

2024-08-24 02:28

本文主要是介绍Nginx: 配置项之access模块、auth_basic模块、auth_request模块,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

access模块

  • 用于限定特定IP或者是网段进行访问的,从而实现Nginx的一个访问权限控制
  • 这个模块,它仅能够针对IP或者网段的一个访问

1 )指令集

1.1 allow

  • 语法结构: allow address | CIDR | UNIX | all
    • all 是放行所有
    • address 可以是 ip 地址,比如: 1.1.1.1; 还可以是网段 192.168.1.0/24 (子网掩码是24位的)
    • CIDR 和 UNIX 用的不多
  • 默认值: 无
  • 上下文: http、server、location、limit_except
  • 示例
    • allow 192.168.0.10; 只允许一个ip

1.2 deny

  • 语法结构: deny address | CIDR | UNIX | all
    • 这和 allow 完全一样
  • 默认值: 无
  • 上下文: http、server、location、limit_except
    • 也和 allow 完全一样
  • 示例
    • deny 192.168.0.0/24;

2 )组合示例

location / {deny 192.168.1.1; # 注意这个在下面一个allow的范围之内,要先写上allow 192.168.1.0/24; # 这个范围比上面 deny 的ip范围要大allow 10.1.1.0/16;allow 2001:0db8::/32; # ipv6的写法deny all; # 除了上面的放行,其余一律拒绝
}
  • 被拒绝的服务会显示 403

auth_basic模块

  • 它是限制特定用户访问的模块,对特定的URL来说,它必须通过提供的一个用户名或者密码来进行访问
  • 这在一些应用场景中是有用的,我们可能内部有一些系统针对不同的部门提供特定访问的时候
  • 我们可能针对某一个员工的用户名来进行访问
  • 这样一个模块,其实在这样一个应用场景中是很有效的

1 )基本功能

  • 基于HTTP Basic Authentication 协议进行用户名密码认证
  • 默认已编译进Nginx,通过 --without-http_auth_basic_module 禁用

2 ) 指令

2.1 auth_basic

  • 语法:auth_basic string | off;
    • 这里的 string 是提示框的信息
  • 默认值:auth_basic off;
  • 上下文:http、server、location、limit_except

2.2 auth_basic_user_file

  • 语法:auth_basic_user_file file;
    • 验证用户名和密码的文件,放在哪里
    • 下面会有如何生成这个密码文件
  • 默认值:-
  • 上下文:http、server、location、limit_except

3 )生成密码文件工具

  • 可执行程序: htpasswd
  • 所属软件包:httpd-tools
  • 生成新的密码文件:htpasswd -bc encrypt_pass jack 123456
    • -c 是第一次添加时,后续不需要
    • encrypt_pass 是文件名
  • 添加新用户密码:htpasswd -b encrypt_pass mike 123456
    • 再次执行,后面的用户名和密码会覆盖前面的

4 )配置示例

  • 查看是否安装 which htpasswd, 没有的话,下载后本地安装
  • 先安装依赖:$ yum install apr apr-util
  • $ rpm -ivh httpd-tools-2.4.6-90.el7.centos.x86_64.rpm 这个是本地已有的包
  • 安装成功后,查看里面有哪些文件 $ rpm -ql httpd-tools
    /usr/bin/ab
    /usr/bin/htdbm
    /usr/bin/htdigest
    /usr/bin/htpasswd
    /usr/bin/httxt2dbm
    /usr/bin/logresolve
    /usr/share/doc/httpd-tools-2.4.6
    /usr/share/doc/httpd-tools-2.4.6/LICENSE
    /usr/share/doc/httpd-tools-2.4.6/NOTICE
    /usr/share/man/man1/ab.1.gz
    /usr/share/man/man1/htdbm.1.gz
    /usr/share/man/man1/htdigest.1.gz
    /usr/share/man/man1/htpasswd.1.gz
    /usr/share/man/man1/httxt2dbm.1.gz
    /usr/share/man/man1/logresolve.1.gz
    
    • 可以看到,其中包含:/usr/bin/htpasswd
  • 现在我们来生成文件
    • $ cd /opt/nginx/
    • $ mkdir auth
    • $ cd auth
    • $ htpasswd -b -c encrypt_pass wang 123456
      Adding password for user jack
      
    • $ cat encrypt_pass 查看文件,生成一串秘钥,前面是 wang:$这里跟着一串秘钥
    • $ htpasswd -b encrypt_pass lee 654321
      • 这是第二次生成,并且是一个新用户
      • 这时候会出现两个用户,不会覆盖

现在开始进行配置

{location /bbs/ {auth_basic "test user pass";auth_basic_user_file /opt/nginx/auth/encrypt_pass; # 注意,这里最好是绝对路径,防止出错root html;index index.html;}
}
  • 要保证有 /opt/nginx/html/bbs/index.html 文件
  • 按照上述的配置,访问 / 不会有任何提示
  • 访问 /bbs 路径后会有如下提示
  • 输入用户密码后,就可以访问该页面
  • 再次刷新,也不会需要要求输入密码,浏览器已经帮你记住了

auth_request

  • 它也是一个访问控制的模块,在实际的生产环境的应用还是比较多的
  • 比如,基于安全的考虑,通常会有一些鉴权的服务器
  • 当你需要访问特定的应用模块的时候,首先需要去跟这些鉴权服务器发起请求
  • 鉴权服务器再对你鉴权通过以后,才能正常的去访问我们的业务系统

1 )功能和原理

  • 当它基于一个特定URI发起请求的时候,它会生成一个子请求
  • 这个子请求会是鉴权模块实现的一个能力
  • 这个鉴权模块,如果说对这个请求做完处理之后,会返回一个正常的HTTP的响应码
  • 它会根据 HTTP 响应码去做一定的访问控制, 比如,非 2xx 都认为是鉴权失败的
  • 参考如下图:

2 )启用和禁用

  • 默认并没有编译进 Nginx, 通过 --with-http_auth_request_module 启用

3 )指令

3.1 auth_request

  • 语法:auth_request uri | off;
  • 默认值:auth_request off;
  • 上下文:http、server、location

3.2 auth_request_set

  • 语法:auth_request_set $variable value;
  • 默认值:-
  • 上下文:http、server、location

4 ) 配置示例

location /private/ {auth_request /auth; # 类似于重定向
}location /auth {proxy_pass http:/127.0.0.1:8080/verify; # 反向代理,这是一个鉴权服务,返回 2xx 则鉴权成功,才会再去访问 /privateproxy_pass_request_body off;proxy_set_header Content-Length "";proxy_set_header X-Original-URI $request_uri;
}
  • 要请求 /private 的时候,会先发起对 /auth 的请求

5 ) 环境准备

  • 这里在服务器上调试一下, 准备一台服务器,Nginx 默认没有编译该模块, nginx -V 可查看到是否有该模块
  • 找到 nginx 的二进制文件删除 $ rm -rf nginx
  • 找到 configure 文件重新配置, 如下
    ./configure --prefix=/opt/nginx --conf-path=/opt/nginx/conf/nginx.conf --user=nginx--group=nginx--pid-path=/opt/nginx/pid/nginx.pid--error-log-path=/opt/nginx/logs/error.log --with-pcre=/opt/source/pcre-8.43 --with-zlib=/opt/source/zlib-1.2.11 --with-http_ssl_module --with-http image_filter_module --with-http stub_status_module --http-log-path=/opt/nginx/logs/access.log --with-http_perl_module --with-http_auth_request_module
    
    • 最后一个是要加入的,前面的那么多,从 nginx -V 命令输出中可以拷贝
  • 检查完,没有问题,可以用 $ make 重新编译,
  • 之后,进行安装 $ make install

6 )配置测试

6.1 普通测试

server {listen 8080;charset utf-8;location /auth.html {return 200 "Success" # 这里模拟鉴权成功# return 403  "Failed, give the Page of Auth Server Success\n"; # 这里模拟错误的鉴权}
}
  • curl http://192.168.184.20:8080/auth.html 返回结果如下

    Success
    

    或者

    Failed, give the Page of Auth Server Success
    
  • curl curl http://192.168.184.20:8080/auth.html -I 返回

    HTTP/1.1 200 OK
    Server:nginx/1.12.2
    Date: Sat, 19 Oct 2019 14:51:24 GMT
    Content-Type: text/html; charset=utf-8
    Content-Length:44
    Connection: keep-alive
    

    或者

    HTTP/1.1 403 Forbidden
    Server:nginx/1.12.2
    Date: Sat, 19 Oct 2019 14:51:24 GMT
    Content-Type: text/html; charset=utf-8
    Content-Length:44
    Connection: keep-alive
    
  • 初步测试,正常

6.2 正式测试

server {listen 8080;charset utf-8;root html;location /OA/ {auth_request /auth;index index.html # 要保证有此文件, 只要鉴权成功,就会返回这个文件内容}location /auth {# 这里是模拟的鉴权接口,成功会返回 200, 失败返回 403# 如果鉴权失败,则会返回下面这个接口返回的错误信息proxy_pass  http://192.168.184.20:8080/auth.html; }
}
  • 注意,替换真实鉴权的接口
  • 整个过程实现了一个鉴权服务器

这篇关于Nginx: 配置项之access模块、auth_basic模块、auth_request模块的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1101184

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res

mysql8.0.43使用InnoDB Cluster配置主从复制

《mysql8.0.43使用InnoDBCluster配置主从复制》本文主要介绍了mysql8.0.43使用InnoDBCluster配置主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录1、配置Hosts解析(所有服务器都要执行)2、安装mysql shell(所有服务器都要执行)3、

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

Python sys模块的使用及说明

《Pythonsys模块的使用及说明》Pythonsys模块是核心工具,用于解释器交互与运行时控制,涵盖命令行参数处理、路径修改、强制退出、I/O重定向、系统信息获取等功能,适用于脚本开发与调试,需... 目录python sys 模块详解常用功能与代码示例获取命令行参数修改模块搜索路径强制退出程序标准输入

Python pickle模块的使用指南

《Pythonpickle模块的使用指南》Pythonpickle模块用于对象序列化与反序列化,支持dump/load方法及自定义类,需注意安全风险,建议在受控环境中使用,适用于模型持久化、缓存及跨... 目录python pickle 模块详解基本序列化与反序列化直接序列化为字节流自定义对象的序列化安全注

python pymodbus模块的具体使用

《pythonpymodbus模块的具体使用》pymodbus是一个Python实现的Modbus协议库,支持TCP和RTU通信模式,支持读写线圈、离散输入、保持寄存器等数据类型,具有一定的参考价值... 目录一、详解1、 基础概念2、核心功能3、安装与设置4、使用示例5、 高级特性6、注意事项二、代码示例

JDK8(Java Development kit)的安装与配置全过程

《JDK8(JavaDevelopmentkit)的安装与配置全过程》文章简要介绍了Java的核心特点(如跨平台、JVM机制)及JDK/JRE的区别,重点讲解了如何通过配置环境变量(PATH和JA... 目录Java特点JDKJREJDK的下载,安装配置环境变量总结Java特点说起 Java,大家肯定都