Nginx核心配置深入理解及优化
来源:互联网 发布:cr2怎么转换成jpg mac 编辑:程序博客网 时间:2024/05/21 06:31
原文链接: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、服务器级别核心配置
以上是nginx的顶层配置,管理服务器级别的行为。更多配置请参考官方文档:http://nginx.org/en/docs/ngx_core_module.html#working_directory
2、HTTP模块核心配置
nginx做为一个HTTP反向代理服务器,平时接触得最多的应该是针对http请求的相关配置了,和http模块有关的所有配置都放在http { ... }
配置中。
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模块的内嵌变量,如果变存在的话,会做为日志输出。如:
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; } ... } ...}
1 0
- Nginx核心配置深入理解及优化
- Nginx核心配置深入理解及优化
- nginx配置解释及优化
- 深入理解Nginx-第2章 - Nginx的配置 - 一
- 深入理解Nginx-第2章 - Nginx的配置 - 二
- Android--Adapter深入理解及ListView优化
- 深入理解Java的线程池概念及核心方法
- nginx反向代理配置及优化
- nginx反向代理配置及优化
- nginx反向代理配置及优化
- nginx反向代理配置及优化
- nginx反向代理配置及优化
- nginx反向代理配置及优化
- Nginx 与 Tomcat 配置及优化
- nginx反向代理配置及优化
- nginx反向代理配置及优化
- nginx反向代理配置及优化
- nginx反向代理配置及优化
- I2C子系统驱动架构 - 具体实现
- struts2环境搭建
- 脚本化文档(2)
- [乱搞] BZOJ 1484 [HNOI2009]通往城堡之路
- LeetCode - 75. Sort Colors
- Nginx核心配置深入理解及优化
- Spring注解@Component、@Repository、@Service、@Controller区别
- linux下查找某个文件位置的方法
- CSS3 timing-function: steps() 详解
- codeforces_679B. Bear and Tower of Cubes(贪心+二分+dfs)
- [仙人掌DP] BZOJ 4316 小C的独立集
- Linux里如何查找文件内容
- 1014. Waiting in Line (30)
- Android 自定义View 字母索引条