天天看点

Nginx 配置文件详解及优化

目录:

  1. Nginx配置文件参数详解
  2. 配置文件示例

Nginx配置文件参数详解

Nginx 服务的难点在于对配置文件的理解和优化,熟练掌握 Nginx 配置文件参数的含义可以更快的掌握 Nginx,如下为 Nginx.conf 配置文件常用参数详解:

#定义 Nginx 运行的用户和用户组
user www www;

#启动进程,通常设置成和 cpu 的核数相等
worker_processes 8;

#为每个进程分配 cpu,上例中将 8 个进程分配到 8 个 cpu,当然可以写多个,或者将一个进程分配到多个 cpu。
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

#该指令是当一个 nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与 nginx 进程数相除,但是 nginx 分配请求并不是那么均匀,所以最好与 ulimit -n 的值保持一致。
worker_rlimit_nofile 102400;

#全局错误日志及 PID 文件
error_log /usr/local/nginx/logs/error.log;
#错误日志定义等级,[ debug | info | notice | warn | error | crit ] 
pid	/usr/local/nginx/nginx.pid;

#工作模式及连接数上限
events {
#epoll 是多路复用 IO(I/O Multiplexing)中的一种方式,但是仅用于 linux2.6 以上内核,可以大大提高 nginx 的性能.
use	epoll;
#单个后台 worker process 进程的最大并发链接数 (最大连接数=连接数*进程数)
worker_connections 102400;
multi_accept on;  #尽可能多的接受请求.
}

#设定 http 服务器,利用它的反向代理功能提供负载均衡支持
http {
#设定 mime 类型,类型由 mime.type 文件定义
include	mime.types;
default_type application/octet-stream; 
#设定日志格式
access_log /usr/local/nginx/log/nginx/access.log;
#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用必须设为 on
#如果用来进行下载等应用磁盘 IO 重负载应用,可设置为 off,以平衡磁盘与网络 I/O处理速度,降低系统的 uptime。
sendfile on;
#开启目录列表访问,合适下载服务器,默认关闭。
#autoindex	on;
#防止网络阻塞
tcp_nopush on;
#keepalive 超时时间,客户端到服务器端的连接持续有效时间,当出现对服务器的后继请求时,keepalive-timeout 功能可避免建立或重新建立连接。
keepalive_timeout 60;
#提高数据的实时响应性
tcp_nodelay	on;

#开启 gzip 压缩
gzip on;
gzip_min_length	1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
#压缩级别大小,最大为 9,值越小,压缩后比例越小,CPU 处理更快。值越大,消耗 CPU 比较高。推荐使用4或6级别
gzip_comp_level 2;
#gzip压缩类型
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;

#允许客户端请求的最大单文件字节数
client_max_body_size 10m;
#缓冲区代理缓冲用户端请求的最大字节数.
client_body_buffer_size 128k;

#nginx 跟后端服务器连接超时时间(代理连接超时) 
proxy_connect_timeout 90;
#后端服务器数据回传时间(代理发送超时) 
proxy_send_timeout 90;
#连接成功后,后端服务器响应时间(代理接收超时) 
proxy_read_timeout 90;

#设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffer_size 4k;
#proxy_buffers 缓冲区,网页平均在 32k 以下的话,这样设置
proxy_buffers 4 32k;
#高负荷下缓冲大小(proxy_buffers*2)
proxy_busy_buffers_size 64k;

#设定请求缓冲
large_client_header_buffers	4 4k;
#客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过 1k
#不过由于一般系统分页都要大于 1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE 取得。
client_header_buffer_size 4k;
#这个将为打开文件指定缓存,默认是没有启用的,max 指定缓存数量,建议和打开文件数一致,inactive 是指经过多长时间文件没被请求后删除缓存。
open_file_cache max=102400 inactive=20s;
#这个是指多长时间检查一次缓存的有效信息。
open_file_cache_valid 30s;
open_file_cache_min_uses 1;
#open_file_cache 指令中的 inactive 参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在 inactive

#包含其它配置文件,如自定义的虚拟主机
include vhosts.conf;
}
           

回到目录

配置文件示例

upstream www {
	server 127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=30s;
	server 127.0.0.1:8081 weight=1 max_fails=2 fail_timeout=30s;
}

#虚拟主机配置
server {
	#侦听 80 端口
	listen	80;
	#定义使用 www.jfedu.net 访问
	server_name	www.test.net;
	#设定本虚拟主机的访问日志
	access_log logs/access.log main;
	
	root /data/webapps/www;	#定义服务器的默认网站根目录位置
	index index.php index.html index.htm;	#定义首页索引文件的名称#默认请求

	location ~ /{
		root /data/webapps/www;	#定义服务器的默认网站根目录位置
		index index.php index.html index.htm;	#定义首页索引文件的名称
		#以下是一些反向代理的配置.
		proxy_next_upstream http_502 http_504 error timeout invalid_header;	#如果后端的服务器返回 502、504、执行超时等错误,自动将请求转发到	upstream 负载均衡池中的另一台服务器,实现故障转移。
		proxy_redirect off;  # proxy跳转和rewrite差不多
		#后端的 Web 服务器可以通过 X-Forwarded-For 获取用户真实 IP 
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_pass http://www;	#请求转向后端定义的均衡模块
}

	# 定义错误提示页面
	error_page 500 502 503 504 /50x.html;
	location = /50x.html {
		root html;
	}

	#配置 Nginx 动静分离,定义的静态页面直接从 Nginx 发布目录读取。
	location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {
		root /data/webapps/www;
		#expires 定义用户浏览器缓存的时间为 3 天,如果静态页面不常更新,可以设置更长,这样可以节省带宽和缓解服务器的压力,在浏览器保存该类型文件的天数。
		expires	3d;
	}

	#PHP 脚本请求全部转发到 FastCGI 处理. 使用 FastCGI 默认配置. 
	location ~ \.php$ {
		root /root;
		FastCGI_pass 127.0.0.1:9000;
		FastCGI_index index.php;
		FastCGI_param SCRIPT_FILENAME /data/webapps/www$FastCGI_script_name;
		include FastCGI_params;
	}

	#设定查看 Nginx 状态的地址
	location /NginxStatus { 
	stub_status	on;
	}
}
           

回到目录

继续阅读