nginx配置详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx配置详解相关的知识,希望对你有一定的参考价值。

nginx的核心配置

正常运行的必备配置:

1、user username [groupname];

指定运行worker进程的用户和组

2、pid /path/to/pidfile_name;

指定nginx的pid文件路径

3、 worker_rlimit_nofile #;

指定一个worker进程所能够打开的最大文件句柄数

4、worker_rlimit_sigpending #;

设定每个用户能够发往worker进程的信号的数量


优化性能相关的配置:

1、worker_processes #;

worker进程的个数,进城数量直接影响性能,通常其数值为CPU物理核心数减1,如8核CPU,则为7

2、worker_cpu_affinity cpu_mask ...;

将nginx进程绑定在哪一颗cpu上,例如,worker_process 为6,则cpu掩码这样配置

worker_processes 6;

worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000;

3、ssl_engine device;

在存在ssl硬件加速器的服务器上,指定所使用的ssl硬件设备

4、timer_resolution #;

默认情况下,每一次内核事件的调用在返回时,都会执行一次gettimeofday() 来更新nginx缓存时钟,早期linux内核中

执行gettimeofday() 代价很大,非常消耗性能,所以如果频繁执行,对性能影响很大。这个参数表示每隔多长时间才会由gettimeofday()来更新一次缓存时钟

现在的x86-64系统上,gettimeofday()代价比较小


5、work_priority nice;

nice值的范围是-20,19,值越小优先级越高



事件相关的配置:

1、accept_mutex on | off;

是否打开nginx的负载均衡锁(默认是打开的)。nginx可能会运行多个worker进程,用户的请求是由master进程调度给worker进程的,开启这个负载均衡锁,则可以将用户请求均衡的调度到各个worker进程上,通常一个worker进程的负载打到其上限的7/8,master就尽可能不再将请求调度至此worker。但这个调度是有性能代价的。


2、lock_file /path/to/lock_file;

lock文件,如果上面accept_mutex 设置为off,则该配置无效

3、accept_mutex_delay #ns;

accept锁模式中,一个worker进程为取得accept锁的等待时长; 如果某worker进程在某次试图取得锁时失败了,至少要等待#ms才能再一次请求锁,默认是500ms


4、multi_accept {on | off};

是否允许一次性地响应多个用户请求,默认为off


5、use [epoll | rtsig | select | poll];

定义使用的事件模型,建议让nginx自动选择


6、worker_connections #;

每个worker能否并发响应的最大请求数;


用于调试nginx、定位问题: 只在调试nginx时使用

1、daemon [on | off];

是否让nginx运行于后台,默认为on,调试时可以设置为off,使得所有信息输出至控制台


2、master_process [on | off]

是否以master/worker模式运行nginx,默认为on,调试时可以设置为off,把master进程关闭,只启动一个worker方便追踪问题


3、error_log /path/to/error_log level;

错误日志文件及其级别,调试时可以使用debug级别,默认为error级别。但要求在编译时必须使用--with-debug 启动debug功能;




nginx的http功能:

必须使用虚拟主机来配置站点: 每一个虚拟主机使用一个server{}配置

server {


}


非虚拟主机的配置或公共配置,需要定义在server之外,http之内

http {

directive value;

...


server {

listen : 监听的地址和端口;

server_name: 

}

server {


}


}



1、server {}

定义一个虚拟主机,nginx仅支持使用基于主机名或ip的虚拟主机:


2、listen

listen address [:port];

listen port;

listen unix:socker_file_path; 只能本机访问,基本不会用到


default_server:  定义此server为http中默认的server,如果所有的server中没有任何一个listen使用此参数,则第一个server为默认server

rcvbuf= SIZE: 接收缓冲大小

sndbuf= SIZE:发送缓冲大小

ssl:https server:


3、server_name name;

     server_name可以跟多个主机名,名称中可以使用通配符和正则表达式(通常以~开头)

     当nginx收到用户请求时,会取出其首部的server的值,而后跟众server_name进行比较,比较方式:

      (1)先做精确匹配: www.magedu.com

      (2)左侧通配符匹配:*.magedu.com

      (3)右侧通配符匹配:www.*

      (4)正则表达式匹配: ~^.*\.magedu\.com$


4、server_name_hash_bucket_size 32|64|128

为了实现快速主机查找,nginx使用hash来保存主机名;



5、location 【= | ~ | ~* |^~】uri {...}

功能:允许根据用户请求的URI来匹配指定的各location以进行访问配置,匹配到时,将被location块中的配置所处理,比如:

http://www.magedu.com/images/logo.gif


=: 精确匹配

~:  正则表达式模式匹配,匹配时区分字符大小写

~*:正则比到达时模式匹配,匹配时忽略字符大小写

^~:URI前半部分匹配,不检查正则表达式


文件路径相关定义:

1、root path;

设置web资源路径:用于指定请求的根文档目录;可以配置在http、server或者location中,

location / {

root /www/htdocts;

}


location ^~ /images/ {

root /web;

}

http://www.magedu.com/images/b.html 访问的是/web/images下的b.html

root作用是访问任何资源都是/web/ + URI 路径下的


2、alias path

用于配置路径别名,通常只用在location中

location / {

root /www/htdocts;

}


location ^~ /images/ {

alias /web;

}

alias作用是将 /web 映射为/images,URI中的image被web替换了 


3、index file ...;

定义默认页面,可跟多个值


4、error_page code ... [=[response]] uri;

当对于某个请求返回错误时,如果匹配上error_page指令中设定的code,则重定向到指定页面


5、try_files path1 [path2...] uri;

当访问的文件不存在时,让用户访问指定的路径上的文件,改文件一定要存在,例如:

  location /documents/ {

          root /www/htdocs; ###root一定要配置

          try_files $uri /temp.html;

        }


        当用户访问http://wwww.magedu.com/document/test.html时,如果/www/htdocs/documents 路径下有test.html文件则能正常访问,如果文件不存在,则让用户访问/documents/temp.html文件


网络连接相关的设置:

1、keepalive_timeout time;

保持连接的超时时长,默认为75s


2、keepalive_requests n;

在一次长连接上允许承载的最大请求数


3、keepalive_disable  [msie6 | safari | none]

对指定的浏览器禁止使用长连接



4、tcp_nodelay on | off

对keepalive连接是否使用TCP_NODELAY选项,默认为on


5、client_header_timeout time;

读取http请求首部的超时时长, 服务器接收用户请求后,如果用户在一段时间内迟迟不发送数据,则认为超时. 默认都是60s


6、client_body_timeout time;

读取http请求包体的超时时长,默认60s


7、send_timeout time;

发送响应的超时时长,服务器将用户请求的数据发给客户端,在规定时间内得不到确认则认为超时,



对客户端请求的限制:

1、limit_except mothed

只允许用户通过制定的方法来访问web服务,如GET,POST等

2、client_max_body_size SIZE;

http情报包体的最大值,常用于限定客户端所能够请求的最大包体,根据请求首部中的Content-Length来检测,以避免无用的传输:


3、limit_rate speed;

限制客户端每秒传输的字节数,默认为0,表示不限制


4、


以上是关于nginx配置详解的主要内容,如果未能解决你的问题,请参考以下文章

nginx配置文件详解

Nginx 核心配置详解

Nginx配置文件详解

nginx配置文件详解

Nginx详解

Nginx配置文件(nginx.conf)配置详解