Nignx反向代理
zKing 2018-11-19 HTTP
# Nignx 反向代理服务器,代理缓存
# 反向代理(Reverse Proxy)
反向代理隐藏了真实的服务器。
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
个人理解
- 正向代理
- 用户购买商家的东西,商家去直销厂进货,但是直销厂并不知道真正的用户是谁,但是用户却可以通过商品知道直销厂家
- 反向代理
- 房东委托房产中介去出租房间,房客向房产中介租房,但是房客不知道他租的是谁的房,但是房东可以从房产中介了解到房客的信息
# 作用
- 保护网站安全:任何来自Internet的请求都必须先经过代理服务器;
- 通过配置缓存功能加速Web请求:可以缓存真实Web服务器上的某些静态资源,减轻真实Web服务器的负载压力;
- 实现负载均衡:充当负载均衡服务器均衡地分发请求,平衡集群中各个服务器的负载压力;
# 通过Nignx反向代理实现跨域
# 简单的设置
全局跨域,找到nginx的配置文件“nginx.conf”,在 http 中增加一项信息
http {
...
add_header Access-Control-Allow-Origin *;
...
}
# 稍微复杂的设置
nginx反响代理api接口的设置
# 场景
- 前端项目域名为www.a.com,文件夹为html/a,
- 接口项目为www.b.com,文件夹为html/b
- 现在有一个接口,www.b.com/login.json,要通过访问 www.a.com/apis/login.json 去得到这个接口
# 目录
html
├── 50x.html
├── a
│ └── index.html
├── b
│ ├── apis
│ │ └── login.json
│ └── login.json
└── index.html
# nignx.conf
在这里先对 nginx 进行设置
http {
...
include /etc/nginx/conf.d/*.conf;
}
# 前端项目设置 ../conf.d/a.conf
server{
listen 80;
server_name www.a.com;
location / {
root html/a;
index index.html;
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# 匹配以/apis/开头的请求
location ^~ /apis/ {
# 注意域名后有一个 /
proxy_pass http://www.b.com/;
}
}
- 加 / 的情况,访问
www.a.com/apis/login.json
会得到www.b.com/login.json
(符合预期的),使用b文件夹作为/目录来访问 - 不加 / 的情况,访问
www.b.com/apis/login.json
会得到www.b.com/apis/login.json
(不符合预期),使用b文件下的apis作为根目录进行访问
# 重载nginx配置
sudo nginx -t
sudo nginx -s reload
# 通过 Nignx 部署 https 服务
在 Nignx 可以设置协议为 http2,Nignx 使用 http2 可以自动兼容 http1.1,所以我们开发时不需要太过关注 http2
关于如何通过用nginx来部署https服务,请点击 这里