- 正向代理: 对于客户端,我的请求到达Nginx,Nginx把我的请求分配到外部服务器,隐藏了服务端的身份
- 反向代理: 服务端向外部客户端提供服务,但是任务是由Nginx下发的,不知道客户端是谁
location / {
: proxy_pass http://localhost:8000; # 设定请求跳转后的地址,可以使用 hostname 或 IP:Port 形式
: proxy_set_header X-Real-IP $remote_addr;# 后端请求携带原始请求的真实 IP 地址
proxy_pass
- 设置被代理服务器的地址和被映射的URI,地址可以使用主机名或IP加端口号的形式
1. proxy_pass路径
!!!后面的/很重要
location /html/ {
1. proxy_pass http://proxy.com;
2. proxy_pass http://proxy.com/;
}
假设访问的url是 http://domain.com/html/test.js
- 对于1来说 proxy.com 后面没有"/",表示"/html/" 请求(包括自己)后续的路径及其参数等关键字都由http://a.com/来处理,代理后变成了http://proxy.com/html/test.js
- 对 2来所 proxy.com 后面有"/",表示"/html/" 请求后续的路径及其参数等关键字都由 http://a.com/来处理,代理后变成了http://proxy.com/test.js
2. 具体设置
server {
listen 8000;
location / {
proxy_pass http://192.168.31.129:8001;
}
}
!!一个请求的生命周期
这个server服务监听0.0.0.0:8000
端口监听表示本机素有ip的8000端口,如果有客户端请求到我们本机的8000端口,则开始匹配, /
表示匹配所有的路径,对8000端口无条件转发到http://192.168.31.129:8001;
ps:我们的django服务器需要绑定http://192.168.31.129:8001;
!!! Nginx服务器地址需要添加到Django后台的settings允许访问的白名单中
ALLOWED_HOSTS = [
...
'192.168.31.131' #Nginx服务器地址
...
]
!!! Nginx服务器并不在Django的CORS跨域白名单中
# 需要手动添加
CORS_ORIGIN_WHITELIST = (
...
'192.168.31.131' #Nginx服务器地址
...
)
网友评论