NGINX优化

nginx简介

Nginx是俄罗斯人Igor Sysoev以事件驱动(epoll)的方式编写的轻量级,高性能的 HTTP 和反向代理服务器,同时也是一个 IMAP/POP3/SMTP代理服务器。但是nginx并不支持cgi方式运行,原因是可以减少因此带来的一些程序上的漏洞。所以必须使用fastcgi方式来执行php程序。

nginx优化

1)编译安装前的优化
编译安装前的优化主要是用来修改程序名等等,目的更改源码隐藏软件名和版本号
安装zlib-devel,pcre-devel等依赖包
在这里插入图片描述
下载nginx的源码包:http://nginx.org/download
解压源码包:
在这里插入图片描述
在这里插入图片描述
隐藏软件名称和版本号:
NGINX优化_第1张图片
定义了http错误码的返回:
有时候我们的页面程序出现错误,nginx会代我们返回相应的错误代码,回显的时候会带上ngin和版本号,我们可以通过更改配置文件隐藏此信息
在这里插入图片描述
NGINX优化_第2张图片
2)安装nginx
NGINX优化_第3张图片
相关选项说明
–with-http_dav_module:增加 PUT,DELETE,MKCOL:创建集合,COPY 和 MOVE 方法
.
–with-http_stub_status_module:获取 nginx 的状态统计信息
.
–with-http_addition_module:作为一个输出过滤器,支持不完全缓冲,分部分相应请求
.
–with-http_sub_module:允许一些其他文本替换nginx 相应中的一些文本
.
–with-http_flv_module:提供支持 flv 视频文件支持
.
–with-http_mp4_module:提供支持 mp4 视频文件支持,提供伪流媒体服务端支持
.
–with-http_ssl_module:启用 ngx_http_ssl_module
在这里插入图片描述
编译并安装
在这里插入图片描述
启动nginx
NGINX优化_第4张图片
测试是否隐藏了版本和软件名
NGINX优化_第5张图片
3)nginx配置项优化
在这里插入图片描述
在这里我们可以看到work进程是我们创建的nginx程序用户,但master进程还是root,其中master是监控进程,也叫主进程,work是工作进程,部分还有cache相关进程,它们的关系如下图
NGINX优化_第6张图片
可以直接理解为master是管理员,work进程才是为用户提供服务的
.
进入nginx配置文件
在这里插入图片描述
1.nginx运行工作进程个数
NGINX优化_第7张图片
2.nginx事件处理模型
NGINX优化_第8张图片
3.开启高效传输模式
NGINX优化_第9张图片
4.连接超时时间
NGINX优化_第10张图片
keepalived_timeout:客户端连接保持会话超时时间,超过这个时间,服务器会断开这个链接
.
tcp_nodelay:也是防止网络阻塞,不过要包涵在keepalived参数才有效
.
client_header_buffer_size 4k:客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过 1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令 getconf PAGESIZE取得。open_file_cache
.
max=102400 inactive=20s:这个将为打开文件指定缓存,默认是没有启用的,max 指定缓存数量,建议和打开文件数一致,inactive 是指经过多长时间文件没被请求后删除缓存
.
open_file_cache_valid 30s:这个是指多长时间检查一次缓存的有效信息
.
open_file_cache_min_uses 1:open_file_cache 指令中的 inactive 参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive 时间内一次没被使用,它将被移除。
.
client_header_timeout:设置请求头的超时时间。我们也可以把这个设置低些,如果超过这个
时间没有发送任何数据,nginx 将返回 request time out的错误
.
client_body_timeout:设置请求体的超时时间。我们也可以把这个设置低些,超过这个时间没
有发送任何数据,和上面一样的错误提示
.
reset_timeout_connection:告诉 nginx 关闭不响应的客户端连接。这将会释放那个客户端所
占有的内存空间
.
send_timeout 响应客户端超时时间,这个超时时间仅限于两个活动之间的时间,如果超过
这个时间,客户端没有任何活动,nginx 则会关闭连接
.
server_tokens:并不会让 nginx 执行的速度更快,但它可以关闭在错误页面中的nginx 版本
数字,这样对于安全性是有好处的
.
client_max_body_size:上传文件大小限制
.
.
5.fastcgi调优
NGINX优化_第11张图片
fastcgi_connect_timeout 600:指定连接到后端 FastCGI 的超时时间
.
fastcgi_send_timeout 600:向 FastCGI传送请求的超时时间
.
fastcgi_read_timeout 600:指定接收 FastCGI应答的超时时间
.
fastcgi_buffer_size 64k:指定读取 FastCGI应答第一部分需要用多大的缓冲区,默认的缓冲区大小为 fastcgi_buffers指令中的每块大小,可以将这个值设置更小
.
fastcgi_buffers 4 64k:指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求,如果一个 php 脚本所产生的页面大小为256KB,那么会分配 4 个 64KB 的缓冲区来缓存,如果页面大小大于 256KB,那么大于 256KB 的部分会缓存到 fastcgi_temp_path指定的路径中,但是这并不是个好方法,因为内存中的数据处理速度要快于磁盘。一般这个值应该为站点中php
脚本所产生的页面大小的中间值,如果站点大部分脚本所产生的页面大小为256KB,那么可
以把这个值设置为“8 32K”、“4 64k”等
.
fastcgi_busy_buffers_size 128k:建议设置为 fastcgi_buffers的两倍,繁忙时候的 buffer
.
fastcgi_temp_file_write_size 128k:在写入 fastcgi_temp_path时将用多大的数据块,默认
值是 fastcgi_buffers的两倍,该数值设置小时若负载上来时可能报502 Bad Gateway
.
fastcgi_temp_path:缓存临时目录
.
fastcgi_intercept_errors on:这个指令指定是否传递4xx 和 5xx 错误信息到客户端,或者允许
nginx 使用 error_page 处理错误信息
.
fastcgi_cache_path /usr/local/nginx1.10/fastcgi_cache levels=1:2 keys_zone=cache_fastcgi:128m inactive=1d max_size=10g:fastcgi_cache缓存目录,可以设置目录层级,比如 1:2 会生成16*256 个子目录,cache_fastcgi是这个缓存空间的名字,cache 是用多少内存(这样热门的内容 nginx 直接放内存,提高访问速度),inactive 表示默认失效时间,如果缓存数据在失效时间内没有被访问,将被删除,max_size 表示最多用多少硬盘空间
.
.
6.gzip调优
NGINX优化_第12张图片
gzip on:开启压缩功能
.
gzip_min_length 1k:设置允许压缩的页面最小字节数,页面字节数从header 头的Content-Length 中获取,默认值是0,不管页面多大都进行压缩,建议设置成大于1K,如果小于 1K 可能会越压越大
.
gzip_buffers 4 32k:压缩缓冲区大小,表示申请4个单位为32K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip 压缩结果
.
gzip_http_version 1.1:压缩版本,用于设置识别HTTP 协议版本
.
gzip_comp_level 6:压缩比例,用来指定GZIP 压缩比,1 压缩比最小,处理速度最快,9 压
缩比最大,传输速度快,但是处理慢,也比较消耗CPU 资源
.
gzip_types text/css text/xml application/javascript:用来指定压缩的类型,‘text/html’类型总是会被压缩。默认值: gzip_types text/html (默认不对 js/css 文件进行压缩)
.
gzip_vary on:vary header支持,改选项可以让前端的缓存服务器缓存经过GZIP 压缩的页
面,例如用 Squid 缓存经过 nginx 压缩的数据
.
.
7.expires缓存调优
NGINX优化_第13张图片
8.防盗链
NGINX优化_第14张图片
9.内核参数优化
fs.file-max = 999999:这个参数表示进程(比如一个worker 进程)可以同时打开的最大句柄
数,这个参数直线限制最大并发连接数,需根据实际情况配置
.
net.ipv4.tcp_max_tw_buckets = 6000:这个参数表示操作系统允许 TIME_WAIT 套接字数量
的最大值,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息
.
net.ipv4.ip_local_port_range = 1024 65000:允许系统打开的端口范围
.
net.ipv4.tcp_tw_recycle = 1:启用 timewait 快速回收
.
net.ipv4.tcp_tw_reuse = 1:开启重用。允许将 TIME-WAIT sockets重新用于新的 TCP 连接。这对于服务器来说很有意义,因为服务器上总会有大量TIME-WAIT 状态的连接
.
net.ipv4.tcp_keepalive_time = 30:这个参数表示当 keepalive启用时,TCP 发送 keepalive消息的频度。默认是 2 小时,若将其设置的小一些,可以更快地清理无效的连接
.
net.ipv4.tcp_syncookies = 1:开启 SYN Cookies,当出现 SYN 等待队列溢出时,启用cookies 来处理
.
net.core.somaxconn = 40960:web 应用中 listen 函数的 backlog 默认会给我们内核参数的
net.core.somaxconn 限制到 128,而 nginx 定义的 NGX_LISTEN_BACKLOG 默认为 511,所以有必要调整这个值
.
net.core.netdev_max_backlog = 262144:每个网络接口接收数据包的速率比内核处理这些包
的速率快时,允许送到队列的数据包的最大数目
.
net.ipv4.tcp_max_syn_backlog = 262144:这个参数标示 TCP 三次握手建立阶段接受SYN 请求队列的最大长度,默认为 1024,将其设置得大一些可以使出现 Nginx 繁忙来不及 accept 新连接的情况时,Linux 不至于丢失客户端发起的连接请求。
.
net.ipv4.tcp_rmem = 10240 87380 12582912:这个参数定义了 TCP 接受缓存(用于 TCP 接受滑动窗口)的最小值、默认值、最大值。
.
net.ipv4.tcp_wmem = 10240 87380 12582912:这个参数定义了 TCP 发送缓存(用于 TCP 发送滑动窗口)的最小值、默认值、最大值
.
net.core.rmem_default = 6291456:这个参数表示内核套接字接受缓存区默认的大小
.
net.core.wmem_default = 6291456:这个参数表示内核套接字发送缓存区默认的大小
.
net.core.rmem_max = 12582912:这个参数表示内核套接字接受缓存区的最大大小
.
net.core.wmem_max = 12582912:这个参数表示内核套接字发送缓存区的最大大小
.
net.ipv4.tcp_syncookies = 1:该参数与性能无关,用于解决TCP 的 SYN 攻击
.
下面是完整的内核优化过程↓
fs.file-max = 999999
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 10240 87380 12582912
net.ipv4.tcp_wmem = 10240 87380 12582912
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 40960
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024 65000
ps:执行sysctl -p 使内核修改生效

你可能感兴趣的:(各种架构,软件,原理,运维,http,nginx)