Nginx基础入门2

ぐ巨炮叔叔 提交于 2020-10-09 18:48:37

一、Nginx部署-yum

1、官网链接

http://www.nginx.org

2、Nginx版本类型

Mainline version: 主线版,即开发版

Stable version: 最新稳定版,生产环境上建议使用的版本 

  

Legacy versions: 遗留的老版本的稳定版

3、配置yum源

4、安装

测试:

二、nginx配置文件

这个在前面的文章里面已经介绍过,这里不再重复介绍。

三、nginx编译参数

同上。

四、nginx基本参数

1、观察主配置文件

① 分类

CoreModule  核心模块(进程数等)

EventsModule 事件驱动模块(工作模式等)

HttpCoreModule http内核模块 (文档程序类型,配置文件等)

② 模块功能

     1、全局/核心块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
    2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
    3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
    4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。
    5、location块:配置请求的路由,以及各种页面的处理情况。 



 2、vim /etc/nginx/nginx.conf

   user nginx;
        运行nginx程序的独立账号
    worker_processes 1; 
        启动的worker进程数量(CPU数量一致或auto)
    error_log /var/log/nginx/error.log warn;
        错误日志存放位置
    pid /var/run/nginx.pid;
    events {
        事件
    use epoll; 
        事件驱动模型epoll【默认】
        事件驱动模型分类,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections 10240;
         //每个worker进程允许处理的最大连接数,例如10240,65535
    }
    http {
    include /etc/nginx/mime.types;
        文档和程序的关联记录
    default_type application/octet-stream;
        字节流处理方式
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
              
        '$status $body_bytes_sent "$http_referer" '
        '"$http_user_agent" "$http_x_forwarded_for"'; 
            日志格式,讲日志回来看
    access_log /var/log/nginx/access.log main;  
    sendfile on; 
                 优化参数
        高效传输文件的模式
            Nginx高级篇sendfile配置
sendfile: 设置为on表示启动高效传输文件的模式。sendfile可以让Nginx在传输文件时直接在磁盘和tcp socket之间传输数据。如果这个参数不开启,会先在用户空间(Nginx进程空间)申请一个buffer,用read函数把数据从磁盘读到cache,再从cache读取到用户空间的buffer,再用write函数把数据从用户空间的buffer写入到内核的buffer,最后到tcp socket。开启这个参数后可以让数据不用经过用户buffer。
    #tcp_nopush on;
              优化参数
            也就是说tcp_nopush = on 会设置调用tcp_cork方法,这个也是默认的,结果就是数据包不会马上传送出去,等到数据包最大时,一次性的传输出去,这样有助于解决网络堵塞。
    keepalive_timeout 65; 
          优化参数
        长连接
    #gzip on; 
            压缩参数
    include /etc/nginx/conf.d/*.conf;
              包含子配置文件夹







































3、观察默认虚拟主机配置文件

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

vim /etc/nginx/conf.d/default.conf 
    server {
        默认网站配置文件
    listen 80;
        监听端口
    server_name localhost;
        FQDN
    #charset koi8-r;
        网页字符类型
    #access_log /var/log/nginx/host.access.log main;
        日志
    location / {
    root /usr/share/nginx/html;
        主目录
    index index.html index.htm;
        默认主页名
    }
    #error_page 404 /404.html;
        错误页面
    # redirect server error pages to the static page /50x.html
    error_page 500 502 503 504 /50x.html;
        错误页面
    location = /50x.html {
        错误页面
    root /usr/share/nginx/html;
        错误页面主目录
    }
    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        代理设置
    #location ~ \.php$ {
    # proxy_pass http://127.0.0.1;
    #}
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        动态网站设置
    #location ~ \.php$ {
    # root html;
    # fastcgi_pass 127.0.0.1:9000;
    # fastcgi_index index.php;
    # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
    # include fastcgi_params;
    #}
    # deny access to .htaccess files, if Apache's document root
        访问控制部分
    # concurs with nginx's one
    #location ~ /\.ht {
    # deny all;
    #}
    }














































4、启动一个新的虚拟主机

① 启动一个新的虚拟主机

vim /etc/nginx/conf.d/xuleilinux.conf 
server     {
listen    80;
server_name    xuleilinux.com;
location / {
root    /xuleilinux;
index     index.html ;
}
}

 server 虚拟主机
listen 监听端口
server_name 服务器名称
location 网站目录设置
root 网站主目录在本地的路径
index 主页文件名
            http{} 是整个服务器,所有虚拟主机的设置。
server{}是某一个虚拟主机的设置
location{} 是某一个页面的设置。







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

 ②  重启服务

 ③ 域名解析和访问 

五、nginx日志log

1、日志配置

日志模块

日志模块的名称:

ngx_http_log_module

相关的指令

log_format:日志格式

access_log:访问日志

error_log:错误日志

open_log_file_cache:日志缓存

ps:日志缓存

open_log_file_cache  max=N [inactive=time]  [mim_uses=N]  [valid=time]  | off

该指令默认是禁止的,等同于:
open_log_file_cache off;

open_log_file_cache 指令的各项参数说明如下:
max: 设置缓存中的最大文件描述符数量。如果超过设置的最大文件描述符数量,则采用  LRU (Least Recently Used) 算法清除"较不常使用的文件描述符"。  LRU (Least Recently Used) 算 法的基本概念是:当内存缓冲区剩余的可用空间不够时,缓冲区尽可能地先保留使用者最常使用 的数据,将最近未使用的数据移出内存,腾出空间来加载另外的数据。

inactive:  设置一个时间,如果在设置的时间内没有使用此文件描述符,则自动删除此描述符。 此参数为可选参数,默认的时间为 10 秒钟。

min_uses: 在参数 inactive 指定的时间范围内,如果日志文件超过被使用的次数,则将该日 志文件的描述符记入缓存。默认次数为 1。

valid: 设置多长时间检查一次,看一看变量指定的日志文件路径与文件名是否仍然存在。默 认时间为 60秒。
off: 禁止使用缓存。

open_log_file_cache  指令的设置示例如下:
open_log_file_cache  max=1000  inactive=20s  min_uses=2  valid=1m。

日志的格式和命令

log_format

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

语法

        Syntax: log_format name [escape=default|json] string ...;
        name 表示格式名称
        string 表示定义的格式

默认值

        Default: log_format combined "...";
        log_format 有默认的无需设置的combined日志格式,相当于apache的combined日志格式

  环境
    Context: http        context

1、网站代理
        LB:
    例如代理服务器的日志格式就不同
       如果Nginx位于负载均衡器,squid,nginx反向代理之后,web服务器无法直接获取到客户端真实的IP地址。
$remote_addr获取的是反向代理的IP地址。反向代理服务器在转发请求的http头信息中,可以增加X-Forwarded-For信息,
用来记录客户端IP地址和客户端请求的服务器地址。




  nginx代理日志格式如下

  log_format porxy '$http_x_forwarded_for - $remote_user [$time_local] '
' "$request" $status $body_bytes_sent '
' "$http_referer" "$http_user_agent" ';
2、全局和局部


定义设置位置

vim /etc/nginx/nginx.conf

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

日志格式允许包含的变量

$remote_addr   远程地址,记录客户端ip地址

$remote_user  远程用户,记录客户端用户名称

[$time_local]    本地时间,服务器自身的时间

$request   请求,记录请求的url和http协议    get/post

$ststus  状态,记录请求状态   200/404/503/100/301

$body_bytes_sent   发送给客户端的字节数,不包括响应头的大小

$http_referer  记录从哪个页面链接访问过来的(超链接)

$http_user_agent  记录客户端浏览器相关信息  火狐/ie

$http_x_forwarded_for  代理ip

old
    $request_length 
        请求的长度(包括请求行,请求头和请求正文)。
    $request_time
         请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
    $time_iso8601
         ISO8601标准格式下的本地时间。
    $bytes_sent
         发送给客户端的总字节数    (可在主配置文件中,增加此项观c)
    $msec 
        日志写入时间。单位为秒,精度是毫秒。









 访问日志和错误日志

access_log   (日志)

某条日志记录

192.168.100.254 - - [17/Dec/2017:14:45:59 +0800] "GET /nginx-logo.png HTTP/1.1" 200 368 "http://192.168.100.10/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0" "-"

某条日志记录含义

192.远程主机IP
- -   用户
【2017】时间
get获得,下载,还有post提交。
 /nginx-logo.png  下载图片
http版本
状态码 什么结果。对,还是错
368 大小
引用自哪个连接,主页http://192.168.100.10/
Mozilla 5.0浏览器的版本
Windows NT 客户端系统类型
-远程客户端主机地址  (请看注释) 










error_log   (错误日志)

个性化404

1、修改主配置文件

server{

        error_page 404 /404.html;
            location = /404.html {
                root            /xuleilinux;
        }

}
systemctl restart nginx

2、创建错误反馈页面

vim /nihaolinux/404.html

3 、访问

访问不存在的页面

4、查看404日志

 观察404页面的现象。

日志缓存

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

Syntax:

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

        max 1000 指的是日志文件的FD,最大的缓存数量为1000。超了怎么办,看下面
        min_users 3    20秒内小于3次访问的FD,就给你清掉,结合inactive 20s 的时间。
        valid  1m  检查周期为1分钟。 
        总结:缓存最多1000个,到了极限,每分钟开始清除掉  20秒内小于3次的文件FD.


Default:

 open_log_file_cache off;

Context:

   http, server, locatition

       http{} 将整个服务器所有网站,所有页面的日志进行缓存
        server{} 将某一个网站的所有页面日志,进行缓存
        location{}某一个页面的日志,进行缓存。

2、日志轮转 切割 

前言

Nginx安装,会默认启动日志轮转。

  rpm  -ql nginx| grep log
        /etc/logrotate.d/nginx
        /var/log/nginx

轮转语句

  指令 /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf

八、Nginx Web模块 

1、随机主页

random_index_module

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

启动随机主页:

① 创建主页目录

mkdir /app

② 创建多个主页

touch /app/{blue.html,green.html,red.html,.yellow.html}
//在不同的页面书写不同的内容,例子如下:
<html>
<head>
<title>green color</title>
</head>
<body style="background-color:green">
<h1>green color!</h1>
</body>
</html>
//想要改变不同的颜色,只需要把颜色的英文改成其他颜色的英文就可以。

③ 启动随机主页

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

location / {
     #root   /usr/share/nginx/html;
     #index  index.html index.htm;
     root /app;
     random_index on;
}
}
 //在子配置文件里的默认文件的server模块的location里改成以上的配置。

记得重启服务。刷新网站主页,观察变化。

完成该试验后,请注释掉该功能。避免影响其他实验。隐藏文件不会被随机选取。

2、替换模块

sub_mudule

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

启动替换

vim /etc/nginx/conf.d/deffault.conf  //启动nginx默认页面
server{    //在server下插入
sub_filter nginx 'my homepage';
sub_filter_once on;
location / {
root   /usr/share/nginx/html;
index  index.html index.htm;
}

ps:替换模块,将nginx替换成my homepage单次替换开启。

将单次替换关闭,再次刷新页面,即可看见全文替换。

sub_filter_once off;

3、文件读取

ngx_http_croe_module

语法:

Syntax: sendfile on | off;
Default: sendfile on;
Context: http,server,location,if in location
Syntax: tcp_nopush on | off;
Default: tcp_nopush off;
Context: http,server,location
Syntax: tcp_nodelay on | off;
Default: tcp_nodelay on;
Context:http,server,location

三个部分的原理介绍

① senfile (发送文件)

未使用senfile()的传统网络传输的过程:

硬盘 >> kernel buffer >> user buffer>> kernel socket buffer >>协议栈

使用sendfile()来进行网络传输的过程:

硬盘 >> kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈

ps:减少了一次copy的过程,sendfile()不但能减少切换次数而且还能减少拷贝次数。

② tcp_nopush

未使用tcp_nopush网络资源浪费:

应用程序每产生一次操作就会发送一个包,而典型情况下一个包会拥有一个字节的数据以及40个字节长的包头,于是产生4000%的过载,很轻易地就能令网络发生拥塞。同时也浪费资源。

使用tcp_nopush网络传输速率提升:

当包累计到一定大小后再发送。

③ tcp_nodelay

开启或关闭nginx使用TCP_NODELAY选项的功能。 这个选项仅在将连接转变为长连接的时候才被启用。
TCP_NODELAY是禁用Nagle算法,即数据包立即发送出去。
由于Nagle和DelayedACK的原因,数据包的确认信息需要积攒到两个时才发送,长连接情况下,奇数包会造成延时40ms,所以tcp_nodelay会将ack立刻发出去。 如果不在长连接时,可以关闭此模块,因为ack会被立刻发出去。

启用模块

location /video/ {
    sendfile        on;
    tcp_nopush  on;
}

默认启动,无需验证。

4、文件压缩

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

模块

ngx_http_gzip_module

语法

 Syntax:     gzip on | off;
Default:     gzip off;
Context: http, server, location, if in location

Syntax:     gzip_comp_level level;
Default:     gzip_comp_level 1;(1~9)
Context: http, server, location

Syntax:     gzip_http_version 1.0 | 1.1;
Default:     gzip_http_version 1.1;
Context: http, server, location

启用模块

① 观察未压缩传输

拷贝图片至网站主目录

拷贝tar包至文件主目录

拷贝文本至文件主目录

通过浏览器下载文件并观察下载后大小。

② 启用压缩功能

 http { //在http标签中启动该功能
	gzip on;
gzip_http_version 1.1;
gzip_comp_level 2;
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;
		gzip_static on;# nginx对于静态文件的处理模块
	systemctl restart nginx

③ 观察压缩传输

注意缓存

压缩包和图片类对象本身已经自带压缩功能。所以压缩比例较小低。

文本类对象在压缩试验中,压缩比例体现优越。

再通过浏览器下载文件并观察下载后大小。

5、页面缓存

模块

ngx_http_headers_module

expires起到控制页面缓存的作用,合理的配置expires可以减少很多服务器的请求要配置expires,可以在http段中或者server段中或者location段中加入。

Nginx(expires缓存减轻服务端压力)

语法

Syntax: 	expires [modified] time;
                      expires  epoch | max | off;
Default: 	expires off;
Context: http, server, location, if in location

epoch:指定“expires”的值为1 January,1970,00:00:01 GMT

max:指定“expires”的值为10年

-1:指定“expires”的值为当前服务器时间-1s,即永远过期。

off:不修改“expires”和“Cache-control”的值

原理介绍

无缓存,每次访问服务器,均是全文传输。开启缓存可以加速浏览网站。

启用缓存

① 观察浏览器缓存

开启浏览器缓存,浏览页面。(默认)

第一次返回状态码200,页面对象全文传输

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

禁用缓存,浏览页面

返回码200,全文传输

理解浏览器缓存作用

解析缓存原理

② 理解nginx服务器缓存

开启服务器缓存模块

vim /etc/nginx/nginx.conf
location / {
root /usr/share/nginx/html
index index.html index.htm;
expires 24h;
}

再次浏览页面,观察响应头中出现服务器回复的缓存时间

理解nginx服务器启动缓存时间,加速浏览。

缺点是时效性降低。

6、防盗链

模块

ngx_http_referer_module

语法

Syntax: 	valid_referers none | blocked | server_names | string ...;
Default: 	—
Context: server, location

日志原理介绍

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                         '$status $body_bytes_sent "$http_referer" '
                         '"$http_user_agent" "$http_x_forwarded_for"';

日志格式中的http_referer是记录,访问点引用的URL。也就是超链接的上一级地址。
通过这段地址,可以发现一种网络行为——盗链。非法盗链会影响站点的正常访问。
通过http_referer模块可以控制这一点。防止非法盗链现象。 

启用防盗链

① 搭建一个a.com网站

mkdir /a.com   //准备一个文件夹
vim /etc/nginx/conf.d/a.com.conf //准备一个配置文件来指向这个文件
server {
    listen 80;
    server_name a.com;
location / {
root /a.com
index index.html;
}
} //保存退出

vim /a.com/index.html
<img src='1.jpg' />
注意要将1.jpg图片拷贝至网站主目录。

在个人主机上做好域名解析。 

② 搭建一个b.com网站

在主页中盗链A网站的图片

  vim index.html
    <img src='http://A网站的域名或者地址/1.jpg' />
        盗用链接
    注意网站主目录中,根本没有图片。 

③ 访问两个网站页面。均能正常显示图片。

④ 注意b网站的日志

日志正常

192.168.100.254 - - [20/Sep/2017:15:10:27 +0800] "GET / HTTP/1.1" 200 42 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0" "-"

⑤ 注意a网站的日志

日志不正常。日志莫名其妙的产生了。观察referer字段,发现被盗链了。 

192.168.100.254 - - [20/Sep/2017:15:10:27 +0800] "GET /1.jpg HTTP/1.1" 200 1635350 "http://192.168.100.20/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0"

⑥ 启动a.com防盗链功能

location / {
        root   /a.com;
        index  index.html index.htm;
     
        valid_referers none blocked *.a.com;
        if ($invalid_referer) {
            return 403;
        }
    }
重启服务

⑦  再次访问b.com网站,盗链失败。

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


location ~* \.(gif|jpg|png|bmp)$ {
root /a.com
    valid_referers none blocked  *.qfcloud.top server_names ~tianyun ~\.google\. ~\.baidu\.;
    if ($invalid_referer) {
        return 403;
        #rewrite .* http://qfcloud.top/403.jpg;
    }
}
location / {
        root   /a.com;
        index  index.html index.htm;
     
        valid_referers none blocked *.a.com        server_name  192.168.100.*  ~tianyun ~\.google\. ~\.baidu\.   b.com;
        if ($invalid_referer) {
            return 403;
        }
    }

 ⑨ 再次盗链,访问成功

九、nginx限制访问

1、ngx_http_limit_req_module

启动请求频率限制

测试未限制的情况下访问

[root@localhost ~]# yum -y install httpd-tools
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
软件包 httpd-tools-2.4.6-93.el7.centos.x86_64 已安装并且是最新版本
无须任何处理
[root@localhost ~]# ab -n 100 -c 10 http://10.8.162.122/
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 10.8.162.122 (be patient).....done


Server Software:        nginx/1.18.0
Server Hostname:        10.8.162.122
Server Port:            80

Document Path:          /
Document Length:        660 bytes

Concurrency Level:      10
Time taken for tests:   0.034 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      78200 bytes
HTML transferred:       66000 bytes
Requests per second:    2917.07 [#/sec] (mean)
Time per request:       3.428 [ms] (mean)
Time per request:       0.343 [ms] (mean, across all concurrent requests)
Transfer rate:          2227.68 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       1
Processing:     1    3   1.0      3       5
Waiting:        1    3   0.9      3       4
Total:          1    3   1.1      3       5

Percentage of the requests served within a certain time (ms)
  50%      3
  66%      3
  75%      4
  80%      5
  90%      5
  95%      5
  98%      5
  99%      5
 100%      5 (longest request)

启动限制 

vim /etc/nginx/nginx.conf
定义:
	  limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;  
	//限制请求  二进制地址  限制策略的名称   占用10M空间  允许每秒1次请求
引用:
	 limit_req zone=req_zone;  
	//引用 限制策略的名称
配置:
http {
    limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;     定义

    server {
        location / {
            root /usr/share/nginx/html;
            index index.html index.htm;
            limit_req zone=req_zone;  		引用
            #limit_req zone=req_zone burst=5;
            #limit_req zone=req_zone burst=5 nodelay; 
        }
    }
}

限制后 (重启服务,并测试)

[root@localhost ~]# ab -n 100 -c 10 http://10.8.162.122/
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 10.8.162.122 (be patient).....done


Server Software:        nginx/1.18.0
Server Hostname:        10.8.162.122
Server Port:            80

Document Path:          /
Document Length:        660 bytes

Concurrency Level:      10
Time taken for tests:   0.066 seconds
Complete requests:      100
Failed requests:        99      //失败的请求
   (Connect: 0, Receive: 0, Length: 99, Exceptions: 0)
Write errors:           0
Non-2xx responses:      99    //有问题的相应
Total transferred:      65231 bytes
HTML transferred:       50160 bytes
Requests per second:    1506.27 [#/sec] (mean)
Time per request:       6.639 [ms] (mean)
Time per request:       0.664 [ms] (mean, across all concurrent requests)
Transfer rate:          959.53 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.2      0       1
Processing:     1    6  14.3      1      49
Waiting:        1    6  14.3      1      49
Total:          1    6  14.4      2      49

Percentage of the requests served within a certain time (ms)
  50%      2
  66%      2
  75%      2
  80%      3
  90%     49
  95%     49
  98%     49
  99%     49
 100%     49 (longest request)

观察错误日志

tail -f /var/log/nginx/error.log
2017/10/08 01:05:08 [error] 23287#23287: *720 limiting requests, excess: 5.109 by zone "req_zone", 
client: 27.216.240.201, server: localhost, request: "GET / HTTP/1.0", host: "tianyun.me"
	

 limiting requests
	由于限制请求导致。

十、Nginx访问控制

1、基于主机(ip)

模块

ngx_http_access_module

directives

allow  允许某些主机

deny  拒绝某些主机

 syntax

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

启用控制

限制主机访问

vim /etc/nginx/conf.d/default.conf
server {
  allow 10.18.45.65;
  allow 10.18.45.181;
  deny all;
}

测试

服务器无法访问

2、基于用户

模块

ngx_http_auth_basic_module

Syntax

方法一
        Syntax:     auth_basic string | off;
        Context: http, server, location, limit_except

 方法二
        Syntax:     auth_basic_user_file file;
        Context: http, server, location, limit_except

启用控制

① 建立认证文件

yum install -y httpd-tools
	生成秘钥的工具是由apache提供
htpasswd -cm /etc/nginx/conf.d/passwd user10
	会话密码
htpasswd -m /etc/nginx/conf.d/passwd user20
	会话密码
cat /etc/nginx/conf.d/passwd
	观察口令文件是否生成。已生成
	user10:$apr1$UE/tLtDM$nVm686kAMYb/ArqQDUi8U/
user20:$apr1$bmn0E/gK$enkXKb2V5uFvUy9wdIHlP.

② 启动认证 

vim /etc/nginx/conf.d/default.conf
    server {
	找到server{字段,在下一行插入认证字段。
            auth_basic "nginx access test!";
            auth_basic_user_file /etc/nginx/conf.d/passwd;
	提示消息
引用认证文件
...
}

③ 重启并验证

再次访问网站,发现需要输入用户名和密码。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!