Nginx安装与优化

OS:CentOS 7

一、准备工作

1.1、安装编译器及支持库

sudo yum install -y gcc gcc-c++ pcre-devel zlib-devel openssl-devel libxml2-devel libxslt-devel gd-devel

1.2、内核参数优化(/etc/sysctl.conf)

fs.file-max = 9999

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_keeplive_time = 60

net.ipv4.tcp_fin_timeout = 30

net.ipv4.tcp_max_tw_buckets = 5000

net.ipv4.ip_local_port_range = 1024 61000

net.ipv4.tcp_rmem = 4096 32768 262142

net.ipv4.tcp_wmem = 4096 32768 262142

net.core.netdev_max_backlog = 8096

net.core.rmem.default = 262144

net.core.wmem_default = 262144

net.core.rmem_max = 2097152

net.core.wmem_max = 2097152

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_max_syn.backlog = 1024

二、安装

wget -q http://nginx.org/download/nginx-1.15.0.tar.gz
tar -zxvf nginx-1.15.0.tar.gz 
cd nginx-1.15.0
./configure --prefix=/app/nginx-1.15.0 \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_xslt_module \
--with-http_image_filter_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module
make && make install

三、配置项

3.1、部分配置项

worker_process number  worker进程数量

worker进程数量大于CPU内核数会增大进程间切换带来的消耗,如果有可能出现阻塞式调用,则需要稍多一些worker进程。

worker_cpu_affinity cpumask[cpumask...]  绑定worker进程到指定的CPU内核

示例:

        worker_processes 4;

        worker_cpu_affinity 1000 0100 0010 0001;

ssl_engine device  SSL硬件加速

worker_priority nice  设置Nginx worker进程的nice优先级

-20 ~ 19 不建议比内核进程的nice值(-5)更小。

3.2、.conf 文件配置说明

(1)listen

default:默认虚拟主机。

backlog=num:TCP中backlog大小,如果backlog队列满,则客户端试图通过TCP三次握手建立连接会失败。

rcvbuf=size:设置监听句柄的SO_RCVBUF参数。

sndbuf=size:设置监听句柄的SO_SNDBUF参数。

deferred:在设置此参数后,若用户发起建立连接请求,并且完成三次握手,内核也不会为这次连接调度worker进程来处理,只有用户真正发送数据时,内核才会唤醒worker进程处理这个连接。

bind:绑定当前端口/地址对,只有同时对一个端口监听多个地址才会生效。

ssl:在当前监听的端口上建立的连接必须基于ssl协议。

(2)server_name name['''];

host匹配优先级:

1、完全匹配

2、通配符在前

3、通配符在后

4、正则表达式

(3)server_name_in_redirect on|off

需要配合server_name使用,on:重定向请求时使用server_name中的第一个主机名代替原先请求中的host头部;off:在重定向请求时使用本身的host头部。

(4)location [ = | ~ | ~ * | ^ ~ | @ ] / uri / { ... }

location会尝试根据用户请求中的URI来匹配上面的/uri表达式,如果可以匹配,就选择location{}块中的配置来处理请求。

匹配规则:

1、“=”表示把URI作为字符串,以便与参数中的uri做完全匹配。

2、“~” 表示匹配URI时是字母大小写敏感的。

3、“~*”表示匹配URI时忽略字母大小写问题。

4、“^~”表示匹配URI时只需要其前半部分与uri参数匹配即可。

5、“@”表示仅用于Nginx服务内部请求之间的重定向,带有@的不直接处理用户请求。

6、“/”表示匹配所有请求。

(5)root path;

配置块:http、server、location、if

定义资源文件相对于HTTP请求的根目录。

(6)alias path;

配置块:location

区别root示例:

location /conf {

            alias /usr/local/nginx/conf;   #丢弃location 后面的 /conf;

            root /usr/local/nginx/;   #紧跟location后面的 /conf;

}

(7)error_page code [ code ... ] [ = | = answer-code ] uri | @named_location

当对于某个请求返回错误码时,如果匹配上erroe_page中设置的code,则重定向到新的URI中。

*注:用户可以通过“=”来更改返回的错误码,示例:

error_page 404 =200 /empty.gif;

如果不想修改URI,只想让这样的请求重定向到另一个location中进行处理,可以设置:

location / {

                error_page 404 @fallback;

}

location @fallback {

                proxy_pass http://backend;

}

(8)try_files path1 [ path2 ] uri;

配置块:server、location

必须紧跟若干路径,而且最后必须要有URI参数。尝试按照顺序访问每一个path,如果可以读取,直接向用户返回文件,如果所有的path都找不到有效的文件,就重定向到最后的参数uri上。

· 内存及磁盘资源分配

(9)client_body_in_single_buffer on | off

配置块:http、server、location

用户请求中的HTTP包体一律存储到内存buffer中,超过client_body_buffer_size设置的值,还是会写入到磁盘文件中。

(10)client_header_buffer_size size;

配置块:http、server

正常情况下Nginx接受用户请求HTTPheader部分时分配的内存buffer大小。超出大小时large_client_header_buffers number size;

(11)connection_pool_size size(默认:256);

配置块:http、server

Nginx对于每个建立的成功的TCP连接会预先分配一个内存池。

(12)request_pool_size size(默认:4K)

Nginx开始处理HTTP请求时,将会为每个HTTP请求分配一个内存池。

·网络连接相关设置

(13)client_header_timeout time(默认:60s)

配置块:http、server、location

客户端与服务器建立连接后将开始接收HTTP头部。超时返回(“Request timed out”)响应。

(14)client_body_timeout time(默认:60)

读取HTTP包体超时时间。

(15)send_timeout time(默认:60s)

发送响应超时时间。

(16)reset_timeout_connection on|off (默认off)

连接超时后通过向客户端发送RST包来直接重置连接。选项打开后,超时时不再等待用户应答,避免产生许多处于FIN_WAIT_!、FIN_WAIT_2、TIME_WAIT状态的TCP连接。

(17)keepalive_disable [ msie6 | safari | none ] ... (默认:msie6 safari)

HTTP请求中的keepalive功能是为了让多个请求复用一个HTTP长连接,这个功能对服务器的性能提高很有帮助。某些浏览器对于使用keepalive功能的POST请求处理有功能性问题。

(18)keepalive_timeout time(默认:75s)

配置块:http、server、location

一个keepalive连接在闲置超过一定时间后,服务器与浏览器都会主动关闭这个连接。

(19)keepalive_request n(默认:100)

配置块:http、server、location

一个keepalive连接上默认最多能发送100个连接。

(20)tcp_nodelay on|off (默认:on)

配置块:http、server、location

确认keepalive连接是否使用TCP_NODELAY选项。

(21)tcp_nopush on|off (默认 off)

打开tcp_nopush时,将会在发送响应时把整个响应包头放在一个TCP包中发送。

·对客户端请求的限制

(22)limit_except method ... {...}

配置块 location

示例:

limit_except GET{

                allow 192.168.1.0/24;

                deny all;

}

注意:允许GET方法就意味着也允许HEAD方法。

(23)client_max_body_size size (默认1M)

允许最大的HTTP包体值。通过HTTP头部的Content-Length字段来确定值,可以不用等Nginx接收完所有HTTP包体就告诉用户请求过大不被接受。返回413(“Request Entity Too Large”)响应。

(24)limit_rate speed (默认:0)

配置块:http、server、location、if

对客户端请求限制每秒传输的字节数。

示例:server{

                if($slow){

                                set $limit_rate 4k;                               

                                }

}

(24)limit_rate_after (默认1m)

此配置表示Nginx向客户端发送的响应长度超过limit_rate_affter 后才开始限速。

·文件操作的优化

(25)sendfile on|off(默认:off)

可以启用Linux内核上的sendfile系统调用来发送文件,它减少了内核态和用户态之间的两次内存复制,这样就会从磁盘中读取文件后直接在内核态发送到网卡设备,提高了发送文件的效率。


猜你喜欢

转载自blog.csdn.net/fanper/article/details/80647967