nginx源码安装

1.下载nginx源码包

wget https://nginx.org/download/nginx-1.14.2.tar.gz

2.检查并安装先决条件

GCC、 PCRE库、 zlib库、 OpenSSL库、等等

3.解压源码包

tar –zxvf nginx-1.14.2.tar.gz

4.预编译

./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

5.make

6.make install

7.检查nginx 是否安装成功

/usr/local/nginx/sbin/nginx -V

nginx配置文件nginx.conf

nginx 代码分析 nginx源代码_客户端

1.全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

2.events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

3.http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,日志自定义,是否使用sendfile传输文件,连接超时时间,等。

4.server块:配置虚拟主机的相关参数,一个http中可以有多个server。

5.location块:配置请求的路由,以及各种页面的处理情况。

6.upstream 块:负载均衡

Nginx安全策略

1.修改nginx版本号

编译之前修改src/core/nginx.h文件中的版本号信息

2.删除所有不需要的Nginx模块

通过预编译命令,设置编译哪些模块:./configure –without-http_autoindex_module –without-http_ssi_module

3.控制缓冲区溢出攻击

(1)client_body_buffer_size 1k-(默认8k或16k)这个指令可以指定连接请求实体的缓冲区大小。如果连接请求超过缓存区指定的值,那么这些请求实体的整体或部分将尝试写入一个临时文件。
(2)client_header_buffer_size 1k-指令指定客户端请求头部的缓冲区大小。绝大多数情况下一个请求头不会大于1k。
(3)client_max_body_size 1k-指令指定允许客户端连接的最大请求实体大小。
(4)large_client_header_buffers-指定客户端一些比较大的请求头使用的缓冲区数量和大小。请求字段不能大于一个缓冲区大小,如果客户端发送一个比较大的头,nginx将返回”Request URI too large” (414)

(5)keepalive_timeout 5 值指定了客户端与服务器长连接的超时时间,超过这个时间,服务器将关闭连接

 

4、限制可用方法

limit_except GET POST {
 deny all;
 }

 

5、限制ip

•allow 白名单

•deny黑名单

location / {
 deny 192.168.1.1;
 allow 192.168.1.0/24;
 allow 10.1.0.0/16; 
deny all; 
}

6、ip并发限制

•limit_conn_zone(这个变量只能在http使用)

http{

#定义一个名为one的limit_zone,大小10M内存来存储session,

#以$binary_remote_addr 为key

$binary_remote_addr zone=one:10m;
 }

•limit_conn(这个变量可以在http, server, location使用)

location { 
limit_conn one 20;

#连接数限制 #带宽限制,对单个连接限数,如果一个ip两个连接,就是500x2k

limit_rate 500k; 
 }

7、限制IP访问频率

•limit_req_zone(这个变量只能在http使用

limit_req_zone $binary_remote_addr zone=allips:10m rate=5r/s;

#定义一个名为allips的limit_req_zone用来存储session,大小是10M内存, #以$binary_remote_addr 为key,限制平均每  秒的请求为5个。

•limit_req

location  \{

# burst爆发的意思,这个配置的意思是设置一个大小为5的缓冲区。

#nodelay,如果不设置该选项,严格使用平均速率限制请求数,

limit_req zone=allips burst=5 nodelay; 
}