Nginx
是开源、高性能、高可靠的 Web
和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。性能是 Nginx
最重要的考量,其占用内存少、并发能力强、能支持高达 5w 个并发连接数,最重要的是, Nginx
是免费的并可以商业化,配置使用也比较简单。
Nginx 特点
-
高并发、高性能;
-
模块化架构使得它的扩展性非常好;
-
异步非阻塞的事件驱动模型这点和
Node.js
相似; -
相对于其它服务器来说它可以连续几个月甚至更长而不需要重启服务器使得它具有高可靠性;
-
热部署、平滑升级;
-
完全开源,生态繁荣;
Nginx与Apache
Nginx 作用
Nginx 的最重要的几个使用场景:
-
静态资源服务,通过本地文件系统提供服务;
-
反向代理服务,延伸出包括缓存、负载均衡等;
-
API
服务,OpenResty
;
对于前端来说 Node.js
并不陌生, Nginx
和 Node.js
的很多理念类似, HTTP
服务器、事件驱动、异步非阻塞等,且 Nginx
的大部分功能使用 Node.js
也可以实现,但 Nginx
和 Node.js
并不冲突,都有自己擅长的领域。 Nginx
擅长于底层服务器端资源的处理(静态资源处理转发、反向代理,负载均衡等), Node.js
更擅长上层具体业务逻辑的处理,两者可以完美组合。
Nginx配置
-
main
全局配置,对全局生效; -
events
配置影响Nginx
服务器与用户的网络连接; -
http
配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置; -
server
配置虚拟主机的相关参数,一个http
块中可以有多个server
块; -
location
用于配置匹配的uri
; -
upstream
配置后端服务器具体地址,负载均衡配置不可或缺的部分;
用一张图清晰的展示它的层级结构:
Nginx有两种进程:主进程和工作进程
server_name 指令
指定虚拟主机域名。
server_name name1 name2 name3
# 示例:
server_name www.nginx.com;
域名匹配的四种写法:
-
精确匹配:
server_name www.nginx.com
; -
左侧通配:
server_name *.nginx.com
; -
右侧统配:
server_name www.nginx.*
; -
正则匹配:
server_name ~^www\.nginx\.*$
;
匹配优先级:精确匹配 > 左侧通配符匹配 > 右侧通配符匹配 > 正则表达式匹配