背景介绍
Nginx自诞生起就采用了2.6以后内核所支持的epoll模型进而使得处理效率大幅提升而受到了广大用户的青睐,但就Web服务来讲,Nginx所拥有的功能Apache都可以实现,但反过来确不行,这就是大多数场景时使用Nginx作为反向代理而不能取代Apache的原因。本文以Nginx_1.12.1版本为例,介绍Nginx充当Web服务器时的配置及用法。
软件安装
尽管Nginx已经被收录进epel源,但仍然推荐使用编译的方式进行安装,这样更为灵活。安装步骤为:
1.从Nginx官网下载1.12.1源码包并解压到/usr/local/src目录
# tar -xf nginx-1.12.1.tar.gz -C /usr/local/src/
2.创建用于运行worker进程的用户。Nginx采用Master+Worker方式进行工作,只能有1个Master进程;Worker进程可以有多个,Master用于给worker传递参数与指令,worker负责处理客户请求,这种方式的优点是1个worker出现问题不会影响到Master。
# useradd -M -r -s /sbin/nologin nginx
3.根据需求选择要启用的功能编译安装。注意:Nginx可以自定义日志级别,但如果要启用debug级别的日志,在编译时必须开启--with-debug选项,否则就算设置为debug级别也不生效,另外如果需要编译第三方模块,需要使用--add-module选项。
# cd /usr/local/src/
# ./configure --prefix=/usr/local/nginx/ --user=nginx --with-threads --with-file-aio --with-http_ssl_module --with-http_gzip_static_module --with-http_gunzip_module --with-http_stub_status_module --with-pcre --add-module=/root/echo-nginx-module-0.60
# make && make install
Nginx主配置文件
Nginx的配置文件是nginx.conf文件,从结构上分为全局配置段和局部配置段,为了便于管理,建议的做法是将主配置段和局部配置段分成2个文件,主配置段优化性能和配置相关事件,局部配置段配置服务相关的内容,在主配置段使用include指令引用局部配置段。
上图中worker_processes是启动worker进程的数量,推荐的值是vcpu数量减1个;worker_connections是一个worker进程可以维持的连接数量默认为1024,整个Nginx服务器的连接数量=worker数量*每个worker的连接数;worker_priority是设置进程的nice值,linux系统中所有进程通过nice值来确定优先级,nice范围在-20到19之间,值越小优先级越高,默认所有进程的nice值都为0;worker_rlimit_noffile是一个worker进程最大允许打开的文件数,每一个套接字都需要对应一个socket文件,默认为1024。此处将局部配置段单独存放在server.conf文件中,通过include指令引用该配置文件。
局部配置段
1.server段定义
server段类似于Apache中的virtualhost段,一个http段中可以有多个server段侦听在不同的套接字上,listen为侦听的端口,如果希望侦听在其他套接字上可以在listen后面通过IP:Port的方式设置;server_name设置服务的主机名,主机名可以有多个,并且支持通配符和正则表达式(~),优先顺序为:
(1)先做精确匹配:www.contoso.com;
(2)左侧通配符匹配:*.contoso.com;
(3)右侧通配符匹配:www.contoso.*;
(4)正则表达式:~^.*\.contoso\.com$;
如果主机名不能陪上述任意匹配到,默认匹配第一个server,除非的别设定哪一个server是default_server。
2.location段定义
Nginx中location段的定义非常灵活,location表示请求资源的位置,后面可以跟目录或者是文件,而location在文件系统上的绝对路径还要取决于root或alias的设置。类似于server_name,location也有多种匹配方式,用法为:location [=|^~|~|~*] /uri,优先顺序为:
(1)=,精确匹配;
(2)^~,前半部分匹配;
(3)~,区分大小写匹配;
(4)~*,不区分大小写匹配;
如果主机名不能陪上述任意匹配到,默认匹配第一个location。
3.root值设置
root类似于Apache中的DocumentRoot,root可以设置在http段、server段和location段,作用范围越小,优先级越高,不设置默认继承上一级设置,root相当于路径的起始位置,后面的值可以相对路径或绝对路径,如果是相对路径,他相对的是Nginx的安装路径而言,location在文件系统上的位置实际为:root/location,以上图为例,根目录(/)所在的位置为/usr/local/nginx/html,50x.html文件所在位置为/usr/local/nginx/html/50x.html。
4.alias值设置
除了使用root表示路径的起始位置,还可以使用alias进行路径别名设置
与root表示启示位置不同,alias相当于路径的别名,结合上图,location中alias目录所在的为/var/www/alias,而/alias目录本身可以在文件系统上不存在。
5.状态监测
Nginx提供了一个状态监测的模块,编译时使用--with-http_stub_status_module选项进行开启,并在配置文件中进行设置设置
通过浏览器可以查看监测数据,Active connections表示当前所有打开状态的连接数;accept表示处理的连接数,handle成功创建的握手数,每个连接可以包含多个请求,requests表示处理的请求数。reading表示读取到客户端的header信息数,writing表示返回给客户端header的信息数,waiting的数值在开启keep-alive情况下等于active-(reading + writing),表示Nginx已处理完正在等待下一次请求的驻留连接数
6.访问控制
Nginx可以实现基于IP和用户的认证功能,以status监控页面为例,我们只允许特定网段的IP来查看监测数据,可以使用allow和deny指令来进行限制
如果想进一步进行设置,可以通过用户basic认证的方式,使用htpasswd工具创建一个用户(也可以直接创建一个系统用户并将密码保存在一个指定文件中)
然后在配置文件中启用认证功能
再刷新页面,就会发现需要密码了