Nginx的配置文件结构
Nginx 的配置文件 nginx.conf 位于安装 Nginx 目录下。虚拟配置虚拟主机的配置文件一般放在 conf.d 目录下。
Nginx目录
nginx.conf
由多个块组成,最外面的块是 main
,main
包含 Events
和 HTTP
,HTTP
包含 upstream
和多个 Server
,Server
又包含多个 location
:
main
(全局设置)、server
(主机设置)、upstream
(负载均衡服务器设置)和 location
(URL匹配特定位置的设置)。
main
块设置的指令将影响其他所有设置;server
块的指令主要用于指定主机和端口;upstream
指令主要用于负载均衡,设置一系列的后端服务器;location
块用于匹配网页位置。
Nginx的全局配置
每个配置选项的含义解释如下:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
user
是个主模块指令,指定 Nginx Worker
进程运行用户以及用户组 www-data
。
worker_processes
是个主模块指令,指定了 Nginx
要开启的进程数。默认是 auto
。
error_log
是个主模块指令,用来定义全局错误日志文件。日志输出级别有 debug
、info
、notice
、warn
、error
、crit
可供选择,其中,debug
输出日志最为最详细,而 crit
输出日志最少。
pid
是个主模块指令,用来指定进程 pid
的存储文件位置。
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000
解析:表示开启四个进程,每一个进程分配一个CPU
每个配置选项的含义解释如下:
worker_processes
指明了 nginx
要开启的进程数,据官方说法,一般开一个就够了,多开几个,可以减少机器 io带来的影响。 一般为当前机器总 cpu
核心数的1到2倍。如,我的机器为双核,那么开4个足够了。
worker_rlimit_nofile
用于绑定 worker
进程和 CPU, Linux 内核2.4以上可用。
2核是 01,四核是0001,8核是00000001,有多少个核,就有几位数,1表示该内核开启,0表示该内核关闭。
worker_processes
最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了。
use epoll;
worker_connections 65536;
events
事件指令是设定 Nginx
的工作模式及连接数上限:
use
是个事件模块指令,用来指定 Nginx
的工作模式。Nginx
支持的工作模式有 select
、poll
、kqueue
、epoll
、rtsig
和 /dev/poll
。其中 select
和 poll
都是标准的工作模式,kqueue
和 epoll
是高效的工作模式,不同的是 epoll
用在 Linux
平台上,而 kqueue
用在 BSD
系统中。对于 Linux
系统,epoll
工作模式是首选。
负载均衡配置简介
upstream upzhi.com{
ip_hash;
server 192.168.8.11:80;
server 192.168.8.12:80 down;
server 192.168.8.13:8009 max_fails=3 fail_timeout=20s;
server 192.168.8.146:8080;
}
upstream
是 Nginx
的 HTTP Upstream
模块,这个模块通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡。
在上面的设定中,通过 upstream
指令指定了一个负载均衡器的名称 upzhi.com
。这个名称可以任意指定,在后面需要的地方直接调用即可。
Nginx
的负载均衡模块目前支持4种调度算法,下面进行分别介绍,其中后两项属于第三方的调度方法。
- 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响;
Weight
:指定轮询权值,Weight
值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下;ip_hash
:每个请求按访问IP的hash
结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题;fair
:比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx
本身是不支持fair
的,如果需要使用这种调度算法,必须下载Nginx
的upstream_fair
模块;url_hash
:按访问url
的hash
结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx
本身是不支持url_hash
的,如果需要使用这种调度算法,必须安装Nginx
的hash
软件包。
在 HTTP Upstream
模块中,可以通过 server
指令指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态。常用的状态有:
down
:表示当前的server暂时不参与负载均衡;backup
:预留的备份机器。当其他所有的非backup
机器出现故障或者忙的时候,才会请求backup
机器,因此这台机器的压力最轻;max_fails
:允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream
模块定义的错误;fail_timeout
:在经历了max_fails
次失败后,暂停服务的时间。max_fails
可以和fail_timeout
一起使用。
注意,当负载调度算法为ip_hash
时,后端服务器在负载均衡调度中的状态不能是weight
和backup
。
server虚拟主机配置
建议将对虚拟主机进行配置的内容写进另外一个文件,然后通过 include
指令包含进来,这样更便于维护和管理。
http {
include /etc/nginx/conf.d/*.conf;
}
在这里,配置虚拟主机会在 Nginx配置虚拟主机 中进行介绍
location URL匹配配置
在这里, location URL
匹配配置同样会在 Nginx配置虚拟主机 中进行介绍,因为两者是可以进行绑定的
nginx的配置讲解到这里结束,在看的过程中有问题或者手误的地方可以私信小编。
最后,注明小编的参考链接:nginx配置