Nginx 實(shí)現(xiàn)AJAX跨域請求
AJAX從一個域請求另一個域會有跨域的問題。那么如何在nginx上實(shí)現(xiàn)ajax跨域請求呢?要在nginx上啟用跨域請求,需要添加add_header Access-Control*指令。如下所示:
location /{add_header 'Access-Control-Allow-Origin' 'http://other.subdomain.com';add_header 'Access-Control-Allow-Credentials' 'true';add_header 'Access-Control-Allow-Methods' 'GET'; ......the rest of your configuration here...... }注釋如下:
第一條指令:授權(quán)從other.subdomain.com的請求 第二條指令:當(dāng)該標(biāo)志為真時,響應(yīng)于該請求是否可以被暴露 第三天指令:指定請求的方法,可以是GET,POST等如果需要允許來自任何域的訪問,可以這樣配置:
Access-Control-Allow-Origin: *
重啟nginx
service nginx reload
ajax跨域請求測試
成功時,響應(yīng)頭是如下所示:
HTTP/1.1 200 OKServer: nginxAccess-Control-Allow-Origin: other.subdomain.com
用Nginx和Apache的反向代理解決Ajax的跨域問題
傲游主站上有一個很吸引人的功能,就是下載次數(shù)計數(shù),如下圖所示。這個功能就是利用了上述技術(shù)實(shí)現(xiàn)的。

從下圖的Firebug中可以看到,該頁面通過Ajax反復(fù)請求一個名為/api/counter的路徑以徑獲取最新的下載數(shù)量。

而這個輸出路徑實(shí)際上在服務(wù)器上是不存在的,這個路徑只是另外一臺服務(wù)器某個路徑而已,這就是使用了Nginx的反向代理功能實(shí)現(xiàn)的。
1、Nginx
回到計數(shù)器的這個例子,Nginx的配置片段如下所示:
location /api/counter { rewrite (.*) /out break; proxy_pass http://hfahe.maxthon.com; proxy_set_header Host "hfahe.maxthon.com"; } 那么訪問http://www.maxthon.cn/api/counter這個地址,輸出和直接訪問http://hfahe.maxthon.com/out這個地址是完全一樣的,如下圖所示。通過這種方式,本地的Ajax就能夠讀取到其他遠(yuǎn)程服務(wù)器的數(shù)據(jù)了。

proxy_set_header參數(shù)在需要進(jìn)行域名的轉(zhuǎn)發(fā)時使用。Nginx還可以進(jìn)行端口的轉(zhuǎn)發(fā),只需將proxy_pas
s配置修改為http://hfahe.maxthon.com:81這種形式即可。
2、Apache
Apache反向代理需要使用mod_proxy和mod_proxy_http.so等模塊。
新聞熱點(diǎn)
疑難解答
圖片精選