Nginx高性能Web服务器之定制化服务

308 阅读5分钟

Nginx服务器的安装部署

Nginx在编译时选择是否携带各种的功能模块
所以在这里可以根据需求生成多个具有特殊功能的nginx服务器

./configure --prefix=/usr/local/nginx --with-http_ssl_module 

nginx.conf文件的结构

......    #全局块
events{    #events块
}                 
http{    #http块
    ...    
    server{    #server块
        ...   
        location /{    #location块
          ...
        }
  }
}
......

全局块:主要设置一些影响Nginx服务器整体运行的配置指令,通常包括配置运行Nginx服务器的用户(组)、允许生成的worker process数、Nginx进程PID存放路径、日志的存放路径和类型以及配置文件引入等。

events块:影响Nginx服务器与用户的网络连接。常用到的设置包括是否开启对多worker process下的网络连接序列化,是否允许同时接收多个网络连接,选取那种事件驱动模型处理连接请求,每个worker process可以同时支持的最大连接数等。(这个模块对Nginx性能影响比较大)

http块:Nginx服务器配置中的重要部分,代理、缓存和日志定义等绝大数的功能和第三方模块的配置都可以放在这个模块中。

server块:server块和“虚拟主机”密切相关,每一个http块可以包含多个server块,而每个server块就相当于一台虚拟主机。通过这种虚拟主机技术使得Nginx服务器可以在同一台服务器上只运行一组Nginx进程,就可以运行多个网站。(并且每个网站都可以配置一个不同VIP)

location块:每个server块中可以包含多个location.location其实server块的一条指令,通过对请求字符串进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能都是在部分实现。许多第三方模块的配置也在location块提供功能。

全局块

配置运行Nginx服务器的用户

#user [user] [group]
user luo admin;

events块

配置运行生成的worker process数(即Nginx的进程数,默认为1)
workprocess是Nginx服务器实现并发处理服务的关键所在。其值越大,可以支持的并发处理量也会越多,但实际上它还要受软硬件等的限制。

#worker_processes number | auto 
worker_processes 3;

设置网络连接的序列化
accept_mutex,当其设置为开启的时候,将会对多个Nginx进程接收连接进行序列化,防止多个进程对连接的争抢。
默认是开启状态

accept_mutex on;

设置是否允许同时接收多个网络连接
一个Nginx进程有能力同时接收多个新到达的网络连接。
默认是关闭的。

multi_accept off;

#配置最大连接数
worker_connections 512;

配置事件驱动模型的选择
Nginx服务器提供了多种事件驱动模型来处理网络信息。

use 模型类型;

http块

配置Nginx进程PID存放路径
Nginx进程作为系统的守护进程运行,我们需要在某文件中保存当前运行程序的主进程号。
通常默认存放在 logs/nginx.pid

pid 路径;
配置服务日志

记录Nginx服务器提供服务过程应答前端请求的日志
默认存放在 logs/access.log

#access_log 路径 日志格式
access_log logs/access.log combined;

MIME-Type
MIME-Type是网络资源的媒体类型,通过它使得Nginx可以识别前端请求的资源类型。

include mime.types;

location块

location通常结合正则表达式
“=”:用于标准uri前,要求请求字符串与uri严格匹配。
“~”:用于表示uri包含正则表达式,并且区分大小写
“~*”:用于表示uri包含正则表达式,不区分大小写
“^~”:用户标准uri前,会对特殊字符进行编码处理,寻找匹配度最高的一个location处理请求。

多模块配置

配置错误日志的存放路径
在全局块、http块和server块中都可以对Nginx服务器的日志进行相关配置。
通常默认存放在 logs/error.log

#error_log 路径 日志级别
error_log logs/error.log error;

配置允许sendfile方式传输文件
此指令可以在http块、server块或者location块进行配置
提供文件下载服务时,不需要将文件内容先读到应用缓冲区,在调用send接口发送出去,可以直接使用sendfile(零拷贝)接口直接发送出去。

#开启零拷贝
sendfile on;
#设置最大数据大小 0表示无限制
sendfile_max_chunk 128k;

配置连接超时时间
与用户建立会话连接后,服务器可以使这些连接打开一段时间。
此指令可以出现在http块、server块或location块使用
默认的连接超时时间是75s

#在服务器端连接的时间设置为120s 
#发送给用户端的应答报文头部中Keep-Alive域的超时时间设置为100s
keepalive_timeout 120s 100s;

单连接请求数上限
Nginx服务器端和用户端建立会话连接后,用户端通过此连接发送请求数的上限。
此指令可以在server块和location块中,默认值是100.

keepalive_requests 100;

基于IP配置Nginx的访问权限
可以在http块、server块或者location块
192.168.1.0/24;能够被访问,这个规则类似switch匹配成功即会退出向下搜索。

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

基于IP地址分配和网络监听配置虚拟主机

首先为eth1添加两个IP别名192.168.1.31与192.168.1.32

ifconfig eth1:0 192.168.1.31 netmask 255.255.255.0 up
ifconfig eth1:1 192.168.1.32 netmask 255.255.255.0 up

在nginx.conf配置两台基于IP的虚拟主机

...
http
{
    ...
    server #虚拟主机一
    {
    listen: 80;
    server_name: 192.168.1.31;
    ...
    }
  server#虚拟主机二
  {
  listen: 80;
  server_name: 192.168.1.32;
    ...
  }
...
}

在这里插入图片描述