問(wèn)題
@[java] @[代碼] @[巧妙]@[Nginx]
我們采用目前主流的分模塊或者說(shuō)組件開發(fā)。按照功能模塊,把后端系統(tǒng)分為了若干個(gè)組件,每個(gè)組件有自己獨(dú)立的服務(wù)器部署。如果某個(gè)組件掛掉,不會(huì)影響其他組件的正常使用。但是,問(wèn)題來(lái)了:
客戶端在使用的時(shí)候,要記大量的不同IP和端口,非常麻煩,有沒(méi)有一種方法,讓后端的組件配置對(duì)于前端來(lái)說(shuō)是透明的呢?
解決方案
我們引入Nginx的反向代理
做準(zhǔn)備
- 安裝nginx(網(wǎng)上一抓一大把)
- 啟動(dòng)nginx(網(wǎng)上一抓一大把)
寫代碼
在nginx的配置文件nginx.conf 中,加入配置如下:
本來(lái)訪問(wèn) http://localhost/icloud-data/data , 配置完后,只需要訪問(wèn)localhost/data即可
本來(lái)訪問(wèn) http://localhost/icloud-device/device, 配置完后,只需要訪問(wèn)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 一下即可
在這個(gè)基礎(chǔ)上,如果還想實(shí)現(xiàn)負(fù)載均衡,再配置一個(gè)
upstream localhost {
server ip1:port1;
server ip2:port2;
}