Nginx配置文件

nginx配置详解 server_configuration_snippet nginx基本配置_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进程。