多個(gè)tomcat服務(wù)器之間的項(xiàng)目如果互調(diào)接口的情況下,ajax請(qǐng)求時(shí)是會(huì)有跨域問題的舔琅,
如 我用一個(gè)8082端口的tomcat下啟動(dòng)一個(gè)MyBlog2的項(xiàng)目正常請(qǐng)求的接口如下:
當(dāng)在8081端口的tomcat上的一個(gè)項(xiàng)目中ajax調(diào)用這個(gè)接口時(shí)會(huì)存在跨域問題爵赵,如圖報(bào)錯(cuò)信息:
跨域問題如何解決呢 利用Nginx服務(wù)器的反向代理轉(zhuǎn)發(fā)功能吝秕,可以通過nginx服務(wù)器轉(zhuǎn)發(fā)到其他tomcat解決跨域問題。
下載Nginx
官網(wǎng)地址:http://nginx.org/en/download.html
可以下載windows版或linux版空幻,操作方式都差不多烁峭,如果是windows版,下載下來(lái)解壓之后cmd打開文件夾直接運(yùn)行start nginx就好了秕铛。我用的deepin系統(tǒng)约郁,這里以debian系linux版為例:
把在官網(wǎng)下載的壓縮包解壓到一個(gè)文件夾
比如我把壓縮包放在了~/myspace/profile這個(gè)文件夾
//解壓
tar -zxvf nginx-1.16.1.tar.gz
cd nginx-1.16.1
//執(zhí)行初始化命令
sudo ./configure
sudo make
sudo make install
執(zhí)行完上面的命令后,在/usr/local下出現(xiàn)了nginx但两,默認(rèn)安裝在這里鬓梅。
cd /usr/local/nginx/sbin
//把nginx命令放入系統(tǒng)命令
cp nginx /usr/bin/
//啟動(dòng)nginx
sudo nginx
這樣nginx就啟動(dòng)了 默認(rèn)占用80端口,配置文件在conf下的nginx.conf
在瀏覽器訪問localhost能看到啟動(dòng)成功的歡迎頁(yè)面如圖
啟動(dòng)谨湘,關(guān)閉绽快,重啟芥丧,命令:
sudo nginx 啟動(dòng)
sudo nginx -s stop 關(guān)閉
sudo nginx -s reload 重啟
配置nginx.conf
此文件中server可以寫多個(gè),可以listen不同的端口坊罢,每個(gè)server里可以寫多個(gè)location,可以轉(zhuǎn)發(fā)不同的tomcat地址
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream localTomcat {
server localhost:8081;
}
upstream localTomcat1 {
server localhost:8082;
}
server {
listen 8083;
location / {
#root html;
#index index.html index.htm;
proxy_pass http://localTomcat;
#允許cros跨域訪問
add_header 'Access-Control-Allow-Origin' '*';
}
location /MyBlog2 {
#root html;
#index index.html index.htm;
proxy_pass http://localTomcat1;
#允許cros跨域訪問
add_header 'Access-Control-Allow-Origin' '*';
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
如上配置中server監(jiān)聽8083端口续担,location /MyBlog2 代表訪問8083端口且以MyBlog2開頭的請(qǐng)求路徑 都會(huì)走http://localTomcat1; localTomcat1在upstream里有定義指向localhost:8082 也就是說(shuō)請(qǐng)求:http://localhost:8083/MyBlog2 等于 http://localhost:8082/MyBlog2
所以在8081的tomcat項(xiàng)目里用ajax調(diào)用8083下的MyBlog2開頭的路徑是會(huì)被轉(zhuǎn)發(fā)到8082端口上的 配置下面一句便可跨域訪問
#允許cros跨域訪問
add_header 'Access-Control-Allow-Origin' '*';
ajax前端代碼
$.ajax({
url : "http://localhost:8083/MyBlog2/test.do",
contentType: "application/json",
type : 'post',
dataType:"json",
processData:false,
contentType:false,
async:true,
success : function(data){
alert(data);
},
error : function(data){
alert(data);
}
});
修改完配置文件之后reload一下使配置生效
sudo nginx -s reload
再次刷新頁(yè)面可以看到在8081下調(diào)用8082項(xiàng)目的接口已可正常返回?cái)?shù)據(jù) 如圖
關(guān)于nginx location配置下面的鏈接講的比較細(xì),可以參考一下
https://www.cnblogs.com/cheyunhua/p/7927674.html
nginx作為一個(gè)服務(wù)器能做的還有很多 在反向代理 負(fù)載均衡 前后端分離 方面比較有優(yōu)勢(shì) 有待后續(xù)繼續(xù)學(xué)習(xí)