简单介绍:轻量级web服务器/反向代理服务器(常用),反向代理、负载均衡、前端动静分离、邮件代理服务器,单台nginx服务器并发可达到10w并发。
1、下载需要的依赖库文件
gcc(c++):垃圾回收,系统自带
如果需要安装OpenSSL,安装命令:
Yum install openssl
正常安装需要的依赖库:
yum install pcre //正则表达式的支持
yum install pcre-devel
yum install zlib
yum install zlib-devel
2、进行config配置
在nginx文件目录下进行
./configure -prefix = /usr/local/nginx //安装nginx到哪个路径
查看是否报错
3、测试配置文件
/sbin nginx -t
启动:
/ngnix/sbin/nginx
停止:
/sbin/nginx -s stop
nginx -s quit
重启命令:
/sbin/nginx -s reload
4、防火墙设置
外部无法访问的时候需要注意是否被防火墙挡住了,关闭防火墙
/sbin/service iptables stop
二、Nginx的进程结构、基本配置
默认启动nginx使用的配置文件路径:/conf/nginx.cof,可以通过 -c来指定配置文件启动
三、Nginx常用核心模块指令
1、err.log
配置日志,可以根据不同的server进行配置不同的log
2、include
从外部引入配置文件
3、pid
记录进程的/默认记录nginx.pid,类似于访问记录
4、user
记录是谁在运行nginx,可以进行授权
5、worker_cpu_affinity
仅支持linux系统,如果及其有多个cpu可以指定多个cpu,worker_processes工作线程一般与cpu相同或者2倍,如果你不会配置,可以使用系统默认的
6、max_client
最大连接数:worker_processes * worker_connections
反响代理情况下使用:worker_processes * worker_connections/4
因为一般情况下默认打开两个连续的服务器,再发给 nginx,nginx发送给tomcat,这样就是4倍了,所以需要除以4
7、$path/realpath_root
可以在日志的配置中添上之后,打印日志的时候就会带上当前进程以及当前真实路径
8、日志模块
8.1、access_log
路径/缓冲。off是会清楚之前的成功,combined会进行堆压,注意user如果不使用root的时候是需要给用户授权的,不然的话日志进行打印的时候是无法创建文件夹和文件的,这就是为什么其他配置都正确,但是nginx启动失败
8.2、事件模块
8.2.1、accept_mutex
并发特别高的时候需要配置,一般默认
8.2.2、use
使用的事件模型 linux建议使用epoll。根据操作系统选择不同的事件模型,合理使用可以提升效率
8.2.3、worker_connections
默认就是1024,可以设置大一些,一般情况下小于worker_rlimit_nofile(描述一个nginx进程打开的最多的文件数目,配置成linux内核下文件打开数目一直就可以了,可以通过ulimit -n来查看),如果worker_processes是2,那么最大的worker_connections 要 < 2048
当然只是理论上,一般配置成1024的倍数就可以了
四、Nginx的HTTP基本配置
主要是协议级别的,里面的server是服务器级别的,location是请求级别的。server只针对当前服务器,根据监听端口来确认,在监听端口之后可以找到upstream 就可以进行负载均衡,就会有多个server。
location就会导到后台去
Nginx的HTTP核心模块包括大量的指令和变量,都很重要。具体可以参见:http://nginx.org/en/docs/http/ngx_http_core_module.html
1、aio
用来处理异步io,当在Linux上启用AIO和sendfile时,AIO用于大于或等于directio指令中指定大小的文件,而sendfile用于较小大小的文件或禁用directio时。
2、alias
别名,为一个location指定一个路径,给路径重新换了新的路径,相当于windows快捷方式,支持正则表达式
3、chunked_transfer_encoding
传输的时候是否需要开启传输方式(http1.1以上)
4、client_body_in_file_only
把请求的实体写到一个文件当中去
5、client_body_in_single_buffer
将客户端连续请求放在缓冲区中
6、client_body_temp_path
写文件出去的临时路径
level 1 与level 2指的是临时文件目录会产生的数字位数
7、client_body_buffer_size
客户端请求的缓冲区大小,默认是8k/16k;注意,如果调优的时候需要修正。
8、client_body_timeout
默认60秒,body请求读取超时,报408错误
9、client_header_timeout
与8类似,报408错误
10、client_max_body_size
默认1个M,需要修改
11、connection_pool_size
每个连接的内存分配
关于头区的设置:
12、default_type
定义响应的默认MIME类型
13、directio
在读取大于或等于指定的文件时直接走,不需要进行sendfile
14、error_page
指定错误页面,错误码与uri的结合
配置location的时候
指的是只能是系统给你转发的,从外部请求是请求不到的
这里面的root是指的在50x.html后面追加的
15、if_modified_since
判断前台配置的缓存是否过期
16、internal
只能内部访问
17、keepalive_disable
禁止长链接
18、keepalive_timeout
长链接的超时时间,默认75秒
19、keepalive_requests
设置可通过一个保持活动连接提供的最大请求数,默认100
20、large_client_header_buffers
读取大客户机请求标头的最大值*number*
和*size*
缓冲区
21、limit_except
除了什么其他的都限制
22、limit_rate
限制传送到客户端的速度,默认是4k每秒
23、limit_rate_after
指的是传输多少之后限速
24、lingering_close
默认值“ on
”指示nginx 在完全关闭连接之前等待并 处理来自客户端的其他数据;
值“ always
”将导致nginx无条件地等待并处理其他客户端数据。
值“ off
”告诉nginx永远不要等待更多数据并立即关闭连接。此行为会破坏协议,不应在正常情况下使用。
25、lingering_time
此指令指定nginx处理(读取和忽略)来自客户端的其他数据的最长时间。等待多长时间关闭
26、listen
常用配置监听端口
27、location
这个很重要,主要就是对请求做处理
28、log_not_found
启用或禁用将未找到的文件的错误记录到 error_log中。默认就可以
29、open_file_cache
启用之后需要与以下进行配合使用
30、open_file_cache_errors
记录cache的错误
31、port_in_redirect
重定向之后对端口进行操作
32、request_pool_size
请求池大小,最好不超过poolsize
33、resolver
解析dns
34、satisfy
权限
35、sendfile
比较高效,一般是小的文件的传输,我们一般都会开启
36、server_name
37、try_files
相当于搜索,但是最后一个一定是可以找得到的
38、嵌入式变量
使用$开头,可以使用在语法当中
具体详情参见:http://nginx.org/en/docs/http/ngx_http_core_module.html
五、Nginx的Location区段
1、location没有操作符
2、有操作符
3、正则表达式~
~ $ 以某某开头以某某结尾,区分大小写
4、正则表达式~*
不区分大小写
5、正则表达式^~
类似于无修饰符,以制定模式开始,但是如果匹配乘车,那么就停止搜索其他模式
6、正则表达式@
定义location的区段,这些区段的客户端不能访问,只可以由内部产生的请求来访问,例如命令try_file/error_page
7、查找顺序和优先级
可以对业务进行垂直拆分,分布式配置。
8、总结
location = / { [ configuration A ] } location / { [ configuration B ] } location /documents/ { [ configuration C ] } location ^~ /images/ { [ configuration D ] } location ~* \.(gif|jpg|jpeg)$ { [ configuration E ] }
“ /
”请求将匹配配置A,
“ /index.html
”请求将匹配配置B,
“ /documents/document.html
”请求将匹配配置C,
“ /images/1.gif
”请求将匹配配置D,
“ /documents/1.jpg
”请求将匹配配置E.
六、Nginx的反向代理模块
Nginx通常被用作后端服务器的反向代理,这样就可以很方便的实现动静分离,以及负载均衡,从而提高服务器的处理能力
Http Proxy模块,功能很多,最常用的是proxy_pass,最好还是都看看
如果使用proxy_cache,需要继承第三方的ngx_cache_purge模块,用来清除指定的URL缓存,这个集成需要在安装nginx的时候去做
反向代理可以减轻服务器端的压力实现高并发,不仅仅是大型的电商之类的可以用,包括企业级的开发,只要是基于web的都可以去这样做
1、Http反向代理
ngx_http_proxy_module
模块允许将请求传递给另一台服务器。
location / { proxy_pass http://localhost:8000;//转发的地址 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr;//真实地址 }
2、指令
2.1、proxy_bind
把上游socket绑定到本地的地址,默认即可
2.2、proxy_buffer_size
第一部分的应答
设置*size*
用于读取从代理服务器接收的响应的第一部分的缓冲区。后端真实的服务器,这部分通常包含一个小的响应头。默认情况下,缓冲区大小等于一个内存页面。这是4K或8K,具体取决于平台
2.3、proxy_buffering
整个响应的buffer,来自代理服务器的响应缓冲。
2.4、proxy_busy_buffers_size
在响应尚未完全读取时可能忙于向客户端发送响应的缓冲区总数。后端未读完,但是可以先读出到客户端,而不是等待读完
2.5、proxy_cache
定义用于缓存的共享内存区域,从后端读取到数据之后是否要存到nginx的cache,客户端请求之后先去nginx进行命中,命中之后就会直接返回,例如网络访问的加速器之类的产品spuid、varnish。但是目前来说,nginx的性能不强,不太完善,当你更新某些内容必须要清楚原有缓存,否则则失效
2.6、proxy_connect_timeout
定义与代理服务器建立连接的超时。应该注意,此超时通常不会超过75秒。默认为60秒
2.7、proxy_headers_hash_bucket_size
设置头部hash大小,默认即可
2.8、proxy_headers_hash_max_size
设置proxy_hide_header和proxy_set_header 指令*size*
使用的哈希表的最大值,默认就可以
2.9、proxy_hide_header
默认情况下,nginx不会从代理服务器对客户端的响应中传递标题字段“Date”,“Server”,“X-Pad”和“X-Accel -...”。该proxy_hide_header
指令设置了不会传递的其他字段。相反,如果需要允许传递字段,则可以使用proxy_pass_header指令。
2.10、proxy_ignore_client_abort
确定在客户端关闭连接而不等待响应时是否应关闭与代理服务器的连接。
2.11、proxy_max_temp_file_size
如果返回的数据大于缓冲变成临时文件,那么设置这个size为多大
2.12、proxy_method
如果你将这个指令指定为post,那么所有转发到后端的请求都会变成post
2.13、proxy_next_upstream
在做负载均衡的时候,会指定在何种情况下继续访问下一个服务器;指定应将请求传递到下一个服务器的情况:
error
与服务器建立连接,向其传递请求或读取响应头时发生错误;
timeout
在与服务器建立连接,向其传递请求或读取响应头时发生超时;
等等,避免请求失败
2.14、proxy_pass
非常常用,设置代理服务器的协议和地址以及应映射位置的可选URI。作为协议,可以指定“ http
”或“ https
”。可以将地址指定为域名或IP地址,以及可选端口:
proxy_pass http:// localhost:8000 / uri /;
就算只有一台服务器,也应该配上UPSTREAM,为以后做负载均衡做准备
2.15、proxy_pass_header
允许将已禁用的头字段从代理服务器传递到客户端。
2.16、proxy_pass_request_body
直接走服务器
2.17、proxy_redirect
设置应在代理服务器响应的“位置”和“刷新”标头字段中更改的文本。不用去管
2.18、proxy_read_timeout
定义从代理服务器读取响应的超时。默认60秒
2.19、proxy_send_timeout
设置将请求传输到代理服务器的超时。
2.20、proxy_store
允许将文件保存到磁盘,需要存储的才会设置存储。非缓存
2.21、嵌入式变量
详情参考地址:http://nginx.org/en/docs/http/ngx_http_proxy_module.html
七、反向代理和动静分离的实现
1、location
location中的proxy_pass会转到upstream负载均衡,现在可以只配置一个
2、启动tomcat
3、启动nginx
4、观察log日志
会发现反向代理成功
5、动静分离拦截
location进行转发,需要进行拦截配置,例如:
root /usr/common/... location ~8 .8\.(jpg|jepg|gif|swf|ico)${ if(-f $request_filename){ expires 15d; break; } } Location ~* .*\.(html|htm|js|css)${ expires 1d; }
如果没有给他配置路径,那么他就会默认去找root的路径,例如:root /usr/common/...
可以去tomcat的日志当中去查看是否访问了静态文件,如果没有进行访问静态资源,那代表实现了动态的分离,但是注意:这种情况下需要保证后端与前端的程序保持一致,可以使用Rsync做服务端自动同步或者使用NFS\MFS分布式共享存储。
可以进行多部署,静态资源只放在静态服务器上
动静分离的时候:页面访问的路径就是root的路径加页面访问静态资源的路径
一定要注意location的过滤内容,这样的话就必须要进行分开配置
八、Nginx的负载均衡模块
Nginx通过updtream模块来实现简单的负载均衡,该ngx_http_upstream_module
模块用于定义可由proxy_pass,fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass和grpc_pass指令引用的服务器组。
示例:
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
server backup1.example.com:8080 backup;
server backup2.example.com:8080 backup;
}
server {
location / {
proxy_pass http://backend;
}
}
1、ip_hash
指定组应使用负载平衡方法,其中请求根据客户端IP地址在服务器之间分配。按照客户端的ip地址进行分发,主要应用于session相关的应用,因为有可能需要对应到服务器的session(例如tomcat做成集群,做复制),但是ip_hash并不能真正保证会分发到对应的ip地址,因为请求的ip地址也会在做编发,例如使用代理进行上网。或者本来需要分发到相对应的ip,但是对应的ip刚好宕机了,最好在设计的时候最好不用根据session来进行相关操作,不利于垂直拆分。
注意:如果服务器宕机了,不能直接删除掉,而是应该在后面加上down,跳过该服务器
示例:
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com down;
server backend4.example.com;
}
2、server
定义 服务器address和其他parameters服务器
2.1、weight=number
设置服务器的权重,默认为1。
2.2、max_conns=number
限制与number代理服务器的同时活动连接的最大值(1.11.5)。默认值为零,表示没有限制。
2.3、max_fails
=number
参数设置的持续时间内发生的与服务器通信的不成功尝试次数,以考虑服务器在fail_timeout
参数设置的持续时间内不可用 。默认情况下,不成功尝试次数设置为1.
2.4、fail_timeout
指定数量的不成功尝试与服务器通信的时间应该考虑服务器不可用;
以及服务器被视为不可用的时间段。
默认情况下,参数设置为10秒。
2.5、backup
将服务器标记为备份服务器。当主服务器不可用时,它将被传递请求。不能与ip_hash一起使用
2.6、down
将服务器标记为永久不可用。
3、upstream
定义一组服务器。服务器可以侦听不同的端口。此外,可以混合侦听TCP和UNIX域套接字的服务器。
upstream backend {
server backend1.example.com weight=5;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
server backup1.example.com backup;
}
默认情况下,使用加权循环平衡方法(轮询)在服务器之间分配请求。在上面的示例中,每7个请求将按如下方式分发:5个请求转到第backend1.example.com
一个和第三个服务器中的每一个请求。如果在与服务器通信期间发生错误,请求将被传递到下一个服务器,依此类推,直到将尝试所有正常运行的服务器。如果无法从任何服务器获得成功的响应,则客户端将接收与最后一个服务器的通信结果。
4、实际操作
4.1、使用tomcat模拟服务器
4.2、开启两个tomcat
修改端口
4.3、修改权重
修改upstream中两个不同tomcat服务的权重weight
例如:
upstream test.com{
server 127.0.0.1:9080 weight=10;
server 127.0.0.1:8080 weight=5;
}
4.4、开启nginx
4.5、验证
不断刷新ngnix的页面,就会发现,权重多的请求次数要比权重低的高
如果其中有一台机器宕机了,那么验证刷新nginx的页面,请求永远也不会请求宕机的那台
5、Geo和GeoIP模块
这两个模块主要用于做全局模块,可以根据不同的请求客户的ip去请求不同的服务器,例如上海的ip访问上海的服务器
5.1、Geo模块
该ngx_stream_geo_module
模块(1.11.3)创建了这取决于客户端的IP地址值的变量。
geo $geo {
default 0;
127.0.0.1 2;
192.168.1.0/24 1;
10.1.0.0/16 1;
::1 2;
2001:0db8::/32 1;
}
5.1.1、geo
描述指定变量的值对客户端IP地址的依赖性。默认情况下,地址取自$remote_addr
变量,但也可以从另一个变量中获取,例如:
geo $geo{
default default;
202.103.10.1/24 A;
179.9.0.3/24 B;
upstream default. server (
server 192.168.0. 100;
}
upstream A. server{
server 192.168.0.101;
}
upstream B. server{
server 192. 168.0.102;
}
server{
listen 80;
location / {
prozy_ pass http: //$gco. Ser ver$request_, uri;
}
}
}
geo $ arg_remote_addr $ geo {
...;
}
还支持以下特殊参数:
delete
删除指定的网络。
default
如果客户端地址与任何指定的地址不匹配,则设置为该变量的值。当以CIDR表示法指定地址时,可以使用“
0.0.0.0/0
”和“::/0
”代替default
。如果default
未指定,则默认值为空字符串。include
包括一个包含地址和值的文件。可能有几个夹杂物。
ranges
表示地址被指定为范围。这个参数应该是第一个。要加快地理基地的加载速度,地址应按升序排列。
表示地址被指定为范围。这个参数应该是第一个。要加快地理基地的加载速度,地址应按升序排列。
例如:
geo $country { default ZZ; include conf/geo.conf; delete 127.0.0.0/16; 127.0.0.0/24 US; 127.0.0.1/32 RU; 10.1.0.0/16 RU; 192.168.1.0/24 UK; }
geo $country { ranges; default ZZ; 127.0.0.0-127.0.0.0 US; 127.0.0.1-127.0.0.1 RU; 127.0.0.1-127.0.0.255 US; 10.1.0.0-10.1.255.255 RU; 192.168.1.0-192.168.1.255 UK; }
详情参见:http://nginx.org/en/docs/stream/ngx_stream_geo_module.html
5.2、GeoIP模块
所述ngx_stream_geoip_module
模块(1.11.3),依赖于客户端的IP地址值,并使用预编译的创建变量 的MaxMind数据库。
使用支持IPv6的数据库时,IPv4地址将被查找为IPv4映射的IPv6地址。
示例:
stream {
geoip_country GeoIP.dat;
geoip_city GeoLiteCity.dat;
map $geoip_city_continent_code $nearest_server {
default example.com;
EU eu.example.com;
NA na.example.com;
AS as.example.com;
}
...
}
详情参见:http://nginx.org/en/docs/stream/ngx_stream_geoip_module.html
九、Nginx的Rewrite模块
该ngx_http_rewrite_module
模块用于使用PCRE正则表达式更改请求URI,返回重定向,以及有条件地选择配置。客户端的uri请求地址a,通过rewritr模块重定向为c到服务器,杜绝恶意访问,也有利于搜索引擎的优化(SEO)
使用的语法源于Perl兼容正则表达式(Pcre)库
1、break
停止处理当前的ngx_http_rewrite_module
指令集
if ($slow) {
limit_rate 10k;
break;
}
2、if
if (*condition*
) { ... }
放在server
, location
中
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
}
if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
set $id $1;
}
if ($request_method = POST) {
return 405;
}
if ($slow) {
limit_rate 10k;
}
if ($invalid_referer) {
return 403;
}
3、return
停止处理并将指定的内容返回*code*
给客户端。非标准代码444在不发送响应头的情况下关闭连接。
4、rewrite
如果指定的正则表达式与请求URI匹配,则URI将根据*replacement*
字符串中的指定进行更改。
4.1、last
停止处理当前的ngx_http_rewrite_module
指令集 并开始搜索与更改的URI匹配的新位置;修改完之后进行执行
4.2、break
ngx_http_rewrite_module
与break指令一样, 停止处理当前的指令集
4.3、redirect
返回带有302代码的临时重定向; 如果替换字符串不以“ http://
”,“ https://
”或“ $scheme
” 开头,则使用;
4.4、permanent
返回301代码的永久重定向。
server {
...
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra last;
return 403;
...
}
5、rewrite_log
启用或禁用将ngx_http_rewrite_module
模块指令的处理结果记录到级别的error_log中notice
。
6、set
*value*
为指定 设置a *variable*
。该*value*
可以包含文本,变量,他们的组合。
在做php的时候是比较多的
十、更多模块的基本功能和配置
1、index模块
主要做默认首页的功能
1.1、index
定义将用作索引的文件。该*file*
名称可以包含变量。按指定顺序检查文件。列表的最后一个元素可以是具有绝对路径的文件。
index index。$ geo.html index.0.html /index.html;
location = / {
index index.html;
}
location / {
...
}
2、referer模块
主要用来防盗链,在请求头的referer字段中包含非正常的字段,这个模块可以禁止这个请求访问站点
valid_referers none blocked server_names
*.example.com example.* www.example.org/galleries/
~\.google\.;
if ($invalid_referer) {
return 403;
}
2.1、valid_referers
指定将导致嵌入$invalid_referer
变量设置为空字符串的“Referer”请求标头字段值。否则,变量将设置为“ 1
”。搜索匹配不区分大小写。
3、http_accesses模块
访问控制模块,实现简单控制,类似白名单黑名单
location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
}
可以与error_page配合来使用
4、charset模块
该ngx_http_charset_module
模块将指定的字符集添加到“Content-Type”响应头字段
5、Gzip模块
该ngx_http_gzip_module
模块是一个使用“gzip”方法压缩响应的过滤器。这通常有助于将传输数据的大小减少一半甚至更多
gzip on;
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
gzip_types text / plain application / xml;
6、Memcached模块
这是把Nginx当作Memcache的客户端,用来连接Memcache的模块
7、常见功能的配置片段
7.1、server
server{
listen 127.0.0.1:9080;
server_name 127.0.0.1;
}
十一、Nginx的配置优化以及使用建议
1、优化方向和目标
1.1、尽量提高单台机器处理效率
1.2、尽量降低单台机器的负载
1.3、尽量降低磁盘I/O
1.4、尽量降低网络I/O
1.5、尽量减少内存使用
1.6、尽量高效利用CPU
2、生产环境下
最好是专门为Nginx穿件用户和用户组,单独设置权限
3、worker_processes
通常设置成cpu的综合术,或者两倍
还可以同时使用worker_cpu_affinity来绑定cpu,使得每个worker进程独享一个cpu
4、evevts的事件模型
Linux推荐使用epoll模型
5、worker_rlimit_nofile
nginx进程打开的最大文件数目,默认1024
6、worker-connections
每个进程允许的最多连接数,默认是1024,要进行适当的调整
7、keepalive_timeout
设置到65左右就可以
8、client_header_buffer_size
设置请求缓存,设置成4k,通常为系统分页大小的证书倍,可以通过
getconf PAGESIZE
来查看系统分页大小
9、对打开文件设置缓存
open_file_cache max 建议设置成和每一个进程打开的最大文件数一致,inactive=60s;
open_file_cache_valid 90s;
open_file_cache_min_uses 2;//最小使用次数
open_file_cache_errors on;//出错是否需要记录
10、Gzip压缩
尽量开启gzip压缩,开启gzip_comp_level通常设置成3-5
11、access日志优化
如果使用其他统计软件,减少磁盘写,最佳方法就是关闭nginx日志
12、sendfile
Sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,通常应设置成 on,如果是下载等应用磁盘 I0 重负载应用,可设置为 off
13、Buffers size
Buffers size 优化:如果 buffer size 太小就会到导致 nginx 使用临时文件存储 response,这会弓|起磁盘读写 I0,流量越大问题越明显。
client_ body_buffer size 处理客户端请求体 buffer 大小。用来处理 POST 提交数据,上传文件等。client_ body_ buffer_ size 需要足够大以容纳需要。上传的 POST 数据。同理还有后端的 buffer 数据。
14、worker_priority
Worker_ priori ty 进程优先级设置:Linux 系统中,优先级高的进程会占用更多的系统资源,这里配置的是进程的静态优先级,取值范围-20 到+19,-20 级别最高。因此可以把这个值设置小一点,但不建议比内核进程的值低(通常为-5)
15、浏览器缓存
尽量使用浏览器缓存,例如设置expires设置成15d,节省网络流量,加快静态资源
16、负载均衡锁
accept_mutex,建议开启
17、SSL
服务器上如果有ssl硬件加速设备,请开启硬件加速