用nginx一直都不是很明白里面的各种操作,例如反向代理,负载均衡这些操作,都没了解过,就瞎照着网上扔上去一个配置就完事了。
结果,坑就来了。
先说说需求: 一共3个服务器,前端我1个,后端2个。 目的是需要所有的请求都请求到我前端的服务器上,在我前端服务器再次发送请求到后端的两个服务器上,听起来还算简单,但里面有个硬性要求就是。
必须通过内网ip地址访问后端服务器!
必须通过内网ip地址访问后端服务器!
必须通过内网ip地址访问后端服务器!
就是这个需求我直接跪了
先说说跪的原因:
内网ip有个要求,访问者必须在内网里发送请求,但用户是不可能在内网访问的,所以直接用内网的ip地址发送请求是获取不到任何信息的。
那通过内网ip地址发送请求的思路只能是:
用户依旧用外网ip地址发送请求,但所有接口的地址全部都是前端服务器的公网ip。也就是所谓的服务器代理。如图:所有请求都先通过一台服务器,这台服务器再通过内网ip地址访问各个不同的后台服务器。
理论说了那么多,事实上配置非常简单,只是有各种小坑需要注意。
干货:
1.配置前端所有发接口的地址
http://www.kalec.com/ABIS_ORIGIN
http://www.kalec.com/CAS_ORIGIN
这个配置相当于在你的所有请求都加一个前缀
如图:
每次发请求的请求头都是http://kalec.com/ABIS_ORIGIN/…
接下来就是nginx服务器配置了:
//打开nginx.conf文件
server {
listen 80;
server_name kalec.com http://www.kalec.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location /ABIS_ORIGIN/ {
proxy_set_header Host $host:$server_port;
proxy_pass http://172.99.300.122:8099/;
}
location /CAS_ORIGIN/ {
proxy_set_header Host $host:$server_port;
proxy_pass http://172.99.200.110:8090/;
}
以上就是nginx做的配置,需要记住 “/”这个符号很重要 不能少任何一个,认真看好所有“/”的地方,否则会发送错误的请求地址。
简单解释下配置:
当请求地址带有/ABIS_ORIGIN/的时候,会自动将地址替换成172.99.300.122:8099来发送请求
举例:
请求地址:http://www.kalec.com/ABIS_ORIGIN/order/list?page=1(外网请求地址)
经过nginx转发后:http://172.99.300.122:8099/order/list?page=1(内网请求地址)
到此为止,一个服务器转发内网ip请求的操作就完成啦~感谢观看。