计算机网络/计算机科学与应用/系统/运维/开发

7、Nginx 服务器基础配置指令

Nginx 服务器基础配置指令


一、配置运行Nginx服务器用户(组)

配置运行Nginx服务器用户(组)指令是user   

格式:

# user  user [group] ;

user,指定可以运行Nginx服务器的用户

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


注意:只有被设置的用户或者用户组成员才能启动Nginx进程,其他用户会报错,如下

[root@iZ8vb9nmgwljcf9m2wxaekZ sbin]# ./nginx -s reload
nginx: [emerg] getpwnam("mynginxusers") failed in /usr/local/nginx/conf/nginx.conf:2


如果希望所有用户都可以启动Nginx进程,2种方式:

1、将 user [user] [group] ; 添加注释 

#user [user] [group] ;

2、将用户和用户组设置为nobody

user nobody nobody    # 默认指令

user指令只能在全局块中配置


Nginx异常1

[root@iZ8vb9nmgwljcf9m2wxaekZ sbin]# ./nginx -s quit
nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)

解决:

[root@iZ8vb9nmgwljcf9m2wxaekZ sbin]# ./nginx -c /usr/local/nginx/conf/nginx.conf


二、配置允许生成的worker process数


worker process 是Nginx 实现并发处理服务的关键所在。

理论上讲, worker process 值越大,处理并发数越多,实际上还要考虑软件本身,系统本身,硬件等设备条件。

格式:

worker_processes  number |  auto;

number,指定Nginx进程最大的数量

auto, Nginx自动检测


number = 1 可以发现除了主进程,还有1个worker 进程

[root@iZ8vb9nmgwljcf9m2wxaekZ sbin]# ps ax|grep nginx
15770 ?        Ss     0:00 nginx: master process ./nginx -c /usr/local/nginx/conf/nginx.conf
15771 ?        S      0:00 nginx: worker process
19162 pts/1    R+     0:00 grep --color=auto nginx

number = 3 有3个worker进程

[root@iZ8vb9nmgwljcf9m2wxaekZ sbin]# ps ax|grep nginx
15770 ?        Ss     0:00 nginx: master process ./nginx -c /usr/local/nginx/conf/nginx.conf
19859 ?        S      0:00 nginx: worker process
19860 ?        S      0:00 nginx: worker process
19861 ?        S      0:00 nginx: worker process
20391 pts/1    S+     0:00 grep --color=auto nginx


此指令只能在全局块中设置。


三、配置Nginx进程PID存放路径

Nginx 为系统守护进程,需要在文件中保存主进程号,Nginx可以自定义配置存放路径

默认配置:

#pid        logs/nginx.pid;

格式

pid  file;

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

默认配置文件放在Nginx安装目录下 logs   名字为 nginx.pid   

path路径可以是相对也可以是绝对


例如:

把Nginx.pid 配置到Ningx安装目录下sbin下 名称为web_nginx 

pid  sbin/web_nginx/nginx.pid


如果只设置了路径,没有设置文件名,则会报错

nginx: [emerg] open() "/Nginx/logs/" failed (21: Is a directory)


此指令只能在全局块中设置。


四、配置错误日志的存放路径

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

先看全局块下的日志存放配置

格式:

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


error_log stderr ;


//直接发送给stderr;发送给stderr的信息可以使用syslog记录的日志查看

一般的配置是/etc/rsyslog.d/50-default.conf,记录下的日志有的是在/var/log/messages

在/var/log/syslog

如果没有记录下来就重启service syslog restart


日志级别:[ debug | info | notice | warn | error | crit | alert | emerg ]


例如:配置实例,存放日志和日记级别

error_log logs/error.log  error;


注意:指定的文件对于运行Nginx进程的用户具有写权限,否则启动Nginx进程时出错:

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


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


五、配置文件的引入

如果需要将其他的Nginx配置或者第三方模块的配置引用到当前的主配置文件中。Nginx提供了include指令来完成配置文件的引入

格式:

include file;

file是要引入的配置文件,它支持相对路径

新引用进来的文件同样要求运行Nginx进程的用户对其具有写权限,并且符合Nginx配置文件规定的相关语法和结构


此指令可以放在配置文件的任意地方


六、设置网络连接的序列化

在《UNIX网络编程》第1卷里提到过一个叫“惊群”的问题(Thundering herd problem),大致意思是,当某一时刻只有一个网络连接到来时,多个睡眠进程会被同时叫醒,但只有一个进程可获得连接。如果每次唤醒的进程数目太多,会影响一部分系统性能。在Nginx服务器的多进程下,就有可能出现这样的问题


为了解决这样的问题,Nginx配置中包含了这样一条指令accept_mutex,当其设置为开启的时候,将会对多个Nginx进程接收连接进行序列化,防止多个进程对连接的争抢

events { 
    accept_mutex on | off; 
}

此指令默认为开启(on)状态,其只能在events块中进行配置。

Nginx缺省激活了accept_mutex,是一种保守的选择。如果关闭了它,可能会引起一定程度的惊群问题,表现为上下文切换增多(sar -w)或者负载上升,但是如果你的网站访问量比较大,为了系统的吞吐量,我还是建议大家关闭它。

参考: https://blog.huoding.com/2013/08/24/281


七、设置是否允许同时接收多个网络连接

Nginx服务器的worker process都有能力同时接收多个新到达的网络连接,但是这需要在配置文件中进行设置,其指令为multi_accept,语法结构为:

格式:

multi_accept on | off ;


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


此指令默认为关闭(off)状态,即每个worker process一次只能接收一个新到达的网络连接。


此指令只能在events块中进行配置。

If multi_accept is disabled, a worker process will accept one new connection at a time. Otherwise, a worker process will accept all new connections at a time.
The directive is ignored if kqueue connection processing method is used, because it reports the number of new connections waiting to be accepted.

如果multi_accept被禁止了,nginx一个工作进程只能同时接受一个新的连接。否则,一个工作进程可以同时接受所有的新连接。
如果nginx使用kqueue连接方法,那么这条指令会被忽略,因为这个方法会报告在等待被接受的新连接的数量。



八、事件驱动模型的选择

Nginx服务器提供了多种事件驱动模型来处理网络消息。配置文件中为我们提供了相关的指令来强制Nginx服务器选择哪种事件驱动模型进行消息处理,指令为use,语法结构为:

use method;

method可选择的内容有:select、poll、kqueue、epoll、rtsig、/dev/poll以及eventport,其中几种模型是比较常用,事件模型请参考事件模型篇文章


可以在编译时使用--with-select_module和--without-select_module设置是否强制编译select模块到Nginx内核;使用--with-poll_module和--without-poll_module设置是否强制编译poll模块到Nginx内核。

此指令只能在events块中进行配置

指定使用哪种模型(select/poll/epoll),建议让nginx自动选择,linux内核2.6以上一般能使用epoll,提高性能。

指定要使用的connection processing方法。

一般不需要特别指定,nginx会默认使用最有效的方法。


九、配置最大连接数

指令worker_connections主要用来设置允许每一个worker process同时开启的最大连接数。

其语法结构为:

worker_connections number;


worker_connections  1024;

这里的number不仅仅包括和前端用户建立的连接数,而是包括所有可能的连接数。另外,number值不能大于操作系统支持打开的最大文件句柄数量。该指令在后边讨论Nginx服务器高级配置时还会再次提到。

此指令只能在events块中进行配置

参考网址:https://blog.csdn.net/zhuyu19911016520/article/details/90714429


十、定义MIME-Type

在常用的浏览器中,可以显示的内容有HTML、XML、GIF及Flash等种类繁多的文本、媒体等资源,浏览器为区分这些资源,需要使用MIME Type。

换言之,MIME Type是网络资源的媒体类型。Nginx服务器作为Web服务器,必须能够识别前端请求的资源类型。


在默认的Nginx配置文件中,我们看到在http全局块中有以下两行配置:


http {
    include       mime.types;
    default_type  application/octet-stream;

第一行从外部引用了mime_types文件,我们来看一下它的内容片段:


[root@iZ8vb9nmgwljcf9m2wxaekZ conf]# cat mime.types
types {
    text/html                                        html htm shtml;
    text/css                                         css;
    text/xml                                         xml;
    image/gif                                        gif;
    image/jpeg                                       jpeg jpg;
    application/javascript                           js;
    application/atom+xml                             atom;
    application/rss+xml                              rss;


从mime_types文件的内容片段可以看到,其中定义了一个types结构,结构中包含了浏览器能够识别的MIME类型以及对应于相关类型的文件后缀名。由于mime_types文件是主配置文件应用的第三方文件,因此,types也是Nginx配置文件中的一个配置块,我们可以称之为types块,其用于定义MIME类型。


第二行中使用指令default_type配置了用于处理前端请求的MIME类型,其语法结构为:

default_type  application/octet-stream;

其中,mime-type为types块中定义的MIME-type,如果不加此指令,默认值为text/plain


此指令还可以在http块、server块或者location块中进行配置。


十一、自定义服务日志

access_log指令的语法结构为:

access_log path [format [buffer=size]];


path,配置服务日志的文件存放的路径和名称

format,可选项,自定义服务日志的格式字符串,也可以通过“格式串的名称”使用log_format指令定义好的格式。“格式串的名称”在log_format指令中定义

size,配置临时存放日志的内存缓存区大小


此指令可以在http块、server块或者location块中进行设置。默认的配置为:

access_log logs/access.log combined;

combined为log_format指令默认定义的日志格式字符串的名称


十二、配置允许sendfile方式传输文件

在Apache、lighttd等Web服务器配置中,都有和sendfile相关的配置,

这里主要学习一下配置sendfile传输方式的相关指令sendfile和sendfile_max_chunk以及它们的语法结构:

 sendfile        on | off;

用于开启或者关闭使用sendfile()传输文件,默认值为off,可以在http块、server块或者location块中进行配置。

sendfile_max_chunk  size;


https://www.cnblogs.com/zhang-shijie/p/5428640.html


十三、配置连接超时时间

与用户建立会话连接后,Nginx服务器可以保持这些连接打开一段时间,指令keepalive_timeout就是用来设置此时间

keepalive_timeout timeout [header_timeout];

timeout,服务器端对连接的保持时间。默认值为75s

header_timeout,可选项,在应答报文头部的Keep-Alive域设置超时时间:“Keep-Alive:timeout= header_timeout”。报文中的这个指令可以被Mozilla或者Konqueror识别


十四、单连接请求数上限

Nginx服务器端和用户端建立会话连接后,用户端通过此连接发送请求。指令keepalive_requests用于限制用户通过某一连接向Nginx服务器发送请求的次数

keepalive_requests number;

此指令还可以出现在server块和location块中,默认设置为100


十五、配置网络监听

配置监听使用指令listen,其配置方法主要有三种,我们先分别介绍三种配置的语法结构,然后统一介绍涉及的相关变量和标识符。



nginx

人生在世,不如意事十之八九;人生的滋味,哪怕是酸甜或苦辣,也要靠自己去品。人活一口气:气质看一个人的过去,气度看一个人的未来

评论

^