问题
@[java] @[代码] @[巧妙]@[Nginx]
我们采用目前主流的分模块或者说组件开发。按照功能模块,把后端系统分为了若干个组件,每个组件有自己独立的服务器部署。如果某个组件挂掉,不会影响其他组件的正常使用。但是,问题来了:
客户端在使用的时候,要记大量的不同IP和端口,非常麻烦,有没有一种方法,让后端的组件配置对于前端来说是透明的呢?
解决方案
我们引入Nginx的反向代理
做准备
- 安装nginx(网上一抓一大把)
- 启动nginx(网上一抓一大把)
写代码
在nginx的配置文件nginx.conf 中,加入配置如下:
本来访问 http://localhost/icloud-data/data , 配置完后,只需要访问localhost/data即可
本来访问 http://localhost/icloud-device/device, 配置完后,只需要访问localhost/device即可
server {
listen 80;
listen localhost;
server_name somename alias another.alias;
location / {
root html;
index index.html index.htm;
}
location /data {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost/icloud-data/data;
}
location /collect {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost/icloud-data/collect;
}
location /device {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost/icloud-device/;
}
}
配置完后,不需要重启nginx。只需要nginx -s reload 一下即可
在这个基础上,如果还想实现负载均衡,再配置一个
upstream localhost {
server ip1:port1;
server ip2:port2;
}