1. 闲不住的人首页
  2. 网站服务

Nginx配置文件

在上一篇 CentOS7编译安装Nginx服务 中演示了 Nginx 的安装以及安装后如何进行启动与停止 Nginx 服务。本篇主要讲解 Nginx 配置文件结构以及 Nginx 常用配置指令作用。

1. Nginx 配置文件

Nginx 主配置文件是 nginx.conf 为了增加 nginx.conf 的可读性,通常会把虚拟主机类的配置,通过 include 指令进行加载,例如:include conf.d/*.conf 这样我们就将 nginx.conf 文件所在目录同级的 conf.d 目录下所有已 .conf 结尾的文件加载进来。

配置 Nginx 文件之前我们先来了解一下 Nginx 配置指令的格式:

指令名     指令值1 [指令值2,...];
directive value1 [value2,...];
# 示例:这里 user Nginx 中的指令,它用来声明运行 Nginx worker 进程的用户,而它的值是 nobody 用户
user  nobody;

注意:Nginx 配置指令必须以『分号结尾』否则在启动 Nginx 是会提示错误!

Nginx 配置文件也支持使用变量,变量分为两种类型:

  1. 内置变量
  2. 自定义变量

自定义变量定义方法:

set variable_name value;
# set 声明变量的指令
# variable_name 变量名
# value 变量值

引用自定义变量:

$variable_name

2. nginx.conf 配置文件结构

main block	# 全局配置
events {
  ...	# 事件驱动相关配置
}
http {
	... # http协议相关配置
	server {
     	... # server块
     	
     	location {
          ... # location配置块
     	}
	}
}

2.1 全局配置参数

配置指令类别:

  1. 正常运行必备的配置;
  2. 优化性能的配置;
  3. 用于调试、定位问题的配置;

2.1.1 正常运行必备的配置

  • 1、user 指指令

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

配置格式:

Syntax:    user user [group];
Default: user nobody nobody;
Context: main

示例:

user nginx    nginx;
  • 2、pid 指令

指定 Nginx 进程 pid 文件路径;

Syntax:    pid file;
Default: pid nginx.pid;
Context: main

示例:

pid /var/run/nginx/nginx.pid;
  • 3、worker_rlimit_nofile number

指定单个 worker 进程所能够打开的最大文件数;同时取决于 ulimit -n 命令所查看的系统最大文件描述符设置;

配置格式:

Syntax:    worker_rlimit_nofile number;
Default: —
Context: main

示例:

worker_rlimit_nofile    65535;

2.1.2 性能优化相关的配置

  • 1、worker_processes number | auto;

worker 的进程数,通常应该为 CPU 的核心数减 1;通常设置为 auto

配置格式:

Syntax:    worker_processes number | auto;
Default: worker_processes 1;
Context: main

示例:

worker_processes  4;
  • 2、worker_cpu_affinity cpumask …;

为每个进程分配 CPU 的工作内核;通常设置为 auto

配置格式:

Syntax:    worker_cpu_affinity cpumask ...;
        worker_cpu_affinity auto [cpumask];
Default: —
Context: main

示例:假设当前服务是 4 核 CPU;

worker_cpu_affinity 0001 0010 0100 1000;

查看进程是否绑定至CPU上;

[root@Bj-1-141 nginx]# ps axo command,pid,psr|grep nginx|grep -v grep
nginx: master process nginx  14841   3
nginx: worker process        15407   0
nginx: worker process        15408   1
nginx: worker process        15409   2
nginx: worker process        15410   3

注意:系统上CPU编号从0开始。

  • 3、worker_priority nice;

调整nginx进程优先级;

配置格式:

Syntax:    worker_priority nice;
Default: worker_priority 0;
Context: main
# nice值范围
[-20,19]对应为100-139;

2.1.3 调试、定位问题相关配置

  • 1、daemon

是否以守护进程方式启动 Nginx 进程;默认为 on;

Syntax:    daemon on | off;
Default: daemon on;
Context: main
  • 2、master_process on | off;

是否以 master/worker 模型启动 Nginx 进程

配置格式:

Syntax:    master_process on | off;
Default: master_process on;
Context: main
  • 3、error_log file [level];

错误日志文件的记录方式,及其日志级别;

配置格式:

Syntax:    error_log file [level];
Default: error_log logs/error.log error;
Context: main, http, mail, stream, server, location

# level级别
debug, info, notice, warn, error, crit, alert

2.2 events 配置段参数

  • 1、worker_connections number;

每个 worker 进程所能够打开的最大连接数;

配置格式:

Syntax:    worker_connections number;
Default:    worker_connections 1024;
Context:    events

示例:

events {
    worker_connections  10240;
}
  • 2、use method;

指明并发连接请求处理使用的方法;

配置格式:

Syntax:    use method;
Default:    —
Context:    events

示例:

use epoll;
  • 3、accept_mutex on | off;

启用时,表示用于让多个 worker 轮流的、序列化的响应新请求;

Syntax:    accept_mutex on | off;
Default:    accept_mutex off;
Context:    events

2.3 http配置段参数

2.3.1 定义套接字相关功能

  • 1、server {…}

配置一个虚拟主机;

server {
  listen PORT;
  server_name HOSTNAME;
  root /PATH/TO/DOCUMENTROOT;
  ...
}

# 注意:
1.基于port的虚拟主机
	listen 指令要使用不同端口;
2.基于hostname的虚拟主机
	server_name 指令指向不同主机名;
3.基于IP的虚拟主机
	listen IP:PORT
  • 2、listen

指明监听的地址及端口;

配置格式:

listen address[:port] [default_server] [ssl]  [backlog=number] [rcvbuf=size] [sndbuf=size]
listen port [default_server] [ssl]

default_server:默认虚拟主机;
ssl:限制只能通过ssl连接提供服务;
backlog:后援队列的长度,最多允许多少个网络连接同时挂起;
rcvbuf:接收缓存区大小
sndbuf:发送缓冲区大小;
  • 3、server_name name …;

指明当前server的主机名;后可根一个或多个空白字符分隔的多个主机名;

支持使用 * 任意长度任意字符;支持 ~ 起始的正则表达式模式字符串;

应用策略:

  1. 首先精确匹配;
  2. 左侧*通配符匹配
  3. 右侧*通配符匹配
  4. 正则表达式模式匹配

配置格式:

Syntax:    server_name name ...;
Default:    server_name "";
Context:    server

示例:

server_name www.xbzdr.com;
server_name *.opsbj.com;
server_name www.opsbj.*;
server_name ~^.*\.opsbj\..*$;
  • 4、tcp_nodelay on|off

对 keepalived 模式下的连接是否启用 TCP_NODELAY 选项;

在这之前,我们先说说nagle缓存算法,有些应用程序在网络通讯的时候会发送很少的字节,比如说一个字节,那么再加TCP协议本身,实际上发的要41个字节,这样的效率是很低的。这时候nagle算法就应运而生了,它将要发送的数据存放在缓存里,当积累到一定量或一定时间,再将它们发送出去。这里 TCP_NODELAY 就是 nagle 启用与否的开关,所以下面的指令的效果就是禁用nagle算法,也即不缓存数据。

配置格式:

Syntax:    tcp_nodelay on | off;
Default:    tcp_nodelay on;
Context:    http, server, location
  • 5、sendfile on|off

是否启用sendfile机制;默认;of

2.3.2 定义路径相关配置

  • 6、root path;

设置 web 资源的路径映射;用于指明用户请求的 URL 所对应的本地文件系统上的文档所在目录路径;

配置格式:

Syntax:    root path;
Default:    root html;
Context:    http, server, location, if in location

示例:

location / {
    root   /data/site/;
    index  index.html index.htm;
}
  • 7、location

根据用户请求的 uri 来匹配定义的 location,匹配到时,此请求被相应的 location块中的指令所处理;

配置格式:

Syntax:    location [ = | ~ | ~* | ^~ ] uri { ... }
        location @name { ... }
Default:    —
Context:    server, location

location 配置可以有两种配置方法

1、 前缀 + uri (字符串/正则表达式)
2、 @ + name 

location 前缀含义

=:URI精确匹配;
~:做正则表达式模式匹配,区分字符大小写;
~*:做正则表达式模式匹配,不区分字符大小写;
^~:URI的左半部分做匹配检测,不区分字符大小写;
# 匹配优先级:=, ^~, ~, ~*
@:内部服务跳转

官方示例:

location = / {
    [ configuration A ]
}

location / {
    [ configuration B ]
}

location /documents/ {
    [ configuration C ]
}

location ^~ /images/ {
    [ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {
    [ configuration E ]
}
  • 假如请求 “www.xbzdr.com”,则会被A所匹配。
  • 请求”www.xbzdr.com/index.html”,则会被B所匹配。
  • 请求”www.xbzdr.com/documents/document.html”,则会被C匹配。
  • 请求”www.xbzdr.com/images/1.gif”,则会被D所匹配。
  • 请求”www.xbzdr.com/documents/1.jpg”,则会被E所匹配。

location 示例 2:

@,nginx内部跳转

location /img/ {
    error_page 404 @img_err;
}

location @img_err {
    # 规则
}
#以 /img/ 开头的请求,如果链接的状态为 404。则会匹配到 @img_err 这条规则上。
  • 8、alias path;

定义路径别名,文档映射的一种机制;仅能用于 location 上下文;

配置格式:

Syntax:    alias path;
Default: —
Context: location

示例1:

location /bbs/ {
    alias /web/forum/;
}

# 请求/bbs/a.jpg 实际上请求的目录为/web/forum/a.jpg

示例2:

location /bbs/ {
    root /web/forum/;
}

# 请求/bbs/a.jpg 实际上请求的目录为/web/forum/bbs/a.jpg

注意:

root指令:给定的路径对应于 location 中的 /uri/ 左侧的/;
alias指令:给定的路径对应于 location 中的 /uri/ 右侧的/;
  • 9、index file …;

设置默认主页;

配置格式:

Syntax:    index file ...;
Default: index index.html;
Context: http, server, location

示例:

index    index.html index.php;
  • 10、error_page code … [=[response]] uri;

根据用户请求的资源的http响应的状态码实现错误页重定向;

配置格式:

Syntax:    error_page code ... [=[response]] uri;
Default: —
Context: http, server, location, if in location

示例1:

error_page 404             /404.html;
error_page 500 502 503 504 /50x.html;

# 注意:/404.html 是相对于 location / {...} 中 root 指定的根目录;

示例2:

error_page 404 =200 /empty.gif;

这里的”=200″意思是当出现404错误状态时,在响应首部中换成200状态;如下图:

error_page=200示例
error_page=200示例

2.3.3 定义客户端请求的相关配置

  • 12、keepalive_timeout timeout [header_timeout];

设置保持连接的超时时长,0表示禁止长连接;默认为75s;

配置格式:

Syntax:    keepalive_timeout timeout [header_timeout];
Default: keepalive_timeout 75s;
Context: http, server, location

示例:

keepalive_timeout  30;
  • 13、keepalive_requests number;

在一次长连接上所允许请求的资源最大数量,默认为100;

配置格式:

Syntax:    keepalive_requests number;
Default: keepalive_requests 100;
Context: http, server, location

示例:

keepalive_timeout  30;
keepalive_requests 100;
  • 14、keepalive_disable none | browser …;

对哪种浏览器禁用长连接;

配置格式:

Syntax:    keepalive_disable none | browser ...;
Default: keepalive_disable msie6;
Context: http, server, location
  • 15、send_timeout time;

向客户端发送响应报文的超时时长;特别地,是指两次写操作之间的间隔时长;

配置格式:

Syntax:    send_timeout time;
Default: send_timeout 60s;
Context: http, server, location
  • 16、client_body_buffer_size size;

接受客户端请求报文的 body 部分的缓冲区大小;默认为16k,超出此大小时,其将被暂存到磁盘上;

配置格式:

Syntax:    client_body_buffer_size size;
Default: client_body_buffer_size 8k|16k;
Context: http, server, location
  • 17、client_body_temp_path path [level1 [level2 [level3]]];

设定用于存储客户端请求报文的body部分的临时存储路径及子目录结构和数量;

配置格式:

Syntax:    client_body_temp_path path [level1 [level2 [level3]]];
Default: client_body_temp_path path;
Context: http, server, location

示例:

    client_body_temp_path /var/tmp/nginx/client_temp 2 1;

2.3.4 对客户端请求进行限制的相关配置

  • 18、limit_rate rate;

限制响应给客户端的传输速率,单位时bytes/second,0表示无限制;

配置格式:

Syntax:    limit_rate rate;
Default: limit_rate 0;
Context: http, server, location, if in location

示例:限制 download 目录下的所有文件请求的速率是 20k 每秒;

location /download/ {
    limit_rate 20480;
    root /data/site/;
}
  • 19、limit_except method … {…}

限制对指定的请求方法之外的其它方法的使用客户端;

配置格式:

Syntax:    limit_except method ... { ... }
Default:    —
Context:    location

示例:

location /download/ {
    limit_rate 20480;
    limit_except GET POST {
        allow 192.168.1.0/24;
        deny all;
    }
}

# 表示除了 GET 和 POST 之外的其它方法仅允许 192.168.1.0/24 中的主机使用;

2.3.5 文件操作优化的配置

  • 20、aio on | off | threads[=poll];

是否启用 aio 功能;

配置格式:

Syntax:    aio on | off | threads[=pool];
Default: aio off;
Context: http, server, location
  • 21、directio size | off;

directio 选项可以设置为 off 或一个大小值,表示当文件大小大于等于这个值时启用 directio。

  • 22、open_file_cache off;

nginx可以缓存以下三种信息:

  1. 文件的描述符、文件大小和最近一次的修改时间;
  2. 打开的目录结构;
  3. 没有找到的文件或没有权限访问的文件的相关信息

配置格式:

Syntax:    open_file_cache off;
        open_file_cache max=N [inactive=time];
Default: open_file_cache off;
Context: http, server, location

max=N:可缓存条目的上限;达到上限后会使用LRU算法实现缓存管理;
inactive=time:缓存项的超时时长,在此处指定的时长内未被命中的缓存项即为非活动项;

示例:

open_file_cache max=1000 inactive=20s;
  • 23 open_file_cache_errors on | off;

是否缓存查找时发生错误的文件一类的信息;

  • 24、open_file_cache_min_uses number;

在 open_file_chache 指令指定的 inactive 参数指定的时长内,至少命中此处指定的次数方可不被归类到非活动项;

配置格式:

Syntax:    open_file_cache_min_uses number;
Default: open_file_cache_min_uses 1;
Context: http, server, location
  • 25、open_file_cache_valid time;

缓存项有效性的检查频率;默认是60s;

配置格式:

Syntax:    open_file_cache_valid time;
Default: open_file_cache_valid 60s;
Context: http, server, location

open_file_cache完整配置示例:

open_file_cache   max=1000 inactive=20s;
open_file_cache_valid    30s;
open_file_cache_min_uses 2;
open_file_cache_errors   on;

本篇文章仅解释了一部分常用的 Nginx 配置,有错误的地方请各位帮忙指出。谢谢

原创文章,作者:恩志,如若转载,请注明出处:https://www.xbzdr.com/268.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

在线咨询:点击这里给我发消息

邮件:510749025@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code