这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战
os: windows10
nginx: 1.19.2
官方下载地址:nginx.org/en/download…
在 windows 下部署
- 在官方网页上下载 zip 格式的文件
- 解压到指定位置,如
D:\Program Files\nginx-1.19.2
- 打开 cmd,然后 cd 到上一步解压的文件路径下
- 输入 nginx 的启动命令
start nginx
小技巧:如上第 2,3 步,我们可以优化为,zip 包直接解压到
D:\Program Files\nginx-1.19.2
,在这里路径下打开文件管理器,在文件管理器的地址栏,输入 cmd 命令,打开的 cmd 窗口就会自动定位到当前文件夹所在的路径
或者,当第 2 步完成后,我们直接双击
nginx.exe
运行,这个时候我们可以通过检查任务管理器中是否有运行 nginx 来判断是否成功启动
常用文件位置示意图
|- nginx-1.19.2
|- conf
|- nginx.conf nginx的配置项都在这里
|- logs
|- access.log nginx的访问日志默认存放位置
|- error.log nginx的错误日志默认存放位置
常规操作流程
- 在 cmd 中用
start nginx
启动服务 - 用文本编辑工具,如
hbx, sublimetext
打开文件conf/nginx.conf
- 修改配置文件中的配置等
- 在 cmd 中使用
nginx -s reload
刷新配置文件 - 检查
logs/error.log
,确认服务重启后未报错(如果报错就重复 3,4 步) - 网页浏览验证配置项是否符合预期,可以查看
logs/access.log
中的访问记录,如果需要,则继续重复 3,4,5 步
nginx 优点
反向代理
代理分为两种
正向代理:
- 通过第三方代理去请求目标服务器的资源
- 需要自己配置,第三方只负责去请求用户指定的url,获取资源并返回
反向代理:
- 用户直接访问代理服务器,服务器根据用户的请求,去选择访问合适的真实服务器,并返回数据
- 核心是,暴露代理服务器,隐藏真实服务器地址
示例代码:
server {
listen 80;
# 在 server.server_name 中指定用户访问的 url
server_name 192.168.0.1;
location / {
root html;
# 在server.location.proxy_pass 中指定nginx需要转发访问的实际url
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
server {
# 配置外部访问路径 http://192.168.0.1:9001
listen 9001;
server_name 192.168.0.1;
# 根据实际的访问路径,和正则表达式匹配,转发到对应的路径上
location ~ /edu/ {
proxy_pass http://127.0.0.1:8080;
}
location ~ /vod/ {
proxy_pass http://127.0.0.1:8081;
}
负载均衡
将请求分发到多个服务器,降低单个服务器的负载量
策略:
-
轮询(默认)
-
权重
-
ip哈希
- 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session共享问题
-
fair (第三方)
- 按后端服务器的响应时间来分配请求,响应时间短的,优先分配
示例代码:
# 在HTTP的全局块中添加
upstream myserver {
# 默认方式
server 192.168.0.1:8080;
server 192.168.0.1:8081;
}
# 修改server 块中的server_name,location 中添加 proxy_pass
server {
listen 80;
server_name 192.168.0.1:8080;
location / {
proxy_pass http://myserver;
root html;
index index.html index.htm;
}
}
upstream myserver {
# 权重方式
server 192.168.0.1:8080 weight 10;
server 192.168.0.1:8081 weight 5;
}
upstream myserver {
# fair 方式
server 192.168.0.1:8080;
server 192.168.0.1:8081;
fair;
}
upstream myserver {
# IP 哈希
ip_hash;
server 192.168.0.1:8080;
server 192.168.0.1:8081;
}
动静分离
将动态资源和静态组资源交给不同的服务器去解析,提高解析速度
静态资源:
指静态的html,css,js,img等资源
动态资源:
指动态的,需要经过后台计算处理的,或者是从数据库拉取的资源,常见的,如ajax请求的数据
示例代码:
server {
listen 8080;
server_name 192.168.0.1;
location /html/ {
root /data/;
index index.html
}
location /images/ {
root /data/;
# 以列表的形式,列出当前路径下的全部文件
autoindex on;
}
}
# 文件实际路径
|- data
|- html
|- a.html
|- images
|- 1.jpg
# 访问的URL
# http://192.168.0.1:8080/html/a.html
# http://192.168.0.1:8080/images/1.jpg
高可用
在使用 Nginx 做反向代理或者负载均衡的时候,都是以 Nginx 为入口,如果 Nginx 宕机了,那么所有的服务都无法正常提供,影响非常严重。所有我们需要保证 nginx 高可用,就是配置备份机,前一个挂了,还有后一个。
为了避免负载均衡服务器宕机造成严重影响,就需要建立一个备份机。主服务器和备份机上都运行高可用(High Availability)监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供负载均衡服务;当备份管理器又从主管理器收到“I am alive”这样的信息时,它就释放服务IP地址,这样的主服务器就开始再次提供负载均衡服务。
有需要的,可以用关键字 nginx keepalived高可用性负载均衡 去搜索具体的搭建教程
常用命令
# 查看版本
./nginx -v
# 查看安装情况
./nginx -t
# 启动1,不建议,会卡住命令行执行
./nginx
# 启动2,建议使用
start nginx
# 关闭
./nginx -s stop
# 重新加载,用于手动调整配置文件之后重新加载
./nginx -s reload
配置文件
全局块
从配置文件开始,到event 块之间的内容,主要设置一些影响nginx 整体运行的配置指令
worker_process 1 值越大,可以支持的并发处理就越多
event块
配置nginx与用户的网络连接
worker_connections 1024 支持的最大连接数
HTTP 块
HTTP 全局块
server 块
location 指令
location [ = | ~ | ~* | ^~ ] uri {
}
= :用于不含正则表达式的uri 前,要求请求字符串和 uri 严格匹配,如果匹配成功,就停止继续向下搜索,并立即处理该请求
~ :用于表示uri 包含正则表达式,区分大小写
~* :用于表示 uri 包含正则表达式,不区分大小写
^~ :用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的location 后,立即使用此 location 处理请求,而不再使用location块中的正则 和请求字符串做匹配
注:如果在 uri 中包含正则表达式,则必须要有
~
或者~*
标识