Nginx配置文件
1、配置模块
- nginx的配置(conf/nginx.conf)主要有:全局参数、events、http这三大块组成。
- 系统配置:server,可以配置多个server
- 转发规则:location路径、root目录、index欢迎页面
- 反向代理规则:location拦截路径、proxy_pass转向地址、index
2、Nginx常用优化
- user root; #对应系统哪个用户,最好专为nginx创建用户和组,并单独设置权限,这样安全。如:user nginx nginx。
- worker_processes 1; #定义了nginx对外提供web服务时的worker进程数,习惯配置和当前服务器的core数(CPU内核数)相同,或者2倍。
- worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000 主要是为了让不同的进程分布到不同的cpu上运行
- worker_connections 1024; #设置可由一个worker进程同时打开的最大连接数。
- worker_rlimit_nofile 65535; #定义了一个nginx进程打开最多的文件数目,配置和Linux下文件打开个数一致。ulimit–n来查看,最大设置为65535。设置为“auto”将尝试自动检测它。
- keepalive_timeout 10; # 给客户端分配keep-alive链接超时时间,服务器将在这个超时时间过后关闭链接。我们将它设置低些可以让ngnix持续工作的时间更长。一般设置65左右。
- open_file_cache max=100000 inactive=20s; #打开缓存的同时也指定了缓存最大数目,以及缓存的时间。
- gzip on;#告诉nginx采用gzip压缩的形式发送数据,这将会减少我们发送的数据量。
- gzip_comp_level 4;#设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。通常设置为3-5,太高会占用CPU。
- events { use epoll; }#设置用于复用客户端线程的轮询方法。Linux推荐使用epoll模型。
- access_log off; #access_log 设置nginx是否将存储访问日志。关闭这个选项可以让读取磁盘IO操作更快(aka,YOLO)。
- error_log /var/log/nginx/error.log crit; #error_log 告诉nginx只能记录严重的错误,Error日志优化,运行期间设置crit,可以减少I/O。
3、配置中worker_process 默认是配置几个?在你的生产环境上是怎么配置的?为什么要这样配置?有过优化吗?
- 默认配置是1
- 在生产环境中配置的个数与CPU的核数相同
- nginx作者说worker_process开的太多会影响系统的io效率,加大主进程调度负担,降低性能,但为了充分利用CPU,设置为与CPU核数相同可以很好的并行处理任务,同时绑定worker_cpu_affinity配合使用,旨在让cpu平均分配cpu的负担。
4、在网络中有个词叫“惊群”能说下吗?在nginx中有这样的问题吗?如何避免该问题?
- 惊群是指在某一时刻只会有一个网络连接到来,这时系统会叫醒所有的睡眠进程,然而只会有一个进程获得任务,浪费了系统的资源,影响了系统的性能,nginx中也会有,在配置中设置accept_mutex=on,可以让请求连接序列化,防止多个进程抢资源。
5、Nginx某时刻只有一个连接,nginx可以同时接收多个连接吗?
- 可以,需要设置multi_accept = on
6、nginx常用命令
- 启动nginx ./sbin/nginx
- 停止nginx ./sbin/nginx -s stop ./sbin/nginx -s quit
- 重载配置 ./sbin/nginx -s reload(平滑重启) service nginx reload
- 重载指定配置文件 ./sbin/nginx -c /usr/local/nginx/conf/nginx.conf
- 查看nginx版本 ./sbin/nginx -v
- 检查配置文件是否正确 ./sbin/nginx -t
- 显示帮助信息 ./sbin/nginx -h
7、nginx请求转发(反向代理)
当用户访问 http://localhost:80,nginx 将这个请求什么也不做,只负责转发到 tomcat 的访问地址 http://localhost:8080。
server {
listen 80;
server_name localhost;
location / { #拦截所有的资源
proxy_pass http://127.0.0.1:8080; #转向tomcat的地址
}
}
8、nginx动静分离
目录:D:\images\2020\222.jpg
访问:http://www.gyl…com/images/2020/222.jpg
server {
listen 80;
server_name www.gyl.com; #域名地址
location / {
root d:\\images; #图片文件所在目录
}
}
8、nginx负载均衡
http{
....
upstream server_pool{
server 192.168.5.21;
server 192.168.5.22;
}
server {
listen 80;
server_name www.gyl.com;
location / {
proxy_pass http://server_pool
}
}
....
}
- 轮询:每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
- weight代表权重默认为1,权重越高被分配的客户端越多指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 例如:
upstream server_pool{
server 192.168.5.21 weight=10;
server 192.168.5.22 weight=10;
}
- ip_hash: 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。 例如:
upstream server_pool{
ip_hash;
server 192.168.5.21:80;
server 192.168.5.22:80;
}
- fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream server_pool{
server 192.168.5.21:80;
server 192.168.5.22:80;
fair;
}
FastCGI
- CGI: CGI(Common Gateway Interface)全称是“通用网关接口”,是一种让客户端(web浏览器)与Web服务器(nginx等)程序进行通信(数据传输)的协议。用来规范web服务器传输到php解释器中的数据类型以及数据格式
- FastCGI:Nginx本身不支持PHP等语言,但是它可以通过FastCGI来将请求扔给某些语言或框架处理
- CGI: CGI使外部程序与Web服务器之间交互成为可能。CGI程序运行在独立的进程中,并对每个Web请求建立一个进程,这种方法非常容易实现,但效率很差,难以扩展。面对大量请求,进程的大量建立和消亡使操作系统性能大大下降。此外,由于地址空间无法共享,也限制了资源重用。
- FastCGI: 与CGI程序为每个请求创建一个新的进程不同,FastCGI使用持续的进程(master)来处理一连串的请求。这些进程由FastCGI服务器管理,而不是web服务器。 当进来一个请求时,web服务器把环境变量和这个页面请求通过一个socket或者一个TCP connection传递给FastCGI进程。