Nginx中的模块分类及常见配置项说明

Posted njsummer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx中的模块分类及常见配置项说明相关的知识,希望对你有一定的参考价值。


1. nginx 模块分类

Nginx模块可分为:

  • 核心模块:​Nginx 服务器正常运行必不可少的模块,提供错误日志记录 、配置文件解析 、事件 驱动机制 、进程管理等核心功能.。
  • 标准HTTP模块:​提供 HTTP 协议解析相关的功能,比如: 端口配置 、 网页编码设置 、 HTTP响应头设置 等等。
http 
...
... #各server的公共配置
server #每个server用于定义一个虚拟主机,第一个server为默认虚拟服务器
...

server
...
server_name #虚拟主机名
root #主目录
alias #路径别名
location [OPERATOR] URL #指定URL的特性
...
if CONDITION
...




  • 可选HTTP模块:​主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,比如: Flash 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等。
  • 邮件服务模块:​主要用于支持 Nginx 的 邮件服务 ,包括对 POP3 协议、 IMAP 协议和 SMTP协议的支持。
  • Stream服务模块:​实现反向代理功能,包括TCP协议代理。
  • 第三方模块:​第三方模块:是为了扩展 Nginx 服务器应用,完成开发者自定义功能,比如: Json 支持、 Lua 支持等


Nginx中的模块分类及常见配置项说明_Nginx中的模块分类


2. Nginx默认配置文件格式解读

默认的nginx.conf 配置文件格式详细说明

#全局配置端,对全局生效,主要设置nginx的启动用户/组,启动的工作进程数量,工作模式,Nginx的PID路径,日志路径等。
user nginx nginx;
worker_processes 1; #启动工作进程数数量
events #events设置快,主要影响nginx服务器与用户的网络连接,比如是否允许同时接受多个网络连接,使用哪种事件驱动模型处理请求,每个工作进程可以同时支持的最大连接数,是否开启对多工作进程下的网络连接进行序列化等。
worker_connections 1024; #设置单个nginx工作进程可以接受的最大并发,作为web服务器的时候最大并发数为worker_connections * worker_processes,作为反向代理的时候为(worker_connections * worker_processes)/2

http #http块是Nginx服务器配置中的重要部分,缓存、代理和日志格式定义等绝大多数功能和第三方模块都可以在这设置,http块可以包含多个server块,而一个server块中又可以包含多个location块,server块可以配置文件引入、MIME-Type定义、日志自定义、是否启用sendfile、连接超时时间和单个链接的请求上限等。
include mime.types;
default_type application/octet-stream;
sendfile on; #作为web服务器的时候打开sendfile加快静态文件传输,指定是否使用sendfile系统调用来传输文件,sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝,硬盘 >>kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈。
keepalive_timeout 65; #长连接超时时间,单位是秒
server #设置一个虚拟机主机,可以包含自己的全局快,同时也可以包含多个location模块。比如本虚拟机监听的端口、本虚拟机的名称和IP配置,多个server 可以使用一个端口,比如都使用80端口提供web服务、
listen 80; #配置server监听的端口
server_name localhost; #本server的名称,当访问此名称的时候nginx会调用当前serevr内部的配置进程匹配。
location / #location其实是server的一个指令,为nginx服务器提供比较多而且灵活的指令,都是在location中体现的,主要是基于nginx接受到的请求字符串,对用户请求的UIL进行匹配,并对特定的指令进行处理,包括地址重定向、数据缓存和应答控制等功能都是在这部分实现,另外很多第三方模块的配置也是在location模块中配置。
root html; #相当于默认页面的目录名称,默认是安装目录的相对路径,可以使用绝对路径配置。
index index.html index.htm; #默认的页面文件名称

error_page 500 502 503 504 /50x.html; #错误页面的文件名称
location = /50x.html #location处理对应的不同错误码的页面定义到/50x.html,这个跟对应其server中定义的目录下。
root html; #定义默认页面所在的目录



#和邮件相关的配置
#mail
# ...
# mail 协议相关配置段
#tcp代理配置,1.9版本以上支持
#stream
# ...
# stream 服务器相关配置段

#导入其他路径的配置文件
#include /apps/nginx/conf.d/*.conf;


3. Nginx常见配置项

3.1 user

作用:

nginx进程运行使用的用户和组

示例:

user www www;      #启动Nginx工作进程的用户和组

Syntax: user user [group];
Default:
user nobody nobody;
Context: main
Defines user and group credentials used by worker processes. If group is omitted, a group whose name equals that of user is used.

3.2 pid

作用:

指定存储nginx主进程号的文件路径

示例:

pid logs/nginx.pid;    #pid文件保存路径

Syntax: pid file;
Default:
pid logs/nginx.pid;
Context: main
Defines a file that will store the process ID of the main process.

3.3 include

作用:

指明包含进来的其他配置文件

示例:

include vs/*.conf;

Syntax: include file | mask;
Default: —
Context: any
Includes another file, or files matching the specified mask, into configuration. Included files should consist of syntactically correct directives and blocks.

Usage example:

include mime.types;
include vhosts/*.conf;

3.4 worker_processes

作用:

worker进程的数量,应小于等于cpu核心数,auto为当前主机cpu核心数

范例:

worker_processes 4;  # 可选配置number |  auto

Syntax: worker_processes number | auto;
Default:
worker_processes 1;
Context: main
Defines the number of worker processes.

The optimal value depends on many factors including (but not limited to) the number of CPU cores, the number of hard disk drives that store data, and load pattern. When one is in doubt, setting it to the number of available CPU cores would be a good start (the value “auto” will try to autodetect it).

The auto parameter is supported starting from versions 1.3.8 and 1.2.5.

3.5 worker_cpu_affinity

作用:

配置CPU亲和,将worker进程与通过cpumask与指定cpu绑定,减少切换造成的CPU时间损耗.

范例:

worker_cpu_affinity 0001 0010 0100 1000;

Syntax: worker_cpu_affinity cpumask ...;
worker_cpu_affinity auto [cpumask];
Default: —
Context: main
Binds worker processes to the sets of CPUs. Each CPU set is represented by a bitmask of allowed CPUs. There should be a separate set defined for each of the worker processes. By default, worker processes are not bound to any specific CPUs.

For example,

worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
binds each worker process to a separate CPU, while

worker_processes 2;
worker_cpu_affinity 0101 1010;
binds the first worker process to CPU0/CPU2, and the second worker process to CPU1/CPU3. The second example is suitable for hyper-threading.

The special value auto (1.9.10) allows binding worker processes automatically to available CPUs:

worker_processes auto;
worker_cpu_affinity auto;
The optional mask parameter can be used to limit the CPUs available for automatic binding:

worker_cpu_affinity auto 01010101;
The directive is only available on FreeBSD and Linux.

3.6 worker_priority

作用:

指定worker进程的nice值,范围[-20,20]

范例:

worker_priority -10;


Syntax: worker_priority number;
Default:
worker_priority 0;
Context: main
Defines the scheduling priority for worker processes like it is done by the nice command: a negative number means higher priority. Allowed range normally varies from -20 to 20.

Example:

worker_priority -10;

3.7 worker_rlimit_nofile

作用:

指定worker进程能够打开的最大文件数

范例:

worker_rlimite_nofile 2000;


Syntax: worker_rlimit_nofile number;
Default: —
Context: main
Changes the limit on the maximum number of open files (RLIMIT_NOFILE) for worker processes. Used to increase the limit without restarting the main process.

​3.8 worker_connections​

设置单个工作进程的最大并发连接数

events 
worker_connections 65536;
....

3.9 daemon

作用:

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

范例:

daemon on

Syntax: daemon on | off;
Default:
daemon on;
Context: main
Determines whether nginx should become a daemon. Mainly used during development.

3.10 master_process

作用:

是否以master-worker模型运行Nginx。该指令适用于Nginx 开发人员。

范例:

master_process on;


Syntax: master_process on | off;
Default:
master_process on;
Context: main
Determines whether worker processes are started. This directive is intended for nginx developers.

3.11 error_log

作用:

配置错误日志路径和日志文件名

范例:

error_log logs/error.log error;


Syntax: error_log file [level];
Default:
error_log logs/error.log error;
Context: main, http, mail, stream, server, location
Configures logging. Several logs can be specified on the same configuration level (1.5.2). If on the main configuration level writing a log to a file is not explicitly defined, the default file will be used.

The first parameter defines a file that will store the log. The special value stderr selects the standard error file. Logging to syslog can be configured by specifying the “syslog:” prefix. Logging to a cyclic memory buffer can be configured by specifying the “memory:” prefix and buffer size, and is generally used for debugging (1.7.11).

The second parameter determines the level of logging, and can be one of the following: debug, info, notice, warn, error, crit, alert, or emerg. Log levels above are listed in the order of increasing severity. Setting a certain log level will cause all messages of the specified and more severe log levels to be logged. For example, the default level error will cause error, crit, alert, and emerg messages to be logged. If this parameter is omitted then error is used.

For debug logging to work, nginx needs to be built with --with-debug, see “A debugging log”.
The directive can be specified on the stream level starting from version 1.7.11, and on the mail level starting from version 1.9.0.

3.12 events

作用:

事件驱动相关配置,一般在配置的最上方

范例:

events                           #事件驱动相关配置
use epoll; #使用epoll事件驱动,Nginx支持众多的事件驱动,比如:select、poll、epoll,只能设置在events模块中设置。
worker_connections 2048; #每个worker进程能够打开的最大并发连接数
#accpet mutex on | off; #on为同一时刻一个请求轮流由work进程处理,而防止被同时唤醒所有worker,避免多个睡眠进程被唤醒的设置,默认为off,新请求会唤醒所有worker进程,此过程也称为"惊群",因此nginx刚安装完以后要进行适当的优化。建议设置为on
multi_accept on; #ON时Nginx服务器的每个工作进程可以同时接受多个新的网络连接,此指令默认为off,即默认为一个工作进程只能一次接受一个新的网络连接,打开后几个同时接受多个。建议设置为on



Syntax: events ...
Default: —
Context: main
Provides the configuration file context in which the directives that affect connection processing are specified.


以上是关于Nginx中的模块分类及常见配置项说明的主要内容,如果未能解决你的问题,请参考以下文章

nginx安装和常见的配置

Nginx模块介绍及指定配置项含义

Nginx配置文件参数

Nginx基础入门之fastcgi模块常用配置项说明

Nginx基础入门之gzip常用配置项说明

Nginx基础入门之uptream负载均衡常用配置项说明