nginx访问控制

一、基于IP的访问控制

1、http_access_module

a、配置语法

Syntax:    allow address | CIDR | unix: | all;
Default:    —
Context:    http, server, location, limit_except

Syntax:    deny address | CIDR | unix: | all;
Default:    —
Context:    http, server, location, limit_except

CIDR :按照网点的方式进行配置(如:192.168.0.0/24)。

unix: :linux/unix上用到Socket时的访问。

all :允许所有的ip访问。

b、示例:

mv /etc/nginx/conf.d/deault.conf /etc/nginx/conf.d/access_mod.conf
vim access_mod.conf

nginx访问控制

~ :模式匹配,这里是在访问路径里做模式匹配,访问的是根目录下以admin.html开头的路由。

这里阻止的是我本机电脑的ip地址方位该站点。允许其它所有的ip访问。

页面访问效果:

nginx访问控制

c、示例二:

nginx访问控制

192.168.0.0/24 :允许一个IP段来访问该站点。

此时就可以正常访问该站点了,非本IP段的访问不了。

nginx访问控制

2、http_access_module的局限性。

当客户端与服务端直接有代理服务器时,http_access_module限制的就是代理服务器的ip,而非真正客户端的ip。

nginx访问控制

解决方案:

方案一、使用 http_x_forwarded_for来解决。

HTTP报头中 X-Forwarded-For 和 Rmote-Addr 之间的区别如下图:

nginx访问控制

X-Forwarded-For 是由一连串的IP构成的,它包含整个请求过程中包含客户端的IP和所有中间经过的代理服务器的IP,以逗号分隔。格式如下:

http_x_forwarded_for=Client Ip , Proxy(1)IP , Proxy(2) IP , ….

当然 x_forwarded_for 也存在一个问题,因为它只是一个头信息, 是可以被修改的,如果被别人修改了,那么访问控制也就不生效了。

方案二、结合geo模块

方案三、通过HTTP自定义变量传递。

将客户端 Remote-Addr的信息写入自定义变量,然后一级一级的携带到后端服务器,这样既能避免信息被改写,也能准确读到客户端的IP地址。

二、基于用户的信任登录

1、http_auth_basic_module

作用:用来做用户登录认证。

语法:

Syntax:    auth_basic string | off;
Default:   auth_basic off;
Context:   http, server, location, limit_except

Syntax:    auth_basic_user_file file;
Default:    —
Context:    http, server, location, limit_except

这里的 file 是一个用户名和密码的对应文件,格式如下:

name1:password1
name2:password2:comment
name3:password3

密码采用 htpasswd 进行加密,详情请参考 http_auth_basic_module的官网文档(http://nginx.org/en/docs/http/ngx_http_auth_basic_module.html)。

查看是否有安装 htpasswd

rpm -qf /usr/bin/htpasswd

nginx访问控制

所有我们只需要用yum 安装一下 httpd-tools 就可以啦。

配置密码文件

//创建密码文件,并加入一个用户
htpasswd -c /etc/nginx/auth_conf chrdai

nginx访问控制

查看文件内容

发现我们需要的用户名:密码格式的文件已经生成好了。

nginx访问控制

配置用户认证的配置文件。

mv /etc/nginx/conf.d/access_mod.conf /etc/nginx/conf.d/auth_mod.conf
vim /etc/nginx/conf.d/auth_mod.conf

nginx访问控制

再次访问该站点就需要输入用户名和密码了。

nginx访问控制

2、http_auth_basic_module的局限性

  • 用户认证依赖文件方式。
  • 需要把单独的一套用户名密码存入一个文件,操作管理机械,效率低下。

解决方案:

  • Nginx结合LUA实现高效验证。
  • Nginx配合企业的LDAP,将Nginx和LDAP打通,利用nginx-auth-ldap模块来实现。rpm包默认安装不包含该模块。

本文为袋鼠学习中的总结,如有转载请注明出处:https://www.cnblogs.com/chrdai/protected/p/11333360.html

Original: https://www.cnblogs.com/chrdai/p/11333360.html
Author: Chrdai
Title: nginx访问控制

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/543647/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 动态规划:LeetCode.H0629.K个逆序对数组

    给出两个整数 n 和 k,找出所有包含从 1 到 n 的数字,且恰好拥有 k 个逆序对的不同的数组的个数。 逆序对的定义如下:对于数组的第i个和第 j个元素,如果满i < j…

    Java 2023年6月7日
    0124
  • Java基础

    java是什么? java是java面向对象程序设计语言和java平台的总称 java的开发平台 javaSE:标准版 javaEE:企业版 javaME:嵌入式 JRE和JDK …

    Java 2023年6月5日
    086
  • 59.你要的全拿走

    dsfsd posted @2022-09-28 08:33 随遇而安== 阅读(5 ) 评论() 编辑 Original: https://www.cnblogs.com/55z…

    Java 2023年6月7日
    086
  • Vue学习之——–深入理解Vuex之getters、mapState、mapGetters(2022/9/3)

    这一篇博客的内容是在上一篇博客的基础上进行:深入理解Vuex、原理详解、实战应用 @ 1、getters的使用 1.1 概念 1.2 用法 1.3 如何读取数据 2、getters…

    Java 2023年6月14日
    090
  • 设计模式之一单例模式(java实现)

    学习一下各种设计模式,看以后的用不用得上╮(╯_╰)╭ 1. 饱汉式 懒汉式缺点:不管用不用这个对象,都会实例化,浪费资源; 2 饿汉式 恶汉式也带来了问题,就是线程不安全 3. …

    Java 2023年6月6日
    085
  • HelloWorld小程序

    第一步 在文件夹里 鼠标右键 新建文本文档 更改文件的后缀为java 注意事项:如果你的后缀没有出现,可以进行如下操作 第二步 编写代码 记得写完Ctrl+s保存一下 第三步 编译…

    Java 2023年6月16日
    083
  • 亿级消息中心架构方案概述【原创】

    目标 技术目标: 上行到消息队列api吞吐量10000条/秒,下发第三方平台1000条/秒(仅平台自身处理能力,第三方看第三方处理能力极限指标为准);保证消息中心100%高可用。 …

    Java 2023年6月8日
    080
  • Linux 压缩、解压缩命令

    Linux 压缩、解压缩命令 tar 语法命令 tar [options…] [files] options:选择描述-A 追加tar文件至归档-c 创建一个新文档-d…

    Java 2023年6月15日
    072
  • HttpClient的 java.net.SocketException: Too many open files

    今天在维护一个老项目的时候发现,错误: 大致意思是,资源未释放。 代码用的是httpClient,在finally中也关比了资源 后来找度娘了解下: 所以,我的:postMetho…

    Java 2023年5月29日
    0177
  • 数组

    学习笔记——Java基础 数组 解决 : 将数据进行 存储 —-》引入∶数组 数组的作用 : 数组用来存储数据的,在程序设计中,为了处理方便,数组用来将相同类型的若干数…

    Java 2023年6月5日
    056
  • 090_入门案例-Direct 路由模式

    RabbitMQ的模式之Direct模式 生产者 消费者 RabbitMQ的模式之Direct模式 :::info参考官网:https://www.rabbitmq.com/get…

    Java 2023年6月7日
    071
  • 阿尔兹海默症_记不住的java8 List操作

    一丢丢废话 使用java8对list操作不是很方便嘛但是呢,脑子不好,似乎老是记不住 取出List中的某一列作为一个新的list 假设有一个实例User,User中有成员变量nam…

    Java 2023年6月7日
    075
  • SpringBoot 解决跨站脚本漏洞(XSS)问题

    SpringBoot 解决跨站脚本漏洞(XSS)问题 解决方案 步骤如下: 1、添加maven依赖 在 pom.xml文件中,增加如下依赖: <dependency> …

    Java 2023年5月30日
    090
  • 2.7w字!Java基础面试题/知识点总结!(2021 最新版)

    这篇《Java 基础知识总结》是 JavaGuide 上阅读量最高的一篇文章,由于我对其进行了重构完善并且修复了很多小问题,所以,在博客园再同步一下! 文章内容比较多,目录如下: …

    Java 2023年6月9日
    069
  • SpringBoot启动代码和自动装配源码分析

    ​ 随着互联网的快速发展,各种组件层出不穷,需要框架集成的组件越来越多。每一种组件与Spring容器整合需要实现相关代码。SpringMVC框架配置由于太过于繁琐和依赖XML文件;…

    Java 2023年6月13日
    062
  • easyExcel复杂头的写入

    背景 最新项目有个新需求,把项目中的数据通过excel的固定模板导出,懒懒的我不怎么会poi就使用easyexcel简化操作步骤 步骤 根据easyExcel的官方文档 https…

    Java 2023年6月5日
    087
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球