Nginx配置文件详解

1、全局配置(主模块)

user noboy;

#user是个主模块指令,指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行。如果是Django项目,需和uwsgi.ini的uid和gid的配置一致

worker_processes  auto;

#worker_processes是个主模块指令,指定了Nginx要开启的进程数。每个Nginx进程平均耗费10M~12M内存。建议指定和CPU的数量一致即可。

error_log  /usr/local/nginx/logs/error.log  crit;

#error_log是个主模块指令,用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少。

pid        /usr/local/nginx/logs/nginx.pid;

#pid是个主模块指令,用来指定进程pid的存储文件位置。

worker_rlimit_nofile 51200;

#worker_rlimit_nofile用于绑定worker进程和CPU, Linux内核2.4以上可用。

events
	{
    	use epoll;
    	# use是个事件模块指令,用来指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中。对于Linux系统,epoll工
    	
    	worker_connections 51200;
    	# worker_connections也是个事件模块指令,用于定义Nginx每个进程的最大连接数,默认是1024。最大客户端连接数由worker_processes和worker_connections决定,即Max_client=worker_processes*worker_connections。
在作为反向代理时,max_clients变为:max_clients = worker_processes * worker_connections/4。
进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令“ulimit -n 65536”后worker_connections的设置才能生效

    	accept_mutex on; 
    	#accept_mutex只能在events模块设置,用于防止在同一一个时刻只有一个请求的情况下,出现多个睡眠进程会被唤醒但只能有一个进程可获得请求的尴尬,如果不优化,在多进程的nginx会影响部分性能。on为防止被同时唤醒,默认为off,因此nginx刚安装完以后要进行适当的优化。
    	
    	multi_accept on;
    	#multi_accept只能在events模块设置,Nginx服务器的每个工作进程可以同时接受多个新的网络连接,但是需要在配置文件中配置,此指令默认为关闭,即默认为一个工作进程只能一次接受一个新的网络连接,打开后几个同时接受多个。
    	
	}

#events是设定Nginx的工作模式及连接数上限

2.1、http配置

http
	{
    	include       mime.types;
    	#include是个主模块指令,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度。类似于Apache中的include方法。
    	
    	default_type  application/octet-stream;
    	#default_type属于HTTP核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置PHP环境时,Nginx是不予解析的,此时,用浏览器访问PHP文件就会出现下载窗口。

    	log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    	access_log  logs/access.log  main;
    	访问日志是记录客户端即用户的具体请求内容信息,全局配置模块中的error_log是记录nginx服务器运行时的日志保存路径和记录日志的level,因此有着本质的区别,而且Nginx的错误日志一般只有一个,但是访问日志可以在不同server中定义多个,定义一个日志需要使用access_log指定日志的保存路径,使用log_format指定日志的格式

    	server_names_hash_bucket_size 128;
    	#server_names_hash_bucket_size:服务器名字的hash表大小

		proxy_headers_hash_max_size 51200; 
		#设置头部哈希表的最大值,不能小于你后端服务器设置的头部总数

		proxy_headers_hash_bucket_size 6400;
		#设置头部哈希表大小
    	
    	client_header_buffer_size 32k;
    	#client_header_buffer_size用于指定来自客户端请求头的headerbuffer大小。对于大多数请求,1K的缓冲区大小已经足够,如果自定义了消息头或有更大的Cookie,可以增加缓冲区大小。这里设置为32K
    	
    	large_client_header_buffers 4 32k;
    	#large_client_header_buffers用来指定客户端请求中较大的消息头的缓存最大数量和大小, “4”为个数,“128K”为大小,最大缓存量为4个128K
    	
    	client_max_body_size 50m;
    	#client_max_body_size用来设置允许客户端请求的最大的单个文件字节数
    	
    	autoindex on; 
    	#autoindex开启目录列表访问,合适下载服务器,默认关闭

    	keepalive_timeout 60;
    	#keepalive_timeout设置客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接
    	
    	client_header_timeout 10;
    	#client_header_timeout设置客户端请求头读取超时时间。如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误
		
		client_body_timeout 10;
		#client_body_timeout设置客户端请求主体读取超时时间。如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误,默认值是60
		
		send_timeout 10;
		#send_timeout指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接。
		
		sendfile   on;
    	#sendfile参数用于开启高效文件传输模式。将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞
    	
    	tcp_nopush on;
    	开启或者关闭nginx在FreeBSD上使用TCP_NOPUSH套接字选项, 在Linux上使用TCP_CORK套接字选项。 选项仅在使用sendfile的时候才开启。 开启此选项允许在Linux和FreeBSD 4.*上将响应头和正文的开始部分一起发送;一次性发送整个文件;防止网络阻塞

    	tcp_nodelay on;
    	#tcp_nodelay:启动TCP_NODELAY,就意味着禁用了Nagle算法,允许小包的发送。对于延时敏感型,同时数据传输量比较小的应用,开启TCP_NODELAY选项无疑是一个正确的选择。比如,对于SSH会话,用户在远程敲击键盘发出指令的速度相对于网络带宽能力来说,绝对不是在一个量级上的,所以数据传输非常少;而又要求用户的输入能够及时获得返回,有较低的延时。如果开启了Nagle算法,就很可能出现频繁的延时,导致用户体验极差。当然,你也可以选择在应用层进行buffer,比如使用java中的buffered stream,尽可能地将大包写入到内核的写缓存进行发送;vectored I/O(writev接口)也是个不错的选择

    	#FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。
		fastcgi_connect_timeout 300; # 指定连接到后端fastCGI的超时时间
		fastcgi_send_timeout 300;    # 向fastCGI请求的超时时间,这个值是指已经完成两次握手后向fastCGI传送的超时时间
		fastcgi_read_timeout 300;    # 接收fastCGI应答的超时时间,这个值已经完成两次握手后接收fastCGI应答的超时时间
		fastcgi_buffer_size 64k;    # 指定读取fastCGI应答第一部分需要用多大的缓冲区,一般第一部分应答不会超过1k,一般设置为64k
		fastcgi_buffers 4 64k;        # 指定本地需要用多少和多大的缓冲区来缓冲fastCGI的应答
		fastcgi_busy_buffers_size 128k;    # 默认值是fastcgi_buffers的两倍
		fastcgi_temp_file_write_size 128k;    # 在写入fastcgi_temp_path是用多大的数据块,默认值是fastcgi_buffers两倍

    	#gzip模块设置
		gzip on; #开启gzip压缩输出
		gzip_min_length 1k;
		#用于设置允许压缩的页面最小字节数,页面字节数从header头的content-length中获取,默认值是0,不管页面多大都进行压缩,建议设置成大于1k的字节数,小于1k可能会越压越大最小压缩文件大小
		gzip_buffers 4 16k; #表示申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果
		gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
		gzip_comp_level 2; #压缩等级
		gzip_types text/plain application/x-javascript text/css application/xml;
		#压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
		gzip_vary on;选项可让前端的缓存服务器缓存经过gzip压缩的页面,例如,用squid缓存经过nginx压缩的数据。
    	gzip_proxied   expired no-cache no-store private auth;
    	#Nginx做为反向代理的时候启用,param:off|expired|no-cache|no-sotre|private|no_last_modified|no_etag|auth|any]expample:gzip_proxied no-cache;
			#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]\.";
    	#gzip_disable:IE6对Gzip不怎么友好,不给它Gzip了

    	server_tokens off;
    	#server_tokens:当前使用的nginx可能会有未知的漏洞,如果被黑客使用将会造成无法估量的损失,但是我们可以将nginx的版本隐藏

2.2、负载均衡; 在http节点下,加入upstream(在server上面)节点。

upstream linuxidc { 
	server 10.0.6.108:7080; 
	server 10.0.0.85:8980; 
}

详细介绍清参考:https://blog.csdn.net/Lovehanxiaoyan/article/details/103163461

2.3、server(http节点下的server节点 在upstream节点下面)

http{
	server 
		{
    	listen       8080; #listen用于指定虚拟主机的服务端口
    	server_name  127.0.0.1; #用来指定IP地址或者域名,多个域名之间用空格分 开
    	index index.html index.htm index.php; #index用于设定访问的默认首页地址
		root /wwwroot/www.cszhi.com; #root指令用于指定虚拟主机的网页根目录,这个目录可以是相对路径,也可以是绝对路径
		charset gb2312; # 用于设置网页的默认编码格式
		access_log logs/www.ixdba.net.access.log main; #用来指定此虚拟主机的访问日志存放路径,最后的main用于指定访问日志的输出格式
		
    	# URL地址匹配是进行Nginx配置中最灵活的部分。 location支持正则表达式匹配,也支持条件判断匹配,用户可以通过location指令实现Nginx对动、静态网页进行过滤处理。使用location URL匹配配置还可以实现反向代理,用于实现PHP动态解析或者负载负载均衡。以下这段设置是通过location指令来对网页URL进行分析处理,所有扩展名以.gif、.jpg、.jpeg、.png、.bmp、.swf结尾的静态文件都交给nginx处理,而expires用来指定静态文件的过期时间,这里是30天。
		location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
			root /wwwroot/www.cszhi.com;
			expires 30d;
			}

    	# 当发生错误的时候能够显示一个预定义的uri
    	error_page   500 502 503 504  /50x.html;
    	}
    	
    include vhost/*.conf; # 多个server站点配置
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值