# Nginx 入门
# Nginx 介绍
最简单的系统架构
问题:客户端到底要将请求发送给哪台服务器
使用 nginx 做反向代理
Nginx 帮助我们进行分配服务器
# Nginx 的基本配置介绍
在 Nginx 的安装目录下,找到 conf/nginx.conf,主要结构如下:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
# 以上统称为全局快
# worker_processes越大,并发能力越强
events {
worker_connections 1024;
}
# events块
# worker_connections越大,并发能力越强
http {
include mime.types;
default_type application/octet-stream;
server {
listen 8091;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
# location块
# root/ :接收到请求后去root的文件夹查找index资源
}
# server块
# listen:代表监听的端口号
# localhost:代表接受请求的IP或域名
}
# HTTP块
# include代表引入一个外部的文件 mime.types中放有大量的媒体类型
# Nginx 反向代理
# 正向代理
1.正向代理服务是由客户端设立的
2.客户端了解代理服务器和目标服务器都是谁
3.实现突破访问权限,提高访问的速度,对目标服务器隐藏客户端的 ip 地址
# 反向代理
1.反向代理服务器是配置在服务端的
2.客户端不知道访问的到底是哪一台服务器
3.达到负载均衡,并且可以隐藏服务器真正的 ip 地址
# 基于 Nginx 实现反向代理
# location 路径匹配映射
# 1. 精准匹配
location = / {
#精准主机名后面不能带任何字符串
#例如localhost:8091或localhost:8091/ 都可以匹配
#localhost:8091/luojw 不行
}
#2. 通用匹配
location /xxx {
#匹配所有以/xxx开头的路径
#例如127.0.0.1:8080/xxx
}
#3. 正则匹配
location ~ /xxx {
#匹配包含/xxx的路径
}
#4. 匹配开头路径
location ^~ /xxx {
#匹配所有以/xxx开头的路径
}
#5. 匹配结尾路径
location ~* \.(gif/jpg/png)$ {
#匹配以.gif、.jpg或者.png结尾的路径
}
以上匹配的先后顺序规则如下:
1)精准匹配,若成功,则停止后面的步骤,若没有,继续下面的步骤
2)普通匹配(若有多个匹配项匹配成功,那么记住最长匹配,并继续下面的匹配步骤)
3)命中前缀匹配(^~)终止匹配
4)正则表达式匹配
# proxy_pass 代理转发
在 nginx 中配置 proxy_pass 代理转发时,如果在 proxy_pass 后面的 url 加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分也给代理走。
假设下面四种情况分别用 http://localhost:8091/proxy/test 进行访问。
第一种: location /proxy { proxy_pass http://127.0.0.1/; } 代理到 URL:http://127.0.0.1/
第二种(相对于第一种,最后少一个 / ) location /proxy/ { proxy_pass http://127.0.0.1; } 代理到 URL:http://127.0.0.1/proxy/test
# Nginx 负载均衡
Nginx 为我们默认提供了三种负载均衡的策略:
- 轮询: 将客户端发起的请求,平均分配给每一台服务器
- 权重: 会将客户端的请求,根据服务器的权重值不同,分配不同的数量
- ip_hash: 基于发起请求的客户端的 ip 地址不同,他始终会将请求发送到指定的服务器上 就是说如果这个客户端的请求的 ip 地址不变,那么处理请求的服务器将一直是同一个
# 轮询
修改配置文件:
upstream myserver{
server ip:端口;
server 域名:端口;
}
server {
listen 8091;
server_name localhost;
location / {
proxy_pass http://myserver/;
}
}
这样当我访问 localhost:8091 的时候,会循环代理到我本机的 localhost:80 和 support.supermap.com.cn:8090
# 权重
实现权重的方式:在配置文件中 upstream 块中加上 weight:
upstream myserver{
server ip:端口 weight=1;
server 域名:端口 weight=2;
}
这样发送三次请求,有两次会转发到第二条地址,一次转发到第一条地址
# IP_hash
实现 ip_hash 方式:在配置文件 upstream 块中加上 ip_hash
upstream my_server{
ip_hash;
server ip:端口 weight=1;
server 域名:端口 weight=2;
}
这样一个 IP 会分配给固定的服务器
# Nginx 动静分离
为什么要做动静分离?
图
Nginx 的并发能力公式: worker_processes * worker_connections / 4|2 = Nginx 最终的并发能力
动态资源需要/4,静态资源需要/2
Nginx 通过动静分离来提升 Nginx 的并发能力,更快的给用户响应
# 动态资源代理
location / {
proxy_pass 路径;
}
# 静态资源代理
location / {
root 静态资源路径;
index 默认访问路径下的什么资源;
autoindex on;#代表展示静态资源的全部内容,以列表的形式展开
}
如 Nginx 默认配置文件中:
location / {
root html;
index index.html index.htm;
}
在直接访问 Nginx 监听的端口号时,会代理到 Nginx 安装目录下的 html 文件夹里的 index.html 文件