問題
@[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;
}