1.跨域訪問示例
假設(shè)有兩個網(wǎng)站贺奠,A網(wǎng)站部署在:http://localhost:81 即本地ip端口81上;B網(wǎng)站部署在:http://localhost:82 即本地ip端口82上创橄。
現(xiàn)在A網(wǎng)站的頁面想去訪問B網(wǎng)站的信息,A網(wǎng)站頁面的代碼如下(這里使用jquery的異步請求):
<title>website A</title>
<h2>Index</h2>
<div id="show"></div>
<script type="text/javascript">
$(function () {
$.get("http://localhost:82/api/values", {}, function (result) {
$("#show").html(result);
})
})
2.nginx反向代理解決跨域問題
2.1nginx配置
找到nginx的配置文件“Nginx/conf/nginx.conf”,修改一下信息:
server {
listen 80; #監(jiān)聽80端口,可以改成其他端口
server_name localhost; # 當(dāng)前服務(wù)的域名
location / {
proxy_pass http://localhost:81;
proxy_redirect default;
}
location /apis { #添加訪問目錄為/apis的代理配置
rewrite ^/apis/(.*)$ /$1 break;
proxy_pass http://localhost:82;
}
#以下配置省略
配置解釋:
1.由配置信息可知剩膘,我們讓nginx監(jiān)聽localhost的80端口,網(wǎng)站A與網(wǎng)站B的訪問都是經(jīng)過localhost的80端口進(jìn)行訪問盆顾。
2.我們特殊配置了一個“/apis”目錄的訪問,并且對url執(zhí)行了重寫畏梆,最后使以“/apis”開頭的地址都轉(zhuǎn)到“http://localhost:82”進(jìn)行處理您宪。
3.rewrite ^/apis/(.*)$ /$1 break;
代表重寫攔截進(jìn)來的請求,并且只能對域名后邊以“/apis”開頭的起作用奠涌,例如www.a.com/apis/msg?x=1重寫宪巨。只對/apis重寫。
rewrite后面的參數(shù)是一個簡單的正則 ^/apis/(.*)$ ,$1代表正則中的第一個(),$2代表第二個()的值,以此類推溜畅。
break代表匹配一個之后停止匹配捏卓。
2.2訪問地址修改
既然配置了nginx,那么所有的訪問都要走nginx慈格,而不是走網(wǎng)站原本的地址(A網(wǎng)站localhost:81,B網(wǎng)站localhost:82)怠晴。所以要修改A網(wǎng)站中的ajax訪問地址,把訪問地址由
“http://localhost:82/api/values”改成 ==> “/apis/api/values”浴捆。如下代碼:
<title>website A</title>
<h2>Index</h2>
<div id="show"></div>
<script type="text/javascript">
$(function () {
$.get("/apis/api/values", {}, function (result) {
$("#show").html(result);
})
})