原文链接:http://blog.csdn.net/xyang81/article/details/51814787

Nginx的配置是以模块为单位来组织的,每一个模块包含一个或多个指令,指令是配置文件中的最小配置单元,一切配置项皆为指令。如http核心模块中的include、default_type、sendfile指令,都属于http模块。nginx所有模块中的指令见官方文档说明:http://nginx.org/en/docs/dirindex.html

注意:以下配置中的“上下文”表示指令可以配置在哪些模块中。
main:顶层配置,约束服务器的行为

1、服务器级别核心配置

指令 上下文 语法 默认值 功能描述
user main user nobody nobyd; nobody 以哪个用户权限运行工作线程
daemon main daemon yes; yes nginx是否以守护进程运行
worker_processes main worker_processes number; 1 配置工作进程数。传统的web服务器(如apache)都是同步阻塞模型,一请求一进(线)程模式,当进(线)程数增达到一定程度后,更多CPU时间浪费在线程和进程切换当中,性能急剧下降,所以负载率不高。Nginx是基于事件的非阻塞多路复用(epoll或kquene)模型,一个进程在短时间内就可以响应大量的请求。建议将该值设置<=cpu核心数量,一般高于cpu核心数量不会带来好处,反而可能会有进程切换开销的负面影响。
worker_connections events worker_connections number; 1024 并发响应能力的关键配置值,表示每个进程允许的最大同时连接数。maxConnection = work_connections * worker_processes;一般一个浏览器会同时开两条连接,如果是反向代理,nginx到后服务器的连接数量也要占用2条连接数,所以,做静态服务器,一般maxConnection = work_connections * worker_processes / 2; 做反代理服务器时maxConnection = work_connections * worker_processes / 4;
use events use epoll; 根据不同的平台,选择最高效的连接处理方法 指定处理连接请求的方法。linux内核2.6以上默认使用epoll方法,其它平台请参考:http://nginx.org/en/docs/events.html 备注:要达到超高负载下最好的网络响应能力,还有必要优化与网络相关的linux内核参数
worker_cpu_affinity main worker_cpu_affinity cpumask …; 将工作进程绑定到特定的CPU上,减少CPU在进程之间切换的开销。用二进制bit位表示进程绑定在哪个CPU内核。如8内核4进程时的设置方法:worker_cpu_affinity 00000001 00000010 00000100 10000000
worker_rlimit_nofile main worker_rlimit_core size; 受linux内核文件描述符数量限制 设置nginx最大能打开的文件描述符数量。因为Linux对每个进程所能打开的文件描述数量是有限制的,默认一般是1024个,可通过ulimit -n FILECNT或/etc/securit/limits.conf配置修改linux默认能打开的文件句柄数限制。建议值为:系统最大数量/进程数。但进程间工作量并不是平均分配的,所以可以设置在大一些。推荐值为:655350
error_log main, http, mail, stream, server, location error_log 日志文件路径 日志级别; error_log logs/error.log error; 配置错误日志文件的路径和日志级别。日志级别有debug, info, notice, warn, error, crit, alert和emerg几种。nginx的日志使用syslog输出,所以输出的日志格式是有规律的,系统运维人员可以根据日志规则进行查错或统计分析。更多说明请参考官方文档:http://nginx.org/en/docs/ngx_core_module.html#error_log
pid main pid 守护进程socket文件路径; pid logs/nginx.pid 配置nginx守护进程ID存储文件路径(不是工作进程)

以上是nginx的顶层配置,管理服务器级别的行为。更多配置请参考官方文档:http://nginx.org/en/docs/ngx_core_module.html#working_directory

2、HTTP模块核心配置

nginx做为一个HTTP反向代理服务器,平时接触得最多的应该是针对http请求的相关配置了,和http模块有关的所有配置都放在http { ... }配置中。

指令 上下文 语法 功能描述
types http, server, location types { mime类型 文件后缀;}; 配置能处理的文件类型。如:text/html html htm shtml;
include any include 文件路径; 将外部文件的内容做为配置拷贝到nginx.conf文件中。如:include mime.type; 将当前目录下的mime.type配置文件拷贝到nginx配置文件中。文件路径可以是相对路径或绝对路径。文件名可以用*来表示通配符。
default_type http, server, location default_type mime类型; 文件名到后缀的映射关系。配置默认的mime类型,当在types指令中找不到请求的文件类型时,就使用default_type指定的类型。默认为text/plain类型。
access_log http, server, location, if in location, limit_except access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;
关闭或开启访问日志。默认配置为:access_log logs/access.log combined; 表示根据combined定义的日志格式,写入logs/access.log文件中,combined是http模块默认格式。如果定义了buffer和gzip其中一个参数,日志默认会先写入缓存中,当缓存满了之后,通过gzip压缩缓存中的日志并写入文件,启用了gzip压缩必须保证nginx安装的时候添加了gzip模块。缓存大小默认为64K。可以配置gzip的1~9的压缩级别,级别越高压缩效率越大,日志文件占用的空间越小,但要求系统性能也越高。默认值是1。http://nginx.org/en/docs/http/ngx_http_log_module.html#access_log
log_format http log_format 格式名称 日志格式; 定义http访问日志的格式,在日志格式中可以访问http模块的内嵌变量,如果变存在的话,会做为日志输出。如: remoteaddr, remote_addr,request等,更多变量请参考:http://nginx.org/en/docs/http/ngx_http_core_module.html#variables
sendfile http, server, location, if in location sendfile on | off; 启用内核复制模式。作为静态服务器可以提高最大的IO访问速度。传统的文件读写采用read和write方式,流程为:硬盘 >> kernel buffer >> user buffer>> kernel socket buffer >>协议栈,采用sendfile文件读写的流程为:硬盘 >> kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈,很明显sendfile这个系统调用减少了内核到用户模式之间的切换和数据拷贝次数,直接从内核缓存的数据拷贝到协议栈,提高了很大的效率。这篇文章介绍比较详细:http://xiaorui.cc/?p=1673
tcp_nodelay http, server, location off|on;
tcp_nopush http, server, location off|on; tcp_nodelay和tcp_nopush这两个参数是配合使用的,启动这两项配置,会在数据包达到一定大小后再发送数据。这样会减少网络通信次数,降低阻塞概率,但也会影响响应及时性。比较适合于文件下载这类的大数据通信场景。
keepalive_timeout http, server, location keepalive_time 65; 客户端到服务器建立连接的超时时长,超过指定的时间服务器就会断开连接。默认为75秒。降低每个连接的alive时间可在一定程度上提高可响应连接数量,所以一般可适当降低此值
gzip http, server, location, if in location gzip on | off; 开启内容压缩,可以有效降低客户端的访问流量和网络带宽
gzip_min_length http, server, location gzip_min_length length; 单位为k,默认为20k。内容超过最少长度后才开启压缩,因为太短的内容压缩效果不佳,且压缩过程还会浪费系统资源。这个压缩长度会作为http响应头Content-Length字段返回给客户端。 建议值:1000
gzip_comp_level http, server, location gzip_comp_level 1~9; 压缩级别,默认值为1。范围为1~9级,压缩级别越高压缩率越高,但对系统性能要求越高。建议值:4
gzip_types http, server, location gzip_types mime-type …; 压缩内容类型,默认为text/html;。只压缩html文本,一般我们都会压缩js、css、json之类的,可以把这些常见的文本数据都配上。如:text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
open_file_cache http, server, location open_file_cache off; open_file_cache max=N [inactive=time]; 默认值为off; 设置最大缓存数量,及缓存文件未使用的存活期。建议值:max=655350(和worker_rlimit_nofile参数一致) inactive=20s;
open_file_
cache_min_uses
http, server, location open_file_cache_min_uses number; 默认为1,有效期内文件最少使有的次数。建议值:2
open_file
_cache_valid
http, server, location open_file_cache_valid time; 默认为60s,验证缓存有效期时间间隔。 表示每隔60s检查一下缓存的文件当中,有哪些文件在20s以内没有使用超过2次的,就从缓存中删除。采用lru算法。
server server { … } http HTTP服务器的核心配置,用于配置HTTP服务器的虚拟主机,可以配置多个
listen listen ip[:端口] server 配置虚拟主机监听的IP地址和端口,默认监听本机IP地址和80或8000端口。如果只设置了IP没设端口,默认使用80端口。如果只设置了端口,没设置IP默认使用本机IP。详细配置请参考:http://nginx.org/en/docs/http/ngx_http_core_module.html#listen
server_name server_name domain_name …; server 配置虚拟主机的域名,可以指定多个,用空格分隔。默认为空
charset http, server, location, if in location charset charset | off; 设置请求编码,和url参数乱码问题有关。
location server, location location [ = | ~ | ~* | ^~ ] uri { … }
location @name { … }
http请求中的一个重要配置项,用于配置客户端请求服务器url地址的匹配规则。可以配置多个匹配规则

3、核心配置优化


# nginx不同于apache服务器,当进行了大量优化设置后会魔术般的明显性能提升效果
# nginx在安装完成后,大部分参数就已经是最优化了,我们需要管理的东西并不多#user  nobody;#阻塞和非阻塞网络模型:
#同步阻塞模型,一请求一进(线)程,当进(线)程增加到一定程度后
#更多CPU时间浪费到切换一,性能急剧下降,所以负载率不高
#Nginx基于事件的非阻塞多路复用(epoll或kquene)模型
#一个进程在短时间内可以响应大量的请求
#建议值 <= cpu核心数量,一般高于cpu数量不会带好处,也许还有进程切换开销的负面影响
worker_processes 4;#将work process绑定到特定cpu上,避免进程在cpu间切换的开销
worker_cpu_affinity 0001 0010 0100 1000
#8内核4进程时的设置方法 worker_cpu_affinity 00000001 00000010 00000100 10000000# 每进程最大可打开文件描述符数量(linux上文件描述符比较广义,网络端口、设备、磁盘文件都是)
# 文件描述符用完了,新的连接会被拒绝,产生502类错误
# linux最大可打开文件数可通过ulimit -n FILECNT或 /etc/security/limits.conf配置
# 理论值 系统最大数量 / 进程数。但进程间工作量并不是平均分配的,所以可以设置的大一些
worker_rlimit_nofile 65535; #error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;events {# 并发响应能力的关键配置值# 每个进程允许的最大同时连接数,work_connectins * worker_processes = maxConnection;# 要注意maxConnections不等同于可响应的用户数量,# 因为一般一个浏览器会同时开两条连接,如果反向代理,nginx到后端服务器的连接也要占用连接数# 所以,做静态服务器时,一般 maxClient = work_connectins * worker_processes / 2# 做反向代理服务器时 maxClient = work_connectins * worker_processes / 4# 这个值理论上越大越好,但最多可承受多少请求与配件和网络相关,也可最大可打开文件,最大可用sockets数量(约64K)有关worker_connections  65535;# 指明使用epoll 或 kquene (*BSD)use epoll;# 备注:要达到超高负载下最好的网络响应能力,还有必要优化与网络相关的linux内核参数
}http {include       mime.types;default_type  application/octet-stream;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';# 关闭此项可减少IO开销,但也无法记录访问信息,不利用业务分析,一般运维情况不建议使用access_log off# 只记录更为严重的错误日志,可减少IO压力error_log logs/error.log crit;#access_log  logs/access.log  main;# 启用内核复制模式,应该保持开启达到最快IO效率sendfile        on;# 简单说,启动如下两项配置,会在数据包达到一定大小后再发送数据# 这样会减少网络通信次数,降低阻塞概率,但也会影响响应及时性# 比较适合于文件下载这类的大数据包通信场景#tcp_nopush     on; 在 #tcp_nodelay on|off on禁用Nagle算法 #keepalive_timeout  0;# HTTP1.1支持持久连接alive# 降低每个连接的alive时间可在一定程度上提高可响应连接数量,所以一般可适当降低此值keepalive_timeout  30s;# 启动内容压缩,有效降低网络流量gzip on;    # 过短的内容压缩效果不佳,压缩过程还会浪费系统资源gzip_min_length 1000;# 可选值1~9,压缩级别越高压缩率越高,但对系统性能要求越高gzip_comp_level 4;# 压缩的内容类别gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;# 静态文件缓存# 最大缓存数量,文件未使用存活期open_file_cache max=65535 inactive=20s;# 验证缓存有效期时间间隔open_file_cache_valid 30s;# 有效期内文件最少使用次数open_file_cache_min_uses 2;server {listen       80;server_name  localhost;charset utf-8;#access_log  logs/host.access.log  main;location / {root   html;index  index.html index.htm;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}...}...}

Nginx核心配置深入理解及优化相关推荐

  1. Nginx—核心配置location匹配规则说明

    2019独角兽企业重金招聘Python工程师标准>>> location介绍 location指令是Nginx中最核心的一项配置,根据预先定义的URL匹配规则来接收用户发送的请求,根 ...

  2. nginx 注释配置及详解

    前言 DMZ(Demilitarized Zone) 非军事区,生产环境 WEB 服务部署的区域,公司的架构为一台nginx 充当 load balance 服务,负载到两台 nginx 上面,反向代 ...

  3. 《深入理解Nginx》阅读与实践(一):Nginx安装配置与HelloWorld

    最近在读陶辉的<深入理解Nginx:模块开发与架构解析>,一是想跟着大牛练练阅读和编写开源代码的能力,二是想学学Nginx优秀的架构设计,三是想找一个点深入下Linux下网络编程的细节.侯 ...

  4. Nginx配置详情-配置说明-参数优化(一)

    前言:Nginx?为什么选择Nginx?还不用Nginx你就out了.Nginx相比Apache拥有更块.高扩展性.高可用性.低内存消耗.单机支持10万以上并发等等.后面将分为几篇文章来简单介绍Ngi ...

  5. Nginx在windows上安装 及 Nginx的配置及优化

    前言 Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru 站 ...

  6. 玩转Nginx服务器,怎能不懂Nginx的配置和优化?

    全文内容总览 1 Nginx基本配置 Nginx的配置文件默认在Nginx程序安装目录的conf目录下,主配置文件为nginx.conf,假设你的Nginx安装在/usr/local/webserve ...

  7. 关于Nginx:Nginx在windows上安装及Nginx的配置和优化

    前言 Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru 站 ...

  8. Nginx 核心模块与配置实践丨Nginx模版开发丨C++后端开发

    Nginx 核心模块与配置实践 概要: Nginx 简介 Nginx 架构说明 Nginx 基础配置与使用 1. Nginx 简介与安装 知识点: Nginx 简介 Nginx 编译与安装 Nginx ...

  9. nginx 开启gzip 配置js_前端性能优化之缓存与GZIP

    最近疫情,着实无聊.简单总结点东西,打发时间. 这篇文章主要记录如何在tomcat或nginx中配置前端静态资源的缓存策略,力求简洁明了,不参杂其他无关配置项. 压缩 对于HTTP的压缩,是一种使用C ...

最新文章

  1. 控件的呈现方法(Rendering)的内核
  2. Flink从入门到精通100篇(二十)-跨境电商 Shopee 的实时数仓之路
  3. ITK:应用Atan图像过滤器
  4. 用户dsn保存位置‘_苹果iOS 13.6终于能保存文章阅读进度了 朋友都等秃了
  5. triplet loss后面不收敛_你的神经网络真的收敛了么?
  6. (46)System Verilog数组查找最大最小值
  7. GDKOI2018游记
  8. 更快更高更强大,这是英特尔AI助力长城修缮的新进展
  9. 大数据和人工智能将成消费金融主要驱动力
  10. Redis中的数据结构与常用命令
  11. GIS和RS数据查找下载网址整合
  12. 使用蒲公英工具箱获取设备 UDID
  13. 计算机控制中的pid是什么意思,PID 是什么意思
  14. 不要再重复造轮子了,Hutool 这款开源工具类库贼好使
  15. irq: nobody cared (try booting with the “irqpoll” option)
  16. vue 在线访问word,excel,pdf 文件以及打印
  17. 求二叉树根节点到叶节点的所有路径
  18. 基于北斗导航定位系统的设计与实现(论文+程序设计源码+数据库文件)
  19. Python游戏之Pygame——太空飞机大战(三)
  20. 北方互动:APP开发的具体流程

热门文章

  1. win 8 store app 免费中通快递查询 隐私声明
  2. php laravel微信支付
  3. [翻译] NVIDIA HugeCTR,GPU 版本参数服务器 --(10)--- 推理架构
  4. C++习题--加密通信
  5. python-下载某短视频平台视频(高清无水印)
  6. 【在工程Word文档的大量表格中自动插入图片的python程序】
  7. 车载TBOX嵌入式设备软件的性能测试
  8. 2023年智慧城市研究报告
  9. 这才是成年人最崩溃的时刻
  10. 服务器机房搬迁导致服务器无法识别raid/数据恢复全过程