1.Nginx.conf相关介绍

Nginx.conf文件是Nginx核心配置文件,很多Nginx设置,都是在这里进行定义。废话不多说,先看下Nginx.conf整体结构。
Nginx.conf文件位于conf目录下,大致分为4块,分别是main(全局设置),server(主机设置),upstream(上游设置),location(url匹配)。**
main:主要提供全局设置功能,其中的指令会影响其他模块的所有设置其中events及http就属于此模块。
server:主要是对主机进行设置,比如端口,域名设置等等。server是继承了main指令。
upstream:主要用于与后端的交互,设置反向代理等等。upstream属于独立的模块,既不会继承指令也不会被继承,有自己的特色指令。
location:主要是提供网页匹配,正则等等,任务很重的。location会继承server指令。

2.Nginx.conf参数介绍:

#全局配置
user  www www;										#指定Nginx用户,可以是www,nginx,随便,但是用户在系统的存在即可
worker_processes 8;				#工程进程数,根据cpu核数来调整,有的说是1.5-2倍,适应啥场景就不知道了,拿不准的感觉可以调auto

error_log  /data/logs/nginx/nginx_error.log  warn;	#错误日志存放路劲

pid        /var/run/nginx.pid;						#设置pid,一般设置/var目录下面

worker_rlimit_nofile 65535;							#指定进程可以打开最大描述符,最好与系统的一致,
										#系统支持文件最大打开数是65535,其中ulimit -n可以进行查询,如果没有直接运行下面2条命令,永久设置
													echo "* soft nofile 65535"  >>	/etc/security/limits.conf	其中*代表所有用户
													echo "* hard nofile 65535"  >> /etc/security/limits.conf

events {											
    use epoll;										#好像是事件模型,具体是啥,我也是蒙圈的,Linux系统选择epoll即可
    worker_connections 10240;						#设置单个进程允许的客户端最大连接数。服务器最大并发量:worker_processes*worker_connections 
    multi_accept on;								#设置一个进程同时是否可以接受多个连接,默认是off(也就是一个进程同时只能接受一个连接),为on就可以同时接受所有连接(优化的)
}

http {
    include       mime.types;						#设定mime类型,有就是Nginx支持的媒体类型。
    default_type  application/octet-stream;			#设置默认媒体类型

    #charset utf8;									#设置默认字符集为utf8(wwindows的机器默认字符集是gbk,代理windows的时候优着点)

    server_tokens off;								#隐藏版本号(优化),默认是on
    
    #服务器重定向
	server_name_in_redirect off;	 				#服务器重定向,如果为on,则使用serve_name第一个值(也就是第一定义的server_name)进行重定向,为off,Nginx直接截取请求的header头部信息。(默认是开启的)
    server_names_hash_bucket_size 128;	#serve_name的hash表大小。
    client_header_buffer_size 4k;		#默认缓冲客户请求header头部大小
    large_client_header_buffers 4 4k;  #最大使用4个单位4k大小缓冲区来存储herader头部信息
    
    client_max_body_size 120m;						#设置客户端请求最大文件数,进行文件上传等业务,就得根据实际情况设置限制值
    client_body_buffer_size 120m;	#设定缓存区大小,主要是存放用户上传的数据,太小的话会频繁写进磁盘,影响性能,太大就没有多大的意义。

	#磁盘优化
	sendfile  on;					#开启高效传输模式,磁盘I/O不大的时候设置为on,下载类业务多导致磁盘I/O高的时候建议off。
    tcp_nopush on;									#防止网络阻塞,积极减少网络报文的数量,此选项仅在使用sendfile的时候使用
    					
	#fastcgi优化(为了改善网站的性能:减少资源占用,提高访问速度。)
    fastcgi_connect_timeout 300;					#设置连接到后端fastcgi的超时时间
    fastcgi_send_timeout 300;						#设置向fastcgi发送请求的超时时间(指的是已经经过2次握手向fastcgi传送请求时间)
    fastcgi_read_timeout 300;						#设置接收fastcgi应答超时时间(值的是经过2次握手之后接收fastcgi的应答时间)
    fastcgi_buffer_size 32k;						#指定将用多大的缓冲区来读取fastcgi应答的第一部分(应答头),这里是使用32kB来响应
    fastcgi_buffers 32 32k;							#设置本地将用多少及多大的缓冲区来读取fastcgi应答请求
    fastcgi_busy_buffers_size 64k;					#建议设置为fastcgi的2倍,
    fastcgi_temp_file_write_size 128k;				#设置在写入fastcgi_temp_path时将用多大的数据库,默认值是fastcgi_buffers 2倍。
	#关于fastcgi的一些相关介绍 

 	#gzip压缩模块
    gzip on;										#开启gzip压缩(此模块已内置)
    gzip_min_length  1k;							#设置压缩页面最小的字节数,默认值为0,代表页面无论大小都压缩,小于1k经过压缩反而更大。
    gzip_buffers     4 16k;							#设置压缩缓冲区大小,表示用4个16k大小内存空间处理请求压缩请求
    gzip_http_version 1.0;							#压缩版本(默认是1.1,前端为squid 2.5时用1.0),主要用来识别http协议版本,意思就是在http 1.0版本也可以其压缩功能.
    gzip_comp_level 6;								#设置压缩比率,1,压缩比最小,速度最快,9为压缩比最大,速度最慢,但是传输速度快,比较消耗cpu资源
    gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;	#压缩类型,选择默认吧
    gzip_proxied expired no-cache no-store private auth;  #在Nginx作为为反向代理的时候使用,有9个值
    											off – 关闭所有的代理结果数据压缩
												expired – 如果header中包含”Expires”头信息,启用压缩
												no-cache – 如果header中包含”Cache-Control:no-cache”头信息,启用压缩
												no-store – 如果header中包含”Cache-Control:no-store”头信息,启用压缩
												private – 如果header中包含”Cache-Control:private”头信息,启用压缩
												no_last_modified – 启用压缩,如果header中包含”Last_Modified”头信息,启用压缩
												no_etag – 启用压缩,如果header中包含“ETag”头信息,启用压缩
												auth – 启用压缩,如果header中包含“Authorization”头信息,启用压缩
												any – 无条件压缩所有结果数据
	gzip_disable "MSIE [1-6]\.";					#不对哪些数据进行压缩
	
	#设置日志格式
    log_format jflog '$remote_addr | $remote_user | $time_local | $request | $status | '
            '$bytes_sent | $body_bytes_sent | $host | $http_referer | $http_user_agent | '
            '$upstream_addr | $gzip_ratio | $http_x_forwarded_for | $request_time | $upstream_response_time';
#具体日志信息请参考 ()

	#设定静态文件缓存(优化)
    open_file_cache max=65535 inactive=20s;		#为打开文件指定缓存
    											max:指定缓存数量(最好与ulimit -n结果一致),
    											inactive:指多长时间没被请求则删除缓存信息。
    											off:禁用此功能,默认是没有开启的
    open_file_cache_valid    30s;				#多长时间检查缓存信息
    open_file_cache_min_uses 2;					#指定缓存文件在inactive设定时间内的打开次数,满足2次及以上则一直缓存,否则将被干掉。
    open_file_cache_errors   on;				#是否缓存错误信息,on为开启,yes为关闭

	#设置与后端的超时时间
    proxy_connect_timeout      300;				#设置与后端连接的超时时间(默认是60s)
    proxy_send_timeout         300;				#指定向后端写数据的超时时间(默认是60s)
    proxy_read_timeout         300;				#指定从后端读数据的超时时间(默认是60s)

	#缓冲缓存(主要用于反向代理)
    proxy_buffering on;							#是否启用缓冲缓存
    proxy_buffer_size          32k;				#设置缓冲区大小(后端回复结果的首段信息)
    proxy_buffers              128 32k;			#设置缓冲区数量跟大小,后端响应(数据)会先放到这里,
    											128是指个128单位,请求数量,32k,指每个缓冲区大小,值越大,代表可以缓冲的版内容越多。			
    proxy_busy_buffers_size    256k;			#指在忙到时候,单个缓冲区大小可以扩展到256k
    proxy_temp_file_write_size 256k;			#当响应大于此值时,Nginx直接写入临时文件
       注:缓冲缓存主要是为解决用户访问量大,频繁读取后端数据,从而大量消耗服务器性能的问题,
    	开启缓冲缓冲,用户是直接从代理服务器上获取数据,而不是直接从后端获取数据,
    	并且代理服务器首先会缓存后端发来的数据,在用户需要的时候,直接返回给用户,
    	从而达到降低代理服务器性能消耗的目的。在访问量不大的时候,用户可以直接跟后端服务器交互,对服务器性能没啥影响,建议开启。
		# 这篇博客大佬,充分的细说了客户端发起请求及响应请求的全过程,我总结的都没别人的好,还是看原篇。
	
   #开启反向代理
   upstream unix__tmp_php_cgi_sock {
        server unix:/tmp/php7-cgi.sock weight=100 max_fails=5 fail_timeout=30;				
        #server unix:/tmp/php-cgi2.sock weight=100 max_fails=5 fail_timeout=30;
        #server unix:/tmp/php-cgi3.sock weight=100 max_fails=5 fail_timeout=30;

    # 禁止未授权访问
    server {
        listen 80 default_server;
        server_name _;  #设置这个的话,意思就是后面的server配置里面直接访问域名返回403

        # 监控 nginx 状态
        location /nginx_status {
            stub_status on;
            allow 127.0.0.1;
            deny all;
        }

        location / {			#看需求(如果不给用户访问/目录的话可以禁止掉)
            return 444;
        }

        access_log off;				#看需求,有的服务是需要开启访问日志的
    }

    include vhost/*.conf;				#定义虚拟主机所在地方
}

upstream

##介绍
upsteam主要提供后端代理等功能,可以实现反向代理,负载均衡等功能。upstream主要是通过轮询的方式进行负载,根据权重,请求时间顺序按照一定的规则一一将用户请求转到后方服务,从而分担各种服务器的压力。
##组成结构
upstream 描述 {	
描述(server/www)  服务路劲(ip:端口/Unix:sock路劲) 分配策略 可选参数;
}
第一字段:我的理解是描述 可以是server /www等等
第二字段:服务路劲(可以是ip加端口/sock路劲都行)
第三字段:分配策略(weriht 权重,权重越高,负载的权重就越大;down 不参与此次负载; backup,当非backup或者down主机繁忙的时候,能请求支援,减小压力)
第四字段:就是常见参数,max_fails 发起请求失败次数,当请求失败超过当前值的时候返回proxy_next_upstream 模块定义的错误;fail_tiemout是暂停多久的意思,得根据max_fails结果来判断。
还有些其他的用法:
upstream favresin{ 
  ip_hash; 							#设置此值,代表每一请求按访问的ip的hash结果分配,就可以访问固定的后端服务器,解决session(百度有解释,我也不懂)的问题。
  server 10.0.0.10:8080; 
  server 10.0.0.11:8080; 
}

upstream favresin{      
  server 10.0.0.10:8080; 
  server 10.0.0.11:8080; 		
  fair; 							#按照服务器后端的响应时间来分配请求,响应时间越短的能优先处理客户请求。
}

upstream resinserver{ 
  server 10.0.0.10:7777; 
  server 10.0.0.11:8888; 
  hash $request_uri; 				#按照访问url的hash结果来分配请求,使每一个url都重定向到同一个后端服务器
  hash_method crc32; 				#注意:在upstream中加入hash语句。server语句中不能写入weight等其他的參数,hash_method是使用的hash算法。
}