Nginx基本入门篇

本文目录

一、Nginx的简介

1.什么是 nginx 和可以做什么事情

2.Nginx的web优势

3. 正向代理

4. 反向代理

5. 负载均衡

6.动静分离

二、Nginx的安装(Linux:centos为例)

1.安装nginx

2.启动nginx

三、Nginx 配置文件

四、Nginx 编译参数

五、Nginx基础配置

 1.观察主配置文件

 2.观察默认虚拟主机配置文件(子配)

 3.启动一个新的虚拟主机

六、Nginx Log

1.日志配置

2.日志轮转&切割 

3. 日志分析

七、Nginx Web模块

1.连接状态 stub_status_module  

2.随机主页模块 random_index_module

3.替换模块 sub_module

4.文件读取

5.文件压缩

6.页面缓存

7.防盗链

八、Nginx访问限制 

1.模块一

2.模块二

 九、访问控制

1.基于主机(ip)

2.基于用户(username$password) 

十、HTTP 协议详解 

1.HTTP

2.URI

3.URN

十一、Nginx-proxy 代理服务器

1.代理原理

2.proxy 模块

3.启动代理 

4.proxy 缓存

5.验证


一、Nginx的简介

1.什么是 nginx 和可以做什么事情

  • Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。

  • 其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

2.Nginx的web优势

Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php 等。但是不支持 java。Java 程序只能通过与 tomcat 配合完成。Nginx 专为性能优化而开发, 性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高 达 50,000 个并发连接数。

①IO多路复用 (I是输入,O指输出 )

    技术类型:poll、epoll

    epll可以说是IO多路复用最新的一个实现,特点是:异步,非阻塞

②时分多路复用

③频分多路复用

3. 正向代理

Nginx 不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。 正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。

  • 简单一点:通过代理服务器访问服务器的过程就叫正向代理。
  • 需要在客户端配置代理服务器进行指定网站访问

4. 反向代理

  • 反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问。
  • 我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址

5. 负载均衡

  • 增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡

  • 客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。

       这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成本也低。但是随着信息数量的不断增长,访问量和数据量的飞速增长,以及系统业务的复杂度增加,这种架构会造成服务器相应客户端的请求日益缓慢,并发量特别大的时候,还容易造成服务器直接崩溃。很明显这是由于服务器性能的瓶颈造成的问题,那么如何解决这种情况呢?

       我们首先想到的可能是升级服务器的配置,比如提高 CPU 执行频率,加大内存等提高机器的物理性能来解决此问题,但是我们知道摩尔定律的日益失效,硬件的性能提升已经不能 满足日益提升的需求了。最明显的一个例子,天猫双十一当天,某个热销商品的瞬时访问量 是极其庞大的,那么类似上面的系统架构,将机器都增加到现有的顶级物理配置,都是不能够满足需求的。那么怎么办呢?上面的分析我们去掉了增加服务器物理配置来解决问题的办法,也就是说纵向解决问题的办法行不通了,那么横向增加服务器的数量呢?这时候集群的概念产生了,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡

6.动静分离

为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。

二、Nginx的安装(Linux:centos为例)

官网地址:http://nginx.org/

1.安装nginx

  • 添加 nginx 官方提供的 yum 源(需要联网且时间较长)
rpm -Uvh http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.14.2-1.el7_4.ngx.x86_64.rpm
  •  使用 yum 安装 nginx(前提要装好yum源)
yum install nginx

2.启动nginx

启动nginx,如下所示,访问成功

[root@nginx ~]# systemctl start nginx
[root@nginx ~]# curl -I 192.168.206.129:80
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Sun, 07 Apr 2024 02:42:38 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sun, 07 Apr 2024 02:23:22 GMT
Connection: keep-alive
ETag: "6612039a-264"
Accept-Ranges: bytes

[root@ansible ~]# 

三、Nginx 配置文件

所有文件命令:

 rpm -ql nginx
  • /etc/logrotate.d/nginx                               #日志轮转
  • /etc/nginx/nginx.conf                               #主配置文件
  • /etc/nginx/conf.d                                      #子配置文件夹
  • /etc/nginx/conf.d/default.conf                  #默认的网站配置文件
  • /etc/nginx/fastcgi_params                       #动态网站模块文件-python,php所需的相关变量
  • /etc/nginx/mime.types                             #文件关联程序 网站文件类型 和 相关处理程序
  • /etc/nginx/modules                                 #模块文件夹。第三方模块
  • /usr/lib/systemd/system/nginx.service    #服务脚本
  • /usr/sbin/nginx                                        #主程序
  • /var/cache/nginx                                    #缓存各种
  • /var/log/nginx                                         #日志文件夹 access.log 是访问日志 、 error.log是错误日志

四、Nginx 编译参数

Nginx 编译参数:

nginx -V

 基本配置:

configure afguments: 配置参数

--prefix=/etc/nginx                                      安装路径

--sbin-path=/usr/sbin/nginx                        程序文件

--modules-path=/usr/lib64/nginx/modules 模块路径

--conf-path=/etc/nginx/nginx.conf              主配置文件

--error-log-path=/var/log/nginx/error.log    错误日志

--http-log-path=/var/log/nginx/access.log  访问日志

--pid-path=/var/run/nginx.pid                     程序ID

--lock-path=/var/run/nginx.lock                  锁路径,防止重复启动ngxin

--http-client-body-temp-path=/var/cache/nginx/client_temp        缓存

--http-proxy-temp-path=/var/cache/nginx/proxy_temp                代理缓存

--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp php      缓存

--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp python    缓存

--http-scgi-temp-path=/var/cache/nginx/scgi_temp

--with-compat                                             启动动态模块兼容性

--user=nginx                                              用户

--group=nginx                                            组

模块类:

configure afguments:                         配置参数

--with-file-aio                                     异步非阻塞

--with-threads                                    多线程模块

--with-http-addition_module              追加模块

--with-http-autch_request_module    认证模块

--with-http-dav_module                     增加上传PUT.DELETE.MKCOL

--with-http-flv_module                        NGINX添加MP4、FLV视频支持模块

--with-http-gunzip_module                 压缩模块

--with-http-gzip_static_module

--with-http-mp4_module                    多媒体模块

--with-http-random_index_module    随机主页模块

--with-http- realip_module                 Nginx获取真实IP模块

--with-http-slice_module                    Nginx中文文档

--with-http-ssl_module                      安全模块

--with-http-stud_status_module        访问状态

--with-http-sub_module                     Nginx替换网站响应内容

--with-http-v2_module

--with-mail                                          邮件客户端

--with-stream                                     反向代理,负载均衡

--with-stream_realip_module             反向代理,负载均衡

--with-stream_ssl_module                 反向代理,负载均衡

--with-stream_ssl_preread_module   反向代理,负载均衡

 五、Nginx基础配置

1.观察主配置文件

vim /etc/nginx/nginx.conf
1                                                  1~6 核心模块(进程数等)
2 user  nginx; 
3 worker_processes  auto;              
4 
5 error_log  /var/log/nginx/error.log notice;
6 pid        /var/run/nginx.pid;
7 
8                                                  9~11 事件驱动模块(工作模式)
9 events {
10     worker_connections  1024;
11 }
12 
13                                        14~32 http内核模块(文档程序类型,配置文件等)
14 http {
15     include       /etc/nginx/mime.types;
16     default_type  application/octet-stream;
17 
18     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
19                       '$status $body_bytes_sent "$http_referer" '
20                       '"$http_user_agent" "$http_x_forwarded_for"';
21 
22     access_log  /var/log/nginx/access.log  main;
23 
24     sendfile        on;
25     #tcp_nopush     on;
26 
27     keepalive_timeout  65;
28 
29     #gzip  on;
30
31     include /etc/nginx/conf.d/*.conf;
32 }

 2.观察默认虚拟主机配置文件(子配)

vim /etc/nginx/conf.d/default.conf

1 server {        
2     listen       80;                         #服务器端口号
3     server_name  localhost;                  #服务器域名
4   
5     #access_log  /var/log/nginx/host.access.log  main;   #访问日志的存放位置
6 
7     location / {                           #location指位置,指网站主页位置
8         root   /usr/share/nginx/html;     #root指表达网站的根目录在哪里,后面即跟着路径
9         index  index.html index.htm;      #index指主页名字
10     }
11 
12     #error_page  404              /404.html;
13 
14     # redirect server error pages to the static page /50x.html
15     #
16     error_page   500 502 503 504  /50x.html;
17     location = /50x.html {
18         root   /usr/share/nginx/html;
19     }
20 
21     # proxy the PHP scripts to Apache listening on 127.0.0.1:80
22     #
23     #location ~ \.php$ {
24     #    proxy_pass   http://127.0.0.1;
25     #}
26 
27     # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
28     #
29     #location ~ \.php$ {
30     #    root           html;
31     #    fastcgi_pass   127.0.0.1:9000;
32     #    fastcgi_index  index.php;
33     #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
34     #    include        fastcgi_params;
35     #}
36 
37     # deny access to .htaccess files, if Apache's document root
38     # concurs with nginx's one
39     #
40     #location ~ /\.ht {
41     #    deny  all;
42     #}
43 }

 3.启动一个新的虚拟主机

vim /etc/nginx/conf.d/xuleilinux.conf   #文件名后缀必须是 .conf
#输入以下内容
server {
       listen 80;
       server_name xuleilinux.com;
 location / {
       root /xuleilinux;
       index index.html;    
       }
      
}

 重启服务器

systemctl restart nginx

然后新建配置文件里所需要的文件夹及文件

mkdir /xuleilinux
echo "美男子" > /xuleilinux/index.html

最后字符浏览器测试

vim /etc/hosts      域名解析
   192.168.206.129   xuleilinux.com
yum -y install elinks    #安装一个字符浏览器
elinks http://xuleilinux.com  #字符浏览器访问xuleilinux.com,界面出现 "美男子",实验完成

或者真机测试

C:\Windows\System32\drivers\etc\hosts    真机域名解析
   192.168.206.129   xuleilinux.com
打开浏览器输入:xuleilinux.com ,界面出现"美男子",实验成功   

六、Nginx Log

1.日志配置

①相关指令

log_format      日志格式
error_log

②日志的格式和命令 -log_format

简介:Nginx有非常灵活的日志记录模式。每个级别的配置可以有各自独立的访问日志。日志格式通过log_format 命令定义。

③定义设置位置

vim /etc/nginx/nginx.conf
18     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
19                       '$status $body_bytes_sent "$http_referer" '
20                       '"$http_user_agent" "$http_x_forwarded_for"';

日志格式允许包含的变量

$remote_addr               远程地址:记录客户端IP地址
$remote_user               远程用户:记录客户端用户名称
[$time_local]              本地时间:服务器自身时间
$request                   请求:记录请求的URL和HTTP协议
$status                    状态:记录请求状态
$body_bytes_sent           发送给客户端的字节数,不包括响应头的大小
$http_referer              记录从哪个页面链接访问过来的(超链接)
$http_user_agent           记录客户端代理(浏览器)相关信息
$http_x_forwarded_for      代理IP

④案例 error_log

  个性化404

vim /etc/nginx/conf.d/xuleilinux.conf
server {
      listen 80;
      server_name xuleilinux.com;
location / {
     root /xuleilinux;
     index index.html;
}
     error.page 404 /404/html;  #新增9~11行即可实现个性化404。page意思是页面  插入图片命令:<img src="404.jpg" />
location = /404.html {      
root /xuleilinux;               #指404.html在root下xuleilinux里面
}          
}

⑤日志缓存

        简介:大量访问到来时,对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭,占用了系统的IO,但是与业务无关。

        可以使用open_log_file_cache 来设定

syntax:

open_log_file_cache max=1000 inactive=20s min_uses=3 valid=1m;

  • 释义: max 1000 指的是日志文件的FD,最大的缓存数量为1000 。 如果超了怎么办,看下面】

                 min_uses=3 20秒内小于3次访问的FD,就给你清掉,结合inactive=20s的时间。

                 valid=1m 检查周期为1分钟

  • 总结:缓存最多1000个,到了极限,每分钟开始清除掉20秒以内访问小于3次的文件FD

2.日志轮转&切割 

观察日志轮转文件

vim /etc/logrotate.d/nginx
  1 /var/log/nginx/*.log {
  2      daily                      天
  3      missingok                  丢失不提示
  4      rotate 52                  52份
  5      compress                   压缩
  6      delaycompress              延迟压缩
  7      notifempty                 空文件的话,不转储
  8      create 640 nginx adm       日志切割之后,新建一个文件、权限640、以nginx为主,adm为组
  9      sharedscripts              9~14行指的是重启
 10      postrotate
 11              if [ -f /var/run/nginx.pid ]; then
 12                      kill -USR1 `cat /var/run/nginx.pid`
 13              fi
 14      endscript
 15 }

3. 日志分析

①常用字段

$remote_addr $1

[$time_local] $4

$request $7

$status $9

$body_bytes_sent $10

②日志查找统计

案例1 :统计2023年2月9号的 PV 量

grep '09/Feb/2023' access.log | wc -l

             统计2023年2月9号8点与9点之间的 PV 量

grep '09/Feb/2023:08' access.log | wc -l
awk '$4>="[09/Feb/2023:08:00:00" && $4<="[09/Feb/2023:09:00:00" {print $0} ' access.log | wc -l

案例2:统计2023年2月9日,一天内访问最多的10个IP

grep '09/Feb/2023' access.log | awk '{ips[$1]++}END{for(i in ips){print i,ips[i]}}' | sort -k2 -rn |head -10

案例3:统计2023年2月9日,访问大于100次的IP

grep '09/Feb/2023' access.log | awk '{ips[$1]++}END{for (i in ips) {if(ips[i]>100){print i,ips[i]}}}' |sort -k2

案例4:统计2023年2月9日,访问最多的10个页面

grep '09/Feb/2023' access.log | awk '{ips[$7]++}END{for (i in ips){print i,ips[i]}}' | sort -k2 -rn | head -10

案例5:统计2023年2月9日,每个URL访问内容总大小

grep '09/Feb/2023' access.log | awk '{urls[$7]++;size[$7]+=$10} END{for(i in urls){print urls[i],size[i],i}}' 
# size[$7]=$10指前面的第七列等于第十列,size[$7]+=$10指多了个加号,每次第十列的值都会叠加

案例6:统计2023年2月9日,每个IP访问状态码数量

grep '09/Feb/2023' access.log | awk '{status[$1" "$9]++}END{for (i in status){print i,status[i]}}'

案例7:统计2023年2月9日,每个IP访问状态码为404及出现次数

grep '09/Feb/2023' access.log | awk '{if($9="404"){status[$1" "$9]++}} END{for (i in status){print i,status[i]}}'

案例8:统计前一分钟的PV量

xuleidate=`date -d '-1 minute' +%Y:%H:%m` ; awk -v xudate=$xuleidate '$0 ~ xudate{i++} END{print i}' access.log
#把变量xuleidate调用到awk里进行查找文件,~表示像不像

 七、 Nginx Web模块

1.连接状态 stub_status_module  

1.1目的:

展示用户和nginx链接数量信息

1.2查询模块是否安装:

nginx -V 2>&1 | grep stub_status

1.3启动状态模块

  1.3.1访问默认站点的状态模块(错误验证)

http://192.168.206.129/nginx_status

  1.3.2配置状态模块

vim /etc/nginx/conf.d/default.conf   再server{ }里面添加以下内容
location /nginx_status{
 stub_status;           #打开该模块
 allow all;             #开通所有权限
 }

   然后再次访问该页面

http://192.168.145.135/nginx_status    出现以下界面

Active connections: 2              #活跃的连接,指有多少人在连你
server accepts handled requests    #服务器接收已处理的请求
 4 4 20                            # 总连接数 / 成功的连接数 / 总共处理的请求数
Reading: 0 Writing: 1 Waiting: 1 

1.3.3关于链接的问题

   ①什么是链接?

  • TCP封装结构?
  • TCP三次握手?
  • TCP四次挥手/四次断开?

   ②什么是请求?

       一次HTTP查询

   ③keepalived (保持活跃)

       长连接设置

vim /etc/nginx/nginx.conf   打开主配置文件,找下长连接设置一行

keepalive_timeout  65;      # 可通过修改65来调整长连接的时间。65 代表长连接时间

2.随机主页模块 random_index_module

2.1目的:

将主页设置成随机页面,是一种微调更新机制

2.2启动随机主页:

先创建主页目录

mkdir /app

创建多个主页

touch /app/{1.html,2.html,3.html,.4.html}    # .4.html 前面加了.表示这个文件为隐藏文件
在不同的页面书写不同的内容

启动随机主页

vim /etc/nginx/conf.d/default.conf         把14~16内容替换掉
14     location / {
 15         root   /usr/share/nginx/html;
 16         index  index.html index.htm;
 17    }
替换成以下
14     location / {
15          root /app;
16            random_index on;         
17    }

重启服务器

systemctl restart nginx

最后真机浏览器测试即可

192.168.206.129 页面会随机显示上面创建的三个文件夹里的内容

 3.替换模块 sub_module

3.1目的:

网页内容替换

3.2启动模块:

vim /etc/nginx/conf.d/default.conf    
先启动默认主页,如下面4行内容
location / {
          root   /usr/share/nginx/html;
          index  index.html index.htm;
}
然后在server开头重新添加如下2行内容
sub_filter nginx 'yunpeng';   #指将nginx替换为yunpeng
sub_filter_once off;   
#如果不加sub_filter_once off; 这条命令,默认指替换一次内容。off指关闭,也就是替换所有内容
  • 没有添加sub_filter_once off; 该命令的效果(只替换了一次)
  • 添加了sub_filter_once off; 该命令的效果(替换了所有内容)

重启服务器

systemctl restart nginx

最后真机浏览器重新访问

192.168.206.129   效果如上面两种图

4.文件读取

4.1模块统称:ngx_http_core_module

语法:

sendfile on;        发送文件
tcp_nopush on;      不推送
tcp_nodelay on;     无延迟

原理解释:

sendfile on;        使用或未使用sendfile的传统网络传输过程
tcp_nopush on;      使用或未使用tcp_nopush网络资源浪费       当包累计到一定大小后发送
tcp_nodelay on;     使用或未使用tcp_nodelay网络传输效率提升 tcp_nodelay on是禁用Nagle算法,即数据包立即发出去

位置:

vim /etc/nginx/nginx.conf

5.文件压缩

5.1原理:

启动该模块,使文件传输前进行压缩,提升传输效率

5.2模块: ngx_http_gzip_module

5.3启动模块

vim /etc/nginx/nginx.conf   打开主配置文件找到HTTP{},在里面输入以下内容
gzip on;
gzip_http_version 1.1;     #用1.1版本进行压缩
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;    #压缩对象
gzip_static on;            #静态压缩开启

6.页面缓存

6.1模块:

ngx_http_headers_module

6.2语法

expires [modified] time;

6.3启动缓存

  • 开启浏览器缓存,浏览页面:第一次返回状态码200,页面对象全文传输

                                                      第二次返回状态码304,页面对象部分传输

6.4开启服务器缓存模块

vim /etc/nginx/conf.d/default.conf   在location{} 主页模块里添加 expires 24h; 
 location / {
          expires 24h;                 #指24小时以内均为部分传输即本地缓存传输
          root   /usr/share/nginx/html;
          index  index.html index.htm;
}

7.防盗链

7.1模块:

ngx_http_referer_module

7.2语法

valid_referers none | brocked | server_names | string ...;

7.3启动防盗链

展现盗链现象

touch /etc/nginx/conf.d/a.com.conf /etc/nginx/conf.d/b.com.conf  新建两个网站,a.com和b.com
vim /etc/nginx/conf.d/a.com.conf            进入a.com网站配置服务器和网页主目录位置 
server {
      listen 80;
      server_name a.com;
 location / {
       root /a.com;
       index index.html;
   }      
}

vim /etc/nginx/conf.d/b.com.conf            进入b.com网站配置服务器和网页主目录位置 
server {
      listen 80;
      server_name b.com;
 location / {
       root /b.com;
       index index.html; 
 }     
}
vim /a.com/index.html  编辑a.com网站的主页内容
<img src='1.jpg'/>
vim /b.com/index.html  编辑b.com网站的主页内容,主页内容盗用a.com网站主页上的图片
<img src='http://a.com/1.jpg'/>     

注:真机域名解析后然后访问a.com会显示图片。再访问b.com时同样会显示出a.com主页上的图片,这就是盗用

7.4启动a.com网站防盗链功能

先把a.com和b.com的两个网站的access.log分开

vim /etc/nginx/conf.d/a.com.conf    将第3行内容添加到server里面
server {
access_log  /var/log/nginx/a.com.access.log  main;   

vim /etc/nginx/conf.d/b.com.conf    将第7行内容添加到server里面
server {
access_log  /var/log/nginx/b.com.access.log  main;   

将a.com网站上的资料锁住,其它人不能盗链

vim /etc/nginx/conf.d/a.com.conf   打开a.com网站,在location主页一栏里面添加3~7行
location / {
        valid_referers none blocked *.a.com;
        #可用 的 引用      没有   锁住          
        if ($invalid_referer){
            return 403;
         }  
    
        root /a.com;
       index index.html;
 }

如果希望某些网站能够使用(盗链)资源

vim /etc/nginx/conf.d/a.com.conf 在锁住的后面加上server_name,后面跟着能够使用盗链网站的名称即可合法使用盗链

valid_referers none blocked *.a.com server_name ~\.google\. ~\.baidu\. a.com 192.168.206.* ;

八、Nginx访问限制 

1.模块一

ngx_http_limit_req_module      limit限制       req 指requst请求

 目的:启动请求频率限制

测试未限制情况下的访问

yum -y install httpd-tools     安装网站工具
ab -n 100 -c 10 http://a.com/    #an是压测工具名,-n指发起数量100次 , -c指分10次发送 ,a.com后面要加根目录

启动限制。先在主配文件里定义该模块

vim /etc/nginx/nginx.conf     打开主配置文件,在http{}里面添加以下内容

limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;
#限制  请求 区域  二进制  远程    地址 区域      占用10M空间  允许每秒1次请求

然后在需要测试的网站配置文件里引用上方定义模块

vim /etc/nginx/conf.d/a.com.conf    在location {}里面添加以下内容

limit_req zone=req_zone;        #引用 限制请求的名称

重启服务器

systemctl restart nginx 

 测试已限制情况下的访问

ab -n 100 -c 10 http://a.com/

2.模块二

ngx_http_limit_conn_module    #conn 连接器

目的:通过IP地址,限制连接(TCP)

启动连接频率限制

vim /etc/nginx/nginx.conf     打开主配置文件,在http{}里面添加以下内容

limit_conn_zone $binary_remote_addr zone=conn_zone:10m;

然后在需要测试的网站配置文件里引用上方定义模块

vim /etc/nginx/conf.d/a.com.conf    在location {}里面添加以下内容

limit_conn conn_zone 1;        #单个IP,同时只允许有一个TCP连接

 九、访问控制

1.基于主机(ip)

①模板

ngx_http_access_module

 ②语法

allow  允许某些主机
deny   拒绝某些主机

③启动控制

a.com网站限制主机访问

vim /etc/nginx/conf.d/a.com.conf    打开配置文件,在server{}里面开头添加2~4行内容
allow 192.168.145.1;               #允许多个主机连接要在下一行里添加,不能并排写在后面
allow 192.168.145.136; 
deny all;                          #all指拒绝剩余的所有主机

2.基于用户(username$password) 

①模块

ngx_http_auth_basic_module #auth认证 basic 基础信息

②启动控制

建立认证文件

yum -y install httpd-tools
htpasswd -cm /etc/nginx/conf.d/passwd user10   # 网站密码 -c创造 m加密 路径 user10用户
htpasswd -cm /etc/nginx/conf.d/passwd user20
cat /etc/nginx/conf.d/passwd

在配置文件里引用上方文件

vim /etc/nginx/conf.d/a.com.conf       在server{} 里面添加2~3行内容
auth_basic "lai la laotei";            #"lai la laotei"是页面提示语,可能会不显示
auth_basic_user_file /etc/nginx/conf.d/passwd;     #引用认证文件

重启服务器

systemctl restart nginx

真机浏览器重新访问a.com网站时,会跳出验证信息需要填写账号和密码才能访问

十、HTTP 协议详解 

1.HTTP

       超文本传输协议,是一种建立在TCP上的无状态连接。整个基本的工作流程是客户端发送一个HTTP请求,说明客户端想要访问的资源和请求的动作,服务器收到请求后,服务端开始处理请求,并根据请求作出相应的动作访问服务器资源,最后通过发送HTTP响应把结果返回给客户端。其中一个请求的开始到一个响应的结束称为事务,当一个事务结束后,还会在服务端添加一条日志条目。

2.URI

是统一资源标识符。HTTP请求的内容通称为“资源”。 每个资源都由一个(URI)来进行标识。URL即统一资源定位符,它是URI的一种。一份文档,一张图片,或所有其它。URI 包括URL 、URN。

3.URN

是另一种形式的URI,它通过特定命名空间中的唯一名称来标识资源

======================================================================

======================================================================

物理层        数据链路层      网络层      传输层        应用层

物理层:前导符起始帧定位符

数据链路层:数据帧:源MAC 目标MAC地址

网络层:IP地址,逻辑寻址:源IP 目标IP

传输层:可靠性:端口号,序列号,确认号

应用层:HTTP URL http://www,kengni.com/1.jp 

十一、Nginx-proxy 代理服务器

1.代理原理

内网客户机通过代理访问互联网。通常要设置代理服务器地址和端口。

2.proxy 模块

语法:

代理
proxy_pass URL;               代理的后端服务器URL
缓冲区
proxy_buffering on | off;     缓冲开关
proxy_buffer_size 4k | 8k;    缓冲区大小
proxy_buffer number size;     缓冲区数量
proxy_busy_buffer_size size;  忙碌的缓冲区大小,控制同时传递给客户端的buffer数量

3.启动代理 

环境:需要两台nginx真实服务器

          192.168.145.137 作为 网站服务器

          192.168.145.136 作为 代理服务器

在代理服务器配置文件里启动代理模块,在location {}里面注释掉代理服务器上的主页和主目录,然后添加7~16行的内容
vim /etc/nginx/conf.d/default.conf
location / {                                  
 #       root   /usr/share/nginx/html;
 #       index  index.html index.htm;
    
proxy_pass http://192.168.145.137;
proxy_redirect default;                  

proxy_set_header Host $http_host;                   
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
}

4.proxy 缓存

①模块

语法:
 
 缓存开关
 proxy_cache zone
 proxy_cache_path path [levels=levels]
 代理缓存
 proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m
 #代理器缓存路径       存放位置        用二级目录                 10M空间
 缓存维度
 proxy_cache_key string   #定义缓存唯一Key,通过唯一key来进行hash存取,缓存文件名
 缓存过期
 proxy_cache_valid 200 302 10m   #缓存200 302 十分钟
 proxy_cache_valid 404 10m       #缓存404 一分钟

②启动缓存

延续代理实验

设置代理服务器(192.168.145.136)

vim /etc/nginx/nginx.conf     在http{}开头添加
proxy_cache_path /app/qianfeng/cache levels=1:2 keys_zone=proxy_cachexulei:10M max_size=10g inactive=60m use_temp_path=off; 
 #proxy_cachexulei指缓存区的名字                 max_size指缓存空间大小   inactive指不活跃60分钟  use_temp_path指使用临时路径


新建代理缓存存放文件夹
mkdir -p /app/qianfeng/cache
vim /etc/nginx/conf.d/default.conf  在location{}里面添加
proxy_cache proxy_cachexulei;     #调用缓存策略  proxy_cachexulei为主配文件里自己建的名称
proxy_cache_valid 200 304 12h;    #对200和304的状态码缓存12小时
proxy_cache_valid any 10m;        #除了上面的,其它的缓存10分钟
proxy_cache_key $host$uri$is_args$args;  #定义缓存唯一Key,通过唯一key来进行hash存取
add_header Nginx-Cache "$upstream_cache_status"; #在回给用户的时候将缓存的状态回给用户
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
#后端服务器报500 505 503 504错误时会跳到下一个后端服务器

重启代理服务器

systemctl restart nginx 

5.验证

  • 最后在真机上访问代理服务器192.168.145.136 ,即可访问到nginx主页,即代理成功
  • 在观察浏览器上的缓存状态码为HIT,即proxy缓存设置成功 

       访问第一次,状态码是 miss , 表示未击中缓存(代理服务器上未找到缓存)

       访问第二次,状态码是 HIT ,表示击中缓存 (代理服务器上找到了该URL的缓存)

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值