前端開發經常遇到一些服務器由於跨域造成訪問不了的情況。以前BS模式,前后端都是一個人開發,跨域問題造成的開發阻礙不是很明顯,但是現在前端框架欣欣向榮,很多時候變成了CS模式的開發,但瀏覽器天生的跨域限制,造成了開發,特別是對單獨的前端開發人員(不太懂后台開發的人)造成一定開發障礙。還好有nodejs及其一系列前端自動化工具很好的解決了開發時的問題。但今天我要說的用nginx代理來解決這個問題。我覺得很簡單!
以下都是基於mac系統的操作!
先看沒有代理時,隨便訪問網上一個接口, http://web.juhe.cn:8080/finance/exchange/rmbquot
$.get('http://web.juhe.cn:8080/finance/exchange/rmbquot',function(data){
$('#app').html(data);
})
會發現瀏覽器下面,

1.安裝nginx服務器,可以看我的這篇博客http://www.cnblogs.com/fengnovo/p/6230013.html
2.修改下 /usr/local/etc/nginx/nginx.conf 文件,將
server {} 包起來那段修改為以下的
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
server {
listen 8000;
location /api {
proxy_pass http://web.juhe.cn:8080/finance/exchange/rmbquot;
}
}
上面三句是設置服務器端允許請求的客戶端跨域,
下面幾句話是將監聽本機(localhost)8000端口,將8000端口/api請求轉發到 http://web.juhe.cn:8080/finance/exchange/rmbquot
3.然后啟動nginx服務器

4.再修改自己的代碼,將http://web.juhe.cn:8080/finance/exchange/rmbquot改為指向自己nginx服務器http://localhost:8000/api
$.get('http://localhost:8000/api',function(data){
$('#app').html(data);
})
5.這時再訪問,就可以將服務器返回的數據打印出來不會再出現No 'Access-Control-Allow-Origin' header is present報錯

6.對於https的請求也是一樣代理,將 proxy_pass http://web.juhe.cn:8080/finance/exchange/rmbquot; 改為 proxy_pass https://xxx.com;
