nginx笔记
nginx
具备解决高并发,4层 7层负载均衡和代理程序的一种服务.是我们公司常用的一种服务
nginx是如何工作的
- 高并发是使用了IO多路复用
- nginx非常强大的原因是因为使用了非常主流的epool模型
epoll模型
- 异步,非阻塞
- 每进来一个request,会有一个worker进程去处理。但不是全程的处理,处理到什么程度呢?处理到可能发生阻塞的地方,比如向上游(后端)服务器转发request,并等待请求返回。
- 那么,这个处理的worker不会这么一直等着,他会在发送完请求后,注册一个事件:“如果upstream返回了,告诉我一声,我再接着干”。于是他就休息去了。这就是异步。
- 此时,如果再有request 进来,他就可以很快再按这种方式处理。这就是非阻塞和IO多路复用。而一旦上游服务器返回了,就会触发这个事件,worker才会来接手,这个request才会接着往下走。这就是异步回调。
nginx配置文件
-
/etc/logrotate.d/nginx
日志轮转 -
/etc/nginx/nginx.conf
总配置文件 -
/etc/nginx/conf.d
子配置文件夹 -
/etc/nginx/conf.d/default.conf
默认的网站配置文件 -
/etc/nginx/fastcgi_params
动态网站模块文件-python,php所需的相关变量 -
/etc/nginx/koi-utf
字符集,文件编码 -
/etc/nginx/mime.types
文件关联程序
网站文件类型 和 相关处理程序 -
/etc/nginx/modules
模块文件夹。第三方模块 -
/usr/lib/systemd/system/nginx-debug.service
nginx调试程序启动脚本 -
/usr/lib/systemd/system/nginx.service systemctl
服务脚本。 -
/usr/sbin/nginx
主程序 -
/usr/sbin/nginx-debug
nginx调试程序
nginx优化
-
隐藏版本号
server_tolens off
-
根据cpu内核数配置nginx work 进程数
worker_processes 4 进程数
-
调整nginx work 单个允许的最大连接数
worker_connections 20480
-
fastagi 调优
-
开启gzip压缩功能 节省带宽,提高传输速度用户体验好
gzip on
-
开启高效文件传输 防止网络和磁盘io的阻塞
sendfile on tcp_nopush
-
设置连接超时时间,设置防盗链,基于ip和url的访问控制
内核参数优化
fs.file-max = 99999 worker 可以同时打开的最大句柄数
ipv4 tcp_tw_reuse = 1 允许time-wait的接口重新用于新的tcp连接
ipv4 tcp_tw_recycle = 1 开启time wait 快速回收
ipv4 tcp_syvn_max_backlog = 1024 三次握手建立的允许接受的syn请求队列的最大数
ipv4 tcp_keepalive_time = 30 tcp发送keepalive 确认服务/客户是否存在的时间,调小能更快的清理无效的连接
ipv4 tcp_syncookies = 1 开启半连接池 防止 tcp syn攻击
模块
- ngx_http_log_module 日志模块
- ngx_http_proxy_module 反向代理模块
- upstream 负载均衡
- ngx_http_access_module 访问控制模块
- 防盗链模块
- 替换页面模块(重写)
nginx平滑升级
- 1.15.2–1.16.0
- Nginx1.16.0版本的发布,修复了先前1.15.2版本中内存分配错误,请求处理速率超过配置速率、针对流模块中UDP代理改进、随机负载均衡方法等的问题,为了nginx服务器能提供稳定的服务,nginx需要升级到一个更稳定的版本。
- 编译安装新版本ngixn,指定安装目录为新目录
- 查看旧的nginx的主进程号和工作进程号
- 替换旧的执行程序 备份旧的执行文件
- 给主进程发送USR2信号 (USR2 : 启动新的主进程,实现热升级 ) 旧版本的主进程将重命名它的pid文件为.oldbin (例如:/usr/local/nginx/logs/nginx.pid.oldbin),然后执行新版本的nginx可执行程序,依次启动新的主进程和新的工作进程.
- 给进程发送WINCH信号 (WINCH : 逐步关闭工作进程 )
一段时间后,旧的工作进程(worker process)处理了所有已连接的请求后退出,仅由新的工作进程来处理输入的请求了. - 平滑重启 kill -HUP 住进称号或进程号文件路径
nginx会话保持方式
-
数据库存储Session
-
ip_hash
-
nginx-sticky-module-ng Cookie 第三方模块
nginx与php-fpm通信的两种方式
可以通过tcp socket和unix socket两种方式实现
tcp l通信方式,需要在nginx配置文件中填写php-fpm运行的ip地址和端口号。
unix socket通信方式,需要在nginx配置文件中填写php-fpm运行的pid文件地址
php php-fpm
- PHP /usr/local/php/etc/php.ini
- memory_limit = 128M 限制PHP使用的内
- max_input_time = 300 限制连接接收数据时间
- upload_max_fliesize = 16M 文件上传的大小
php-fpm(PHP FastCGI管理器) /usr/local/php/etc/php-fpm.conf
-
start_server 初始worker进程数
-
max_children = 50 最大进程数
-
min_spare_server =5 最小空余进程数
-
max_spare_servers=10 最大空余进程数