nginx 配置介绍(一)

全局配置置与顶层配置块

nginx.conf从整体上讲分全局配置main, 顶层配置块及子配置块放在配置文件中,不用{}括起来的部分是全局配置,第一层用{}括起来的是顶层配置块,在顶层配置块中,再用{}括起来的是子配置块顶层配置块目前有http event stream。

main 全局配置

全局配置是Nginx在运行时与具体业务功能(如HTTP服务或者E-mail服务代理)无关的一些参数,如工作进程数、运行的身份等全局配置在配置文件最外层

1.工作进程数

语法:worker_processes number I auto;

默认worker_process 1;

配置块 全局

说明:在配置文件的全局main 部分,管理进程接收任务并将请求分配给作进程处理,工作进程是实际的处理进程工作进程的个数可以设置为CPU 的核数(grep ^processor/proc/cpuinfoIwe -1),也可以是auto值,如果开启了ss l gzip 更应该设置成与逻辑CPU数量一样甚至为2 倍,可以减少I/ O 操作如果Nginx服务器还有其他服务,可以考虑适当减少

2.绑定工作进程到指定的CPU 内核

语法worker cpu affinity cpumask[ cpumask .. ·]

默认

配置块:全局

说明:如果CPU 非常繁忙,不一定会把每一个工作进程分配到个核心上,通过本指令手工指定会得到真正的并发(仅对Linux有效)例如:

worker_processes 4;

worker_cpu_affinity 1000 0100 0010 0001;

3.工作进程最大打开文件数

语法:worker rlimit nofile number;

认:

置块 全局

说明: 改变作进程最大文件数,修改配置无须重启管理进程

4. 工作进程的当前工作路径

语法worker_directory directory;

认:

置块 全局

说明: 当前作进作路径,主要用于生成coredump 文件, 作进程所

组需要对工作目录有写权限

5. 工作进程优先级

语法:worker_priority number;

认:worker_priority O;

块: 全局

说明: 作进的优先级,取值范围为-20 20

6. coredump 文件最大尺寸

语法worker rlimit core size;

认:

置块全局

说明:定义工作进cored ump 文件尺寸,改动无须重启管理进程

7 . 是否以守护进程方式运行Nginx

语法:daemon onloff;

认:daemon on ;

配置块 全局

说明:指明是否以守护进程方式运行Nginx ,默认为打开

8. 是否以master_process 方式工作

语法:master_process onloff;

默认:master process on;

配置块:全局

说明:指明工作进程是否马上启动,主要用于Nginx 深度开发使用,不是常规配置功能项

9. error 日志设置

语法:error log /path/file level;

默认:error_log logs/error.log err;

配置块 main http mail stream server location

说明:设置日志文件路径名,还可以设置要写入的错误级别

10. 定义环境变量

语法:env VARIVAR=Value;

配置块:全局

说明:直接设置操作系统上的环境变量例如:

env MACCOC OPTIONS;

env PERLSLIB=/data/site/modules;

env OPENSSL ALLOW PROXY CERTS=l;

11. 引用其他配置文件

语法:include / path/file;

默认

配置块: any 

说明:文件名可以是绝对路径,也可以是相对路径,如果是相对路径,就是nginx.conf所在的路径例如:

include mime.types;

include /usr/local/ip_limit.conf;

12. 锁定文件

语法:lock file file;

默认lock file logs/nginx.lock;

配置块:全局

说明: Nginx 使用锁定文件accept_mutex 在多数系统上,这个锁用原子操作实现,则这个值就被忽略掉这个配置在使用lock file 机制的系统上使用

13 . 设置pid 文件路径

语法pid path/file;

默认:pid logs/nginx.pid;

配置块 main

说明:设保存管理进程ID 的文件,用于使用进程ID 操作Nginx 的环境

14. 设置工作进程运行时的用户及用户组

语法:user username[groupn ne];

默认:user nobody;

配置块: main

说明:指定作进程作时的用户和用户组,主要在Linux UNIX 上使用

15. SSL 硬件加速

语法ssl一engine device;

说明:如果服务器上有SSL 硬件加速设备,可以通过配置实现硬件加速可以使用Open SSL 令查看是否有硬件设备:openssl engine  -t;

16. 工作进程中多线程读和写的线程池

语法thread_pool name threads=number [max_queue=number];

默认:thread pool default threads=32 max queue=65535;

配置块: main

说明:这条指令从1.7.1 l 版本出现,定义工作进程中对文件读和写时用到的线程threads 参数定义线程池中线程的数max_queue 限制允许在队列中等待的任务,默65 536 个任队列超出时,任务将返回个错误信息

17. 工作进程时间频率

语法:timer resolution interval;

默认

配置块 main

说明:早期的Linux 中, gettimeofday 是一个系统调用,需要进行次核心态和用户态的切换,所以需要限制现在的内核中,gettimeofday 是一次vsysc all 是对共享内存中的数据做访问,代价不大,所以目前通常不需要考虑这个问题

events 配置块

events 模块中包含Nginx 中所有处理连接的设events Nginx 使用到的I/O 事件模型,是最主要的进出交互部分Nginx 强大的部分就是在Linux 上完美实现了e poll 模型这里定义events 模型选择和参数

常用配置项如下

events{
    use epoll;
    worker connections 20000;
}

1. 设置事件模型

语法:use method;

默认 

配置块: events

说明: method 取值为[ kqueue I rtsig I epoll I /dev/poll I select I poll ]; 指令用于确定使用的事件模型, 般在Linux 下用epoll 如果不设置本值, Nginx 会自动确定件模型

( 1 )标准事件模型

select poll 属于标准事件模型,如果当前系统不存在更有效的方法, Nginx 会选择select poll

( 2 )高效事件模型

kqueue :用于FreeBSD 4 .1+ OpenBSD 2.9 NetBSD 2 . 0 Mac OS X 使用双处理器的Mac OS X 系统使用kqueue 可能会造成内核崩溃

epoll :用于Linux 内核2.6 版本及以后的系统

/dev / poll :用于Solaris 7 11199 HPJX 11.22+ (eventport)、IRIX 6.5.15 +和Tru64 UNIX5.lA+

eventport :用于Solaris 10 为了防止出现内核崩溃的问题,有必要安装安全补丁程序

查看linux 版本号可以使用cat /proc/version 命令

2. 每个工作进程的最大连接数

语法:worker connections number;

默认:worker connections 512;

配置块: event

说明:写在events 部分,指每一个工作进程能并发处理(发起)的最大连接数(包含与客户端或后端被代理服务器间等所有连接数) Nginx 作为反向代理服务器时,计算公式为最大连接数= worker _processes °¡ worker_ connections/4 ,所以这里客户端最大连接数1024 ,这个可以增大到8192 看情况而定,但不能超过worker_rlimit_ nofile Nginx 作为http 服务器时,以上计算公式里面改为除以2

3. 工作进程并发接收

语法:multi_accept onioff;

默认:multi_accept off;

配置块: events

说明:如果multi_accept 是禁用的, 一个工作进程同一时刻只能接收一个新的连接,否则,可以在同一时刻接收所有的连接当类型是kqueue 时,这个配置指令会被自动忽略

4. AIO 最大输出数

语法:worker_aio_requests number;

默认:worker aio request 32;

配置块: event s

说明:当在epoll 连接处理方法使用AIO 时,设置单作进程AIO 输出的最大数

HTTP服务器配置块

HTTP 模块是Nginx 重要的模块,顾名思义 这是处理HTTP 请求的模块HTTP 模块中般使用HTTP 全局配置参数控制整体行为,使用server 虚拟主机,包含监地址、文档路径和各location 反向代理、负载均衡都是在内部ser v er 等模块实现的同时在各个子配置块或location 内部划分了许多阶段( phase ),这些阶段可以注册Lua 代码或Lua 文件,干预处理的过程个典型Web 务器会含全局配置多个serve r 块和多个l oca tion

http{
    gzip on;
    upstream{
       …
    }
     …
    server{
        listen localhost:80;
            …
        location /webstatic {
            if ... {
                …
            }
            root /opt/webresource;
            …
        }
        location ~* . (jpg Jjpeg I png I jpe I gif) $ {
            …
        }
    }
    server{
       …
    }
}

Nginx Web 服务器提供了很多配置项, 这些配置项有的可以出现在任意一个配置块中, 有的只能在特定的块中, 这点在查看配置项描述时需要注意下。

1.监听端口

语法:listen address[ :port] [default_server] [ssl] [http2 I spdy] [proxy_protocol]
[ setfib=number] [ fastopen=number] [ backlog=number] [ rcvbuf=size] [ sndbuf=size]
[ accept_filter=filter] [deferred] [bind] [ ipv6only=on I off] [reuseport] [ so_keepalive
=on I off I [ keepidle]: [ keepintvl]: [ keepcnt]];
listen port [default_server] [ssl] [http2 I spdy] [proxy_protocol] [setfib=number]
[fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter]
[deferred] [bind] [ ipv6only=on I off] [reuseport] [ so_keepalive=on I off I [keepidle]: [kee
pintvl] : [ keepcnt] ] ;
listen unix:path [default_server] [ssl] [http2 I spdy] [proxy_protocol]
[backlog=number] [rcvbuf=size ] [sndbuf=size] [accept_filter=filter] [deferred] [bind]
[so_ keepalive=on I off I [ keepidle]: [ keepintvl] : [ keepcnt]];

默认:listen *:80 I *:8000;

配置块: server

说明: listen 参数决定Ng inx 如何监听端口listen 后面可以只加IP 、端口或主机名,非常灵活例如:

listen 127.0.0.1:8000;
listen 127.0 .0.1;
listen 8000;
listen *:8000;
listen localhost:8000;

如果使用IPv6 ,那么可以这样使用:

listen [::]:8000;
listen [ : : l] ;

还可以加其他参数:

listen 127.0.0.1 default_server accept_filter=dataready backlog=1024;

主要参数的意义如下:

default :将所在的server 块作为整个Web 服务的默认server 如果没有设置这个参数,将以找到的第server 块为默认server

default server :同default

backlog=num :表示TCP backlog 队列大小,默认为一1 ,表示不设TCP 次握手过程中,进程还没有开始处理监听句柄, backlog 队列就会放置这些新连接如果队列已满,新的客户尝试连接,则会失败

rcvbuf=s ize 设置s o rcvbuf 接收缓冲区大

sndbuf=size :设置so sndbuf 发送缓冲区大小

accept_ filter :设accept 过滤器,只对FreeBSD 操作系统有用

deferred 设置本参数后,客户端建立连接,并且完成了次握手,也不会调度工作进程来处理,直到客户端实际请求数据到来才分配工作进程处理,适用于大并发情况下减轻作进程负担

• bind :绑定当前ip/port 对, 只有在一个端口监听多个地址时才会生效

ssl 在当前监听的端口上建立的连接必须使用SSL

2. 主机名称

语法:server name name[ ... ];

默认:server name "”;

配置块: server

说明: server name 后可以跟多个主机名称例如:server_name www.google.com mail.google.com;

3. location

语法:location[= I~I~* I^~I@] /uri/ { ... }

配置块: server

说明: location 尝试根据用户请求中的URI 匹配上面的/uri 表达式,如果匹配,就选择

location 中的配置处理用户请求匹配的方式有很多种,下面介绍匹配规则

1 ) =表示把URI 作为字符串,以便与参数中的uri 完全匹配例如:

location =  {

# 只有当用户请求,才会作用本location 下的配置

…

}

2~表示匹配URI 时是大小写敏感的

3)  ~*表示匹配URI 是大写不敏感的

4~表示匹配时只需要前半部分与URI 匹配即例如:

Location ^~/image/{

# 以/ image / 开始的请求都会匹配上

…

}

5 )@表示仅用于Nginx 服务内部请求之间重定向,又名命名location (named location 可以在URI 中使用正则表达式,例如:

Location ~* \.(gif | jpg| jpeg)${

# 匹配以.gif 、. jpg 、. jpeg 结尾的请求

}

location 是有顺序的,当一个请求可以匹配多个location 时只会被第一个匹配的location 处location 的匹配只能表达如果匹配, …… 果需要匹配果不匹配,则……较难实现在最后一个/ location 前面都没有匹配上,则 处理

4 设置root 路径

语法:root path

认:html

配置块 http server location if

例如,定义资源文件相对于HTTP 请求的根目录

location /download/{

    root /opt/web/html/;

}

果有URI 是/download / index /test.html ,那么Web 务器会返回服务器上/opt/web/html /download/ index / test.html 件的内

5. 以别名方式设置资源路径

语法:alias path;

配置块 location

明: alias 来设置文资源的, root 点在于如何解location 后面的uri 参数, alia s root 同的方式将用户请映射到真正磁盘文件上例如,有个请求URI 是/conf/ nging.co 实际文在/usr/ local /nginx/conf/ nginx.conf ,那么可使用下方式设置 

location /conf {

    alias /usr/local / nginx/conf/;

}

果用root 设置,则

location /conf {

    root  /usr/local/nginx

}

alias 后面表达式,例如:

location ~^ / test/(\w+)\.(\w+)${

    alias /usr/local/nginx/$2/$1.$2;

}

在请求/test/ nging.conf 时, 会返usr/ local/nginx/ conf/nginx.conf 文件的内root 和alias 配置块不 root 使用更广

6. 首页

语法:index file ... ;

默认:index index.html;

配置块: http server location

说明:如果访站点的URI 是/, 般返回网站首页i nd ex 后面可以跟多个参数,Nginx 按照顺序访这些文例如

location /{

    root path;

    index /index.html /html/index.php / index.asp;

}

7 . 根据HTTP 返回码重定向页面

语法:error_page code[code ... ][=l=answer-code ]uri l @named_location

配置块 http server location if

说明 当某请求返回错误码时, 如果匹配上了error_page 中设置的页面,则重定向到新URI 例如:

error_page   404    /404.html

error_page 502 503 504  /50x.html

error_page 403   /http://example.com.forbidden.html

error_page 404  =@fetch;

虽然重定URI 但返回HTTP 错误码还是原来的值,可以使用=更改返回的错误码如:

error page 404 =200 /empty.gif;

error page 404 =403 /forbidden.gif;

果不URI ,只想重定向到location 中处理,可以这样设置

location / {

           error_page 404 @fallback;

}

location @fallback {

           proxy_pass  http://backend;

}

中, 404 请求会被反向代http ://backend 上游服务器中

8. 是否允许递归使用error_page

语法recursive_error_pages[onloff];

认:recursive error pages off;

块: http server location

说明: 是否许递归定error_page

9. try_ files

语法:try files pathl [path2] uri;

配置块 s erver location

try _fies 后要若干径,最后必须要有uri 参数,表示尝试按照顺访问

path ,如可以效地取, 就直接向用户返回这个path 对应的文件结束求,

继续向下访问都找,就定向到最后uri 上, 所以这个uri 存在,而且应该

是可有效重定向的例如:

try files /system/maintenance.html $uri $uri / index.html $uri.html @other;

location @other{

    proxy pass http://backend;

}

可以error_pag 巳配使用例如:

location  {

    try files $uri $uri/ /error.php?c=404 =404;

}

 

未完待续。。。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章