体系化带你全面认识 Nginx !
Nginx 概述
Nginx
是开源、高性能、高可靠的 Web
和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。性能是 Nginx
最重要的考量,其占用内存少、并发能力强、能支持高达 5w 个并发连接数,最重要的是, Nginx
是免费的并可以商业化,配置使用也比较简单。
API
服务, OpenResty
;对于前端来说 Node.js
并不陌生, Nginx
和 Node.js
的很多理念类似, HTTP
服务器、事件驱动、异步非阻塞等,且 Nginx
的大部分功能使用 Node.js
也可以实现,但 Nginx
和 Node.js
并不冲突,都有自己擅长的领域。 Nginx
擅长于底层服务器端资源的处理(静态资源处理转发、反向代理,负载均衡等), Node.js
更擅长上层具体业务逻辑的处理,两者可以完美组合。
用一张图表示:
使用 yum
安装 Nginx
:
yum install nginx -y
复制代码
安装完成后,通过 rpm -ql nginx
命令查看 Nginx
的安装信息:
# Nginx配置文件
/etc/nginx/nginx.conf # nginx 主配置文件
/etc/nginx/nginx.conf.default
1. 可执行程序文件
/usr/bin/nginx-upgrade
/usr/sbin/nginx
1. nginx库文件
/usr/lib/systemd/system/nginx.service # 用于配置系统守护进程
/usr/lib64/nginx/modules # Nginx模块目录
1. 帮助文档
/usr/share/doc/nginx-1.16.1
/usr/share/doc/nginx-1.16.1/CHANGES
/usr/share/doc/nginx-1.16.1/README
/usr/share/doc/nginx-1.16.1/README.dynamic
/usr/share/doc/nginx-1.16.1/UPGRADE-NOTES-1.6-to-1.10
1. 静态资源目录
/usr/share/nginx/html/404.html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
1. 存放Nginx日志文件
/var/log/nginx
复制代码
主要关注的文件夹有两个:
/etc/nginx/conf.d/
是子配置项存放处, /etc/nginx/nginx.conf
主配置文件会默认把这个文件夹中所有子配置项都引入;/usr/share/nginx/html/
静态文件都放在这个文件夹,也可以根据你自己的习惯放在其他地方;events
配置影响 Nginx
服务器与用户的网络连接;http
配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;server
配置虚拟主机的相关参数,一个 http
块中可以有多个 server
块;location
用于配置匹配的 uri
;upstream
配置后端服务器具体地址,负载均衡配置不可或缺的部分;server_name *.nginx.com
;server_name www.nginx.*
;server_name ~^www.nginx.*$
;mail.nginx-test.com
时,会进行“左匹配”;www.nginx-test.org
时,会进行“右匹配”;doc.nginx-test.com
时,会进行“左匹配”;www.nginx-test.cn
时,会进行“右匹配”;fe.nginx-test.club
时,会进行“正则匹配”;~
正则匹配,区分大小写;~*
正则匹配,不区分大小写;^~
匹配到即停止搜索;/
当访问 www.nginx-test.com/test
时, Nginx
先找是否有 test
目录,如果有则找 test
目录下的 index.html
,如果没有它也不会去找是否存在 test
文件。break
直接使用重写后的 URL
,不再匹配其它 location
中语句;redirect
返回302临时重定向;permanent
返回301永久重定向;fe.lion.club/images/1.jpg
时,第一步重写 URL
为 fe.lion.club/pics/1.jpg
,找到 pics
的 location
,继续重写 URL
为 fe.lion.club/photos/1.jpg
,找到 /photos
的 location
后,去 html/photos
目录下寻找 1.jpg
静态资源。=
或 !=
相等或不等;~
正则匹配;! ~
非正则匹配;~*
正则匹配,不区分大小写;-f
或 ! -f
检测文件存在或不存在;-d
或 ! -d
检测目录存在或不存在;-e
或 ! -e
检测文件、目录、符号链接等存在或不存在;-x
或 ! -x
检测文件可以执行或不可执行;ip
绑定策略:来自同一个 ip
的请求永远只分配一台服务器,有效解决了动态网页存在的 session
共享问题。zone
定义共享内存,用于跨 worker
子进程;keepalive
对上游服务启用长连接;keepalive_requests
一个长连接最多请求 HTTP
的个数;keepalive_timeout
空闲情形下,一个长连接的超时时长;hash
哈希负载均衡算法;ip_hash
依据 IP
进行哈希计算的负载均衡算法;least_conn
最少连接数负载均衡算法;least_time
最短响应时间负载均衡算法;random
随机负载均衡算法;max_conns=number
上游服务器的最大并发连接数;fail_timeout=time
服务器不可用的判定时间;max_fails=numer
服务器不可用的检查次数;backup
备份服务器,仅当其他服务器都不可用时才会启用;down
标记服务器长期不可用,离线维护;/
意味着 Nginx
会修改用户 URL
,修改方法是将 location
后的 URL
从用户 URL
中删除;level path
的目录层级;keys_zone
设置共享内存;inactive
在指定时间内没有被访问,缓存会被清理,默认10分钟;DOM
层面,同源策略限制了来自不同源的 JavaScript
脚本对当前 DOM
对象读和写的操作。XMLHttpRequest
等方式将站点的数据发送给不同源的站点。dev.server.com
Master
进程会去通知 work
进程获取新的配置信息,这也就是我们所说的热部署。