基本介绍
Nginx 是一款轻量级的 Web 服务器 / 反向代理服务器 / 电子邮件(IMAP/POP3)代理服务器,主要的优点是:
1. 支持高并发连接,尤其是静态界面,官方测试 Nginx 能够支撑 5 万并发连接
2. 内存占用极低
3. 配置简单,使用灵活,可以基于自身需要增强其功能,同时支持自定义模块的开发
4. 使用灵活:可以根据需要,配置不同的负载均衡模式,URL 地址重写等功能
5. 稳定性高,在进行反向代理时,宕机的概率很低
6. 支持热部署,应用启动重载非常迅速
基础使用
Windows 版
安装
文件下载地址:http://nginx.org/en/docs/windows.html
如果下载很慢可以用该链接:
百度云盘链接: https://pan.baidu.com/s/1r3mSEGhmz4HA46Cw9w6QTQ 提取码: d8bi
解压即可
基本命令
# 启动
# 建议使用第一种,第二种会使窗口一直处于执行中,不能进行其他命令操作
C:\server\nginx-1.19.2> start nginx
C:\server\nginx-1.19.2> nginx.exe
# 停止
# stop是快速停止nginx,可能并不保存相关信息;quit是完整有序的停止nginx,并保存相关信息
C:\server\nginx-1.19.2> nginx.exe -s stop
C:\server\nginx-1.19.2> nginx.exe -s quit
# 重载Nginx
# 当配置信息修改,需要重新载入这些配置时使用此命令
C:\server\nginx-1.19.2> nginx.exe -s reload
# 重新打开日志文件
C:\server\nginx-1.19.2> nginx.exe -s reopen
# 查看Nginx版本
C:\server\nginx-1.19.2> nginx -v
# 查看配置文件是否正确
C:\server\nginx-1.19.2> nginx -t
简单 Demo
- 利用SwitchHost软件编辑域名和 IP
的映射关系,或到目录C:\Windows\System32\drivers\etc下,编辑hosts文件,增加配置如下(Mac 同理)
127.0.0.1 kerwin.demo.com
PS:推荐使用软件SwitchHost,工作时几乎是必用的
- 修改配置,如图所示:
效果如图所示:
Nginx 在架构体系中的作用
- 网关 (面向客户的总入口)
- 虚拟主机(为不同域名 / ip / 端口提供服务。如:VPS 虚拟服务器)
- 路由(正向代理 / 反向代理)
- 静态服务器
- 负载集群(提供负载均衡)
网关
网关:可以简单的理解为用户请求和服务器响应的关口,即面向用户的总入口
网关可以拦截客户端所有请求,对该请求进行权限控制、负载均衡、日志管理、接口调用监控等,因此无论使用什么架构体系,都可以使用Nginx作为最外层的网关
虚拟主机
虚拟主机的定义:虚拟主机是一种特殊的软硬件技术,它可以将网络上的每一台计算机分成多个虚拟主机,每个虚拟主机可以独立对外提供 www 服务,这样就可以实现一台主机对外提供多个 web 服务,每个虚拟主机之间是独立的,互不影响的。
通过 Nginx 可以实现虚拟主机的配置,Nginx 支持三种类型的虚拟主机配置
- 基于 IP 的虚拟主机
- 基于域名的虚拟主机
- 基于端口的虚拟主机
表现形式其实大家多见过,即:
# 每个 server 就是一个虚拟主机
http {
# ...
server{
# ...
}
# ...
server{
# ...
}
}
路由
在Nginx的配置文件中,我们经常可以看到这样的配置:
location / {
#....
}
location在此处就起到了路由的作用,比如我们在同一个虚拟主机内定义两个不同的路由,如下:
location / {
proxy_pass https://www.baidu.com/;
}
location /api {
proxy_pass https://apinew.juejin.im/user_api/v1/user/get?aid=2608&user_id=1275089220013336¬_self=1;
}
效果如下:
因为路由的存在,为我们后续解决跨域问题提供了一定的思路,同时配置内容和 API 接口等更加方便
PS:路由的功能非常强大,支持正则匹配
正向与反向代理
此处额外解释一下proxy_pass的含义
在Nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的 url 加 /,表示绝对根路径;
如果没有/,表示相对路径
正向代理
代理客户;
隐藏真实的客户,为客户端收发请求,使真实客户端对服务器不可见;
一个局域网内的所有用户可能被一台服务器做了正向代理,由该台服务器负责 HTTP 请求;
意味着同服务器做通信的是正向代理服务器;
反向代理
代理服务器;
隐藏了真实的服务器,为服务器收发请求,使真实服务器对客户端不可见;
负载均衡服务器,将用户的请求分发到空闲的服务器上;
意味着用户和负载均衡服务器直接通信,即用户解析服务器域名时得到的是负载均衡服务器的 IP ;
共同点
都是做为服务器和客户端的中间层
都可以加强内网的安全性,阻止 web 攻击
都可以做缓存机制,提高访问速度
区别
正向代理其实是客户端的代理,反向代理则是服务器的代理。
正向代理中,服务器并不知道真正的客户端到底是谁;而在反向代理中,客户端也不知道真正的服务器是谁。
作用不同。正向代理主要是用来解决访问限制问题;而反向代理则是提供负载均衡、安全防护等作用。
静态服务器
静态服务器是Nginx的强项,使用非常容易,在默认配置下本身就是指向了静态的 HTML 界面,如:
location / {
root html;
index index.html index.htm;
}
所以前端同学们,如果构建好了界面,可以进行相应的配置,把界面指向目标文件夹中即可,root指的是html文件夹
负载均衡
负载均衡功能是Nginx另一大杀手锏,一共有 5 种方式,着重介绍一下。