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,其配置方法主要有三种,我们先分别介绍三种配置的语法结构,然后统一介绍涉及的相关变量和标识符。