- Nginx 能够选择高效的epoll(linux 2.6内核) 、kqueue(FreeBSD)、eventport(Solars10)
- 作为网络I/O模型而Apache使用的则是传统的select模型,其比较稳定的Prefork模式为多进程模式,
- 需要经常派生子进程,所消耗的CPU等服务器资源比Nginx高很多。
- nginx编译容易混淆的几个参数
- --sbin-path=<path>
- #nginx可执行文件安装路径。如没指定,默认<prefix>/sbin/nginx
- --conf-path=<path>
- #在没有给定-c选项默认的nginx.conf的路径,默认<prefix>/conf/nginx.conf
- --error-log-path=<path>
- #在nginx.conf中没有指定error_log指定的情况下,默认的错误日志的路径。如果没有指定,默认为<prefix>/logs/error.log
- --http-log-path=<path>
- #在nginx.conf中没有指定access_log指定的情况下,默认的错误日志的路径。如果没有指定,默认为<prefix>/logs/access.log
- nginx的几种停止,重启,升级方式
- 从容停止
- kill - QUIT <pid>
- 快速停止
- kill - TERM <pid> 或 kill - INT <pid>
- 强制停止
- pkill -9 <pid>
- 重新打开日日志文件,在切割日志时用处很大
- kill - USER1 <pid>
- 平滑重启
- kill -HUP <pid>
- 当Nginx接到HUP信号时,他会尝试先解析配置文件(如果指定配置文件,就使用指定的,否则使用默认的)
- 如果成功,就应用新的配置文件(例如,重新打开日志文件或监听的套接字)。之后,Nginx运行新的进程。
- 通知工作进程关闭监听套接字,但是继续为当前连接的客户端提供服务。所有客户端的服务完成后,
- 旧得工作进程被关闭。如果新的配置文件应用失败,Nginx将继续使用旧的配置进行工作
- 平滑升级
- kill - USER2 <pid>
- 旧版本的nginx的主进程将重命名他的.pid文件为.oldbin (例如:nginx.pid.oldbin),
- 然后执行新版本的Nginx可执行程序,依次启动新的主进程和新的工作进程。
- 此时,新、旧版本的nginx实例会同时进行,共同处理输入请求,要逐步停止旧版本的nginx实例
- 你必须发送WINCH 信号给旧的主进程,然后,他的工作流程就将开始从容关闭。
- kill -WINCH <旧版本nginx pid>
- 一段时间后,旧的工作进程处理了所有已连接的请求后退出,仅由新的工作进程来处理输入的请求了。
- 如果在新旧进程同时存在时,你不想升级了,则可以Kill -QUIT 或者 kill - TERM 新的主进程号。
- 在新的主进程退出后,旧的主进程会移除.oldbin前缀,恢复为他的.pid文件,一切恢复如初。
- nginx常用配置参数解析
- # 使用的用户和组
- user www www;
- # 指定工作衍生进程数(一般等于CPU的总核数或总核数的两倍,例如两个四核CPU,则总核数为8)
- worker_processes 8;
- # 指定错误日志存放的路径,错误日志记录级别可选项为:[ debug | info | notice | warn | error | crit ]
- error_log /data1/logs/nginx_error.log crit;
- # 指定 pid 存放的路径
- pid /usr/local/webserver/nginx/nginx.pid;
- # 指定文件描述符数量
- worker_rlimit_nofile 51200;
- # 使用的网络I/O模型,Linux系统推荐采用epoll模型,FreeBSD系统推荐采用kqueue模型
- use epoll;
- # 允许的连接数
- worker_connections 51200;
- # 设置使用的字符集,如果一个网站有多种字符集,请不要随便设置,应让程序员在HTML代码中通过Meta标签设置
- #charset gb2312;
- # 设置客户端能够上传的文件大小
- client_max_body_size 8m;
- # 开启gzip压缩
- gzip on;
- #log_format 设置日志记录格式
- $remote_addr $http_x_forwarded_for 用户记录IP地址
- $remote_user记录远程客户端用户名称
- $time_local用户记录访问时间与时区
- $request用于记录请求URL与HTTP协议
- $status记录请求状态,例如200,404
- $body_bytes_sent记录发送给客户端的文件主题内容大小
- $http_referer记录从哪个页面链接访问过来的
- $http_user_agent 记录客户端浏览器相关信息
- #access_log 设置访问日志格式
- #在nginx0.7.4之后的版本中,access_log 指定中的日志文件路径可以包含变量,如:access_log /var/log/$server_name.log
- 如果日志文件路径中包含变量,则有以下一些限制
- 1.nginx进程设置的用户和组必须对该路径有创建文件的权限
- 2.缓冲将不会被使用
- 3.对于每一条日志记录,日志文件都将先打开文件,再写入日志记录,然后马上关闭。为了提高包含变量的日志文件存放路径的性能,须使用open_log_file_cache指令设置经常被使用的日志文件描述符缓存。此选项默认是禁止的。
- #nginx自动列目录配置
- autoindex on;
- nginx服务器优化内核参数
- vim /etc/sysctl.conf
- vi /etc/sysctl.conf
- 在末尾增加以下内容:
- # Add
- net.ipv4.tcp_max_syn_backlog = 65536
- net.core.netdev_max_backlog = 32768
- net.core.somaxconn = 32768
- net.core.wmem_default = 8388608
- net.core.rmem_default = 8388608
- net.core.rmem_max = 16777216
- net.core.wmem_max = 16777216
- net.ipv4.tcp_timestamps = 0
- net.ipv4.tcp_synack_retries = 2
- net.ipv4.tcp_syn_retries = 2
- net.ipv4.tcp_tw_recycle = 1
- #net.ipv4.tcp_tw_len = 1
- net.ipv4.tcp_tw_reuse = 1
- net.ipv4.tcp_mem = 94500000 915000000 927000000
- net.ipv4.tcp_max_orphans = 3276800
- #net.ipv4.tcp_fin_timeout = 30
- #net.ipv4.tcp_keepalive_time = 120
- net.ipv4.ip_local_port_range = 1024 65535
- 使配置立即生效:
- /sbin/sysctl -p
转载于:https://blog.51cto.com/wangmukun/1047090