【Nginx】nginx.conf文件结构与基础配置指令(上)

一. nginx.conf文件的结构

默认的Nginx服务器配置文件都存放在安装目录conf中主配置文件名为nginx.conf如下是一个配置示例

    worker_processes   1;                         #全局生效
    events {
        worker_connections  1024;                 #在events部分中生效
    }
    http {
        include      mime.types;                  #以下指令在http部分中生效
        default_type  application/octet-stream;
        sendfile       on;
        keepalive_timeout  65;
        server {                                  #以下指令在http的server部分中生效
            listen      80;
            server_name  localhost;
            location / {                          #以下指令在http/server的location中生效
                root   html;
                index  index.html index.htm;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }

nginx.conf一共由三部分组成分别为全局块、events块和http块。
 

1. 作用域

  1. 一般情况下高一级块中的指令可以作用于自身所在的块和此块包含的所有低层级块。
  2. 如果某个指令在两个不同层级的块中同时出现则采用“就近原则”即以较低层级块中的配置为准。比如某指令同时出现在http全局块中和server块中并且配置不同则应该以server块中的配置为准。

 

2. 各个块的作用

2.1. 全局块

全局块是从开始到events块之间的一部分内容主要设置一些影响Nginx服务器整体运行的配置指令这些指令的作用域是Nginx服务器全局。

通常包括配置:

  1. 运行Nginx服务器的用户组
  2. 允许生成的worker process数
  3. Nginx进程PID存放路径
  4. 日志的存放路径和类型
  5. 配置文件引入等

 

2.2. events块

events块用于配置与事件处理相关的参数主要影响Nginx服务器与用户的网络连接例如并发连接数限制、连接超时等。

典型的配置项包括

  1. 是否开启对多worker process下的网络连接进行序列化
  2. 是否允许同时接收多个网络连接
  3. 选取哪种事件驱动模型处理连接请求use指定事件驱动模型如 epoll 或 kqueue
  4. 每个worker process可以同时支持的最大连接数等

这一部分的指令对Nginx服务器的性能影响较大在实际配置中应该根据实际情况灵活调整。

 

2.3. http块

Nginx服务器的主要配置块包含了大部分HTTP服务的相关配置。代理、缓存和日志定义等都可以放在这个模块中。

在http全局块中配置的指令可以包括

  1. 文件引入
  2. MIME-Type定义
  3. 日志自定义
  4. 是否使用sendfile传输文件
  5. 连接超时时间
  6. 单连接请求数上限

 

2.4. server块

server块和“虚拟主机”的概念有密切联系。

虚拟主机的含义

虚拟主机技术主要应用于HTTP、FTP及EMAIL等多项服务将一台服务器的某项或者全部服务内容逻辑划分为多个服务单位对外表现为多个服务器从而充分利用服务器硬件资源。从用户角度来看一台虚拟主机和一台独立的硬件主机是完全一样的。

虚拟主机给nginx带来的能力

在使用Nginx服务器提供Web服务时利用虚拟主机的技术就可以避免为每一个要运行的网站提供单独的Nginx服务器也无需为每个网站对应运行一组Nginx进程即在同一台服务器上只运行一组Nginx进程就可以运行多个网站。

 

接着说server块的作用

每一个http块都可以包含多个server块而每个server块就相当于一台虚拟主机它内部可有多台主机联合提供服务一起对外提供在逻辑上关系密切的一组服务或网站。

作用域

server块的作用域只在自己的块中起作用server块之间相互独立。

常见配置

在server全局块中最常见的两个配置项是

  1. 本虚拟主机的监听端口
  2. 本虚拟主机的名称或IP配置

 

2.5. location块

location块的主要作用是

基于Nginx服务器接收到的请求路由例如 server_name/uri-string)对特定的请求进行处理。
地址定向、数据缓存和应答控制等功能都是在这部分实现。

 

二. nginx基础配置上

1. 运行Nginx服务器的用户与组

user user [group]

■ user指定可以运行Nginx服务器的用户。
■ group可选项指定可以运行Nginx服务器的用户组。

 

实践
只有被设置的用户或者用户组成员才有权限启动Nginx进程如果是其他用户test_user尝试启用Nginx进程将会报错

nginx: [emerg] getpwnam("test_user") failed (2: No such file or directory) in
/Nginx/conf/nginx.conf:2

如果希望所有用户都可以启动Nginx进程有两种办法

一是将此指令行注释掉
 #user [user] [group];

二是将用户和用户组设置为nobody
user nobody nobody;

注意

在Nginx配置文件中每一条指令配置都必须以分号结束请不要忘记。

 

2. 允许生成的worker process数

本质上是设置nginx能够处理的并发数

worker process实际上要受到来自软件本身、操作系统本身资源和能力、硬件设备如CPU和磁盘驱动器等的制约。

语法格式为

worker_processes number/auto;

■ number指定Nginx进程最多可以产生的worker process数。
■ auto设置此值Nginx进程将自动检测。

 
实践

将number改为3重启nginx可以看到Nginx服务器除了主进程master process之外还有已经三个worker process

    #ps ax | grep nginx
    8626 ?       Ss    0:00 nginx: master process ../sbin/nginx
    8627 ?       S     0:00 nginx: worker process
    8628 ?       S     0:00 nginx: worker process
    8629 ?       S     0:00 nginx: worker process

 

3. (进程)PID存放路径

Nginx进程作为系统的守护进程运行我们需要在某文件中保存当前运行程序的主进程号。
设置的语法格式为

pid file ;

file指定存放路径和文件名称。

默认将此文件存放在Nginx安装目录logs下名字为nginx.pid。

path可以是绝对路径也可以是以Nginx安装目录为根目录的相对路径。比如要把nginx.pid放置到Nginx安装目录sbin下文件名为web_nginx则可以使用以下配置

pid sbin/web_nginx

注意

在指定[path]的时候一定要包括文件名如果只设置了路径没有设置文件名则会报以下错误
nginx: [emerg] open() “/Nginx/logs/” failed (21: Is a directory)。

 

4. 错误日志的位置

在全局块、http块和server块中都可以对Nginx服务器的日志进行相关配置。

这里介绍全局块下日志的存放配置后两种情况的配置基本相同只是作用域不同。使用的指令是error_log其语法结构是

error_log file| stderr [debug | info | notice | warn | error | crit | alert | emerg];

日志可以输出到某一个文件中或者输出到标准错误输出stderr日志的级别是可选项由低到高分为debug…。
当然设置某一级别后比这一级别高的日志也会被记录。

 
例子

error_log logs/error.log error;

注意
运行Nginx进程的用户要对日志文件有写权限否则在启动Nginx进程的时候会出现以下报错信息

nginx: [alert]: could not open error log file: open() "/Nginx/logs/error.log" failed
(13: Permission denied)

此指令可以在全局块、http块、server块以及location块中配置。

 

5. 引入其他nginx配置文件

在Nginx配置文件中include指令用于引入其他配置文件或片段。这允许你将配置文件模块化并将其组织成更容易管理和维护的部分。

语法如下

include file;

file表示要包含的文件路径。可以是相对路径或绝对路径。

注意

Nginx进程的用户同样对其要具有写权限并且符合Nginx配置文件规定的相关语法和结构。
此指令可以放在配置文件的任意地方。

 
配置实例

1.包含单个文件

http {
  include /etc/nginx/conf.d/mysite.conf;
}

 
2.包含一个目录中的所有已conf结尾的文件

如nginx.conf对其他组件配置引入
http{
...
    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf; 
 ...   
}

 
3.分离不同的配置段

可以将不同的配置段存储在单独的文件中然后使用include命令将它们组合起来。

http {
  include /etc/nginx/conf.d/headers.conf;
  include /etc/nginx/conf.d/locations.conf;
  include /etc/nginx/conf.d/upstreams.conf;
}

如上将headers.conf、locations.conf和upstreams.conf文件中的配置将被包含在主配置文件中。

 
 

参考《Nginx高性能Web服务器详解》

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: nginx