访问控制

用户访问控制

ngx_http_auth_basic_module

有时我们会有这么一种需求,就是你的网站并不想提供一个公共的访问或者某些页面不希望公开,我们希望的是某些特定的客户端可以访问。那么我们可以在访问时要求进行身份认证,就如给你自己的家门加一把锁,以拒绝那些不速之客。我们在服务课程中学习过apache的访问控制,对于Nginx来说同样可以实现,并且整个过程和Apache 非常的相似。

  1. #1.建立口令文件
  2. htpasswd -c /etc/nginx/passwd.db user1
  3. New password:
  4. Re-type new password:
  5. Adding password for user user1
  6. #2.实现认证
  7. vim default.conf
  8. location / {
  9. root /usr/share/nginx/html;
  10. index index.html index.htm;
  11. auth_basic "hello"; # 这一行是你登录窗口写的提示文字
  12. auth_basic_user_file /etc/nginx/passwd.db; # 密码存放的目录
  13. }
  14. # htpasswd -c选项只有第一次没有密码文件的时候需要添加,第二再添加账户的时候,不需要跟-c
  15. systemctl reload nginx

访问测试

重新加载配置文件后如果用elinks,curl访问会报错401,需要授权,需要用浏览器访问.

主机访问控制

ngx_http_access_module

  1. location / {
  2. root /usr/share/nginx/html;
  3. index index.html index.htm;
  4. # auth_basic "hello";
  5. # auth_basic_user_file /etc/nginx/passwd.db;
  6. allow 39.108.140.0; #只允许此IP访问
  7. deny all; #拒绝所有
  8. }
  9. elinks --dump 49.233.69.195
  10. 403 Forbidden

状态访问

ngx_http_stub_status_module

使用第三方的软件监控nginx时,需要保证其本身能显示状态信息,然后利用这些数据显示一些监控数据和生成图表,使用该模块需要在编译nginx时启用该模块.

  1. # 在server中加入以下几行
  2. location ~ /status {
  3. stub_status on;
  4. access_log off; # 状态模块的访问不记录日志
  5. allow 39.108.140.0; # 只允许管理员访问
  6. deny all;
  7. }
  8. curl 49.233.69.195/status
  9. Active connections: 1
  10. server accepts handled requests
  11. 14 14 14
  12. Reading: 0 Writing: 1 Waiting: 0
  13. #第一个14: 为一共处理的多少个连接请求
  14. #第二个14: 为创建多少次握手
  15. #第三个14: 为总共创阿金了多少请求
  16. #Active connections 对后端发起的当前活动连接数
  17. #server accepts handled requests:
  18. # Nginx总共处理了14个连接
  19. # 成功创建了14次握手,也就是成功的连接数connection 失败连接=(总连接数-成功连接数) (相等表示中间没有失败的)
  20. # 总共处理了14个请求数requests (server和client建立一条连接之后开始请求数据,每有一个请求此数字会+1)
  21. # request: http请求,GET/POST/DELETE/UPLOAD(指的是请求资源),默认情况下下一个请求需要一个连接,但是如果开启了长连接,那么一个连接可以对应多个请求.
  22. # Reading: nginx读取到客户端的Header信息数,请求头
  23. # Waiting: nginx返回给客户端的Header信息数,响应头,如果这个值飙升,说明后面的节点挂掉了,例如数据库等.
  24. # Waiting: 开启keep-alive的情况下,这个值等于active - (reading + writing),意思就是Nginx说已经处理完正在等候下一次请求指令的驻留连接.处理完等待下次请求的数量
  25. # 一般监控都是通过此模块监控状态比如蓝鲸,zabbix;如果需要监控进程和端口需要

网站过滤

替换网站响应内容: ngx_http_sub_module

  1. server里面加入下面两行代码.
  2. location / {
  3. root /usr/share/nginx/html;
  4. index index.html index.htm;
  5. sub_filter nginx 'flying'; # 默认只替换第一个nginx为flying,如果有多的nginx是不会替换的.
  6. }
  7. location / {
  8. root /usr/share/nginx/html;
  9. index index.html index.htm;
  10. sub_filter nginx 'flying';
  11. sub_filter_once off; # 替换全部nginx为flying
  12. }

实用用法

如果我们用模板生成网站的时候,因为疏漏或者别的原因造成代码不如意,但是此时因为文件数量巨大,不方便全部重新生成,那么这个时候我们就可以用此模块来暂时实现纠错,另一方面,我们也可以利用这个实现服务器端文字过滤的效果.

Nginx流量控制(连接和请求)

连接频率限制限制模块

ngx_http_limit_conn_module

(nginx的连接频率限制模块可以根据定义的key来限制每个键值的连接数.)

  1. # Syntax: limit_req_zone key zone=name:size rate=rate;(设置速率每秒多少个请求)
  2. # Default: —
  3. # Context: http
  4. # Syntax: limit_req zone=name [burst=number] [nodelay];(burst可以设置前多少个请求不限制,也可以设置是否延迟访问)
  5. # Default: —
  6. # Context: http, server, location
  7. # Example:
  8. yum -y install httpd-tools
  9. vim /etc/nginx/nginx.conf
  10. http {
  11. limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;
  12. vim /etc/nginx/conf.d/default.conf
  13. location / {
  14. root /usr/share/nginx/html;
  15. index index.html index.htm;
  16. limit_req zone=req_zone;
  17. #limit_req zone=req_zone burst=5; #5个请求时不限制的,但有延迟
  18. #limit_req zone=req_zone burst=5 nodelay; #无延迟,只要拿到令牌就可以处理
  19. }
  20. ab -n 100 -c 10 http://39.108.140.0/
  21. Time taken for tests: 0.940 seconds # 请求花费的总时间
  22. Complete requests: 100
  23. Failed requests: 99 # 请求了100,失败了99
  24. (Connect: 0, Receive: 0, Length: 99, Exceptions: 0)
  25. Write errors: 0
  26. Non-2xx responses: 99 # 非200请求99个

防盗链

图片防盗链

防止网站资源被盗用 ngx_http_referer_module

  1. # 盗链是本网站的url显示其他网站图片,而直接用它的URL是转发,宣传的也是人家的URL.
  2. # 主机proxy准备一张图片放到根目录
  3. mv 1.png /usr/share/nginx/html/
  4. # 主机rearend修改index.html
  5. cat /usr/share/nginx/html/index.html
  6. <html>
  7. <head>
  8. <meta charset="utf-8">
  9. <title>hello everyone</title>
  10. </head>
  11. <body style="background-color:red;">
  12. <img src="http://39.108.140.0/1.png"/>
  13. </body>
  14. </html>

此时用windows10谷歌浏览器访问rearend主机,但是日志在proxy主机上,消耗资源也是proxy主机

tail -1 /var/log/nginx/access.log

114.242.249.222 - - [03/Nov/2019:17:00:31 +0800] "GET /1.png HTTP/1.1" 304 0 "http://49.233.69.195/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36" "-"

修改proxy主机配置文件

  1. vim /etc/nginx/conf.d/default.conf
  2. location ~ \.(img|png|gif)$ {
  3. root /usr/share/nginx/html/images;
  4. index index.html;
  5. valid_referers none blocked *.youmen.cn server_names ~youmen ~\.google
  6. \. ~baidu;
  7. if ($invalid_referer) {
  8. return 403;
  9. }
  10. }
  11. systemctl reload nginx

此时再用浏览器访问rearend主机就会显示一张破碎的图片标志,图片资源也加载不出来

如何区分哪些是不正常的用户?

http referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上referer,告诉服务器我是从那个页面链接过来的,服务器借此可以获得一些信息用于处理,例如防止未经允许的网站盗链图片、文件等,因此Http Referer头信息是可以通过程序伪装生成的,所以通过Referer信息防盗链并非100%可靠,但是他能限制大部分盗链情况。

07 . Nginx常用模块及案例的更多相关文章

  1. nginx常用模块(三)

    Nginx常用模块(三) ngx_http_proxy_module模块配置(http或https协议代理) proxy_pass URL; 应用上下文:location, if in locatio ...

  2. Nginx 常用模块

    Nginx 常用模块 1. ngx_http_autoindex_module # ngx_http_autoindex_module模块处理以斜杠字符(' / ')结尾的请求,并生成一个目录列表. ...

  3. (转)nginx 常用模块整理

    原文:http://blog.51cto.com/arm2012/1977090 1. 性能相关配置 worker_processes number | auto: worker进程的数量:通常应该为 ...

  4. 9.Nginx常用模块

    1.nginx开启目录浏览 提供下载功能 默认情况下,网站返回index指定的主页,若该网站不存在主页,则将请求交给autoindex模块 如果开启autoindex模块,则提供一个下载的页面, 如果 ...

  5. nginx常用模块(一)

    1.Nginx目录索引 1.1Nginx默认是不允许列出整个目录浏览下载.Syntax: autoindex on | off;Default: autoindex off;Context: http ...

  6. Nginx常用模块安装命令

    将目录切换至Nginx安装包目录下,使用./configure命令进行安装.一些第三方模块需要先下载过来,指定下解压后的目录即可. ./configure --prefix=/usr/local/ng ...

  7. nginx常用模块

    Nginx模块介绍 核心模块:core module 标准模块:stand modules HTTP modules: Standard HTTP modules Optional HTTP modu ...

  8. Nginx常用模块及作用

    Nginx模块详解 nginx模块分为两种,官方和第三方,我们通过命令 nginx -V 查看 nginx已经安装的模块! [root@localhost ~]# nginx -V nginx ver ...

  9. NGINX常用模块(二)

    5.Nginx日志配置 Nginx有非常灵活的日志记录模式.每个级别的配置可以有各自独立的访问日志.日志格式 通过log_format命令定义格式 1.log_format指令 # 配置语法:包括:e ...

随机推荐

  1. JAVA设计模式之工厂系列(factory)

    任何可以产生对象的方法或者类,都可以称之为工厂.单例就是所谓的静态工厂. 为什么jdk中有了new,还需要工厂呢? a.灵活的控制生产过程 b.给对象加修饰.或者给对象加访问权限,或者能够在对象生产过 ...

  2. Spring Cloud学习 之 Spring Cloud Hystrix(基础知识铺垫)

    Spring Boot版本:2.1.4.RELEASE Spring Cloud版本:Greenwich.SR1 文章目录 前述: 快速入门: 命令模式: RxJava: 前述: ​ 在微服务架构中, ...

  3. C# 数据操作系列 - 1. SQL基础操作

    0.前言 前篇介绍了一些数据库的基本概念和以及一些常见的数据库,让我们对数据库有了一个初步的认识.这一篇我们将继续为C#数据操作的基础填上一个空白-SQL语句. SQL(Structured Quer ...

  4. Qt读写xml文件

    写xml <root> <element> <sub id=-1></sub> </element> </root> //添加x ...

  5. BIO、NIO、AIO的形象比喻

    BIO (Blocking I/O):同步阻塞I/O模式. NIO (New I/O):同步非阻塞模式. AIO (Asynchronous I/O):异步非阻塞I/O模型. 先看阻塞和非阻塞的区别, ...

  6. python语法学习第十一天--模块

    容器----------->数据的封装 函数----------->语句的封装 类-------------->方法和属性的封装 模块----------->程序本身  导入: ...

  7. [zoj3623]背包模型

    给定n种物品,每种物品需要ti时间生产出来,生产出来以后,每单位时间可以创造wi个价值.如果需要创造至少W个价值,求最少时间. 思路:dp[j]表示用时间j所能创造的最大价值,则有转移方程:dp[j ...

  8. org.springframework.web.bind.annotation不存在 site:blog.csdn.net(IDEA中运行springboot时报错)

    原因:MAVEN版本与IDEA版本不兼容问题, maven虽然更新比较慢,但是最新的3.6.6在与IDEA2019版本及以下版本兼容时会出现以上问题 解决办法:重新配置一个3.6低级别版本的maven ...

  9. JVM系列(2)-GC

    1.什么是GC? 大白话说就是垃圾回收机制,内存空间是有限的,你创建的每个对象和变量都会占据内存,gc做的就是对象清除将内存释放出来,这就是GC要做的事. 2.需要GC的区域 说起垃圾回收的场所,了解 ...

  10. Excel 数据导入至Sqlserver 数据库中 ltrim() 、rtrim() 、replace() 函数 依次空格无效问题

    今天导一些数据从Excel中至Sqlserver 数据库中,在做数据合并去重的时候发现,有两条数据一模一样,竟然没有进行合并: 最后发现有一条后面有个“空格”,正是因为这个“空格”让我抓狂许久,因为它 ...