nginx配置代理解決瀏覽器跨域問題

節(jié)選自:https://segmentfault.com/a/1190000010197683,親測有效

項目前后端分離后,前后端項目分開開發(fā),尤其是單頁面應用,前端代碼會開啟單獨的服務器,若直接在前端項目中訪問后端API,肯定會遇到因跨域不能訪問的問題。

這時候,用nginx反向代理實現(xiàn)跨域,是最簡單的跨域方式。只需要修改nginx的配置即可解決跨域問題,支持所有瀏覽器,支持session,不需要修改任何代碼,并且不會影響服務器性能。

只需要配置nginx,在一個服務器上配置多個前綴來轉(zhuǎn)發(fā)http/https請求到多個真實的服務器即可。這樣,這個服務器上所有url都是相同的域名、協(xié)議和端口。因此,對于瀏覽器來說,這些url都是同源的,沒有跨域限制。而實際上,這些url實際上由物理服務器提供服務。

環(huán)境:CentOS 7,? nginx/1.12.2

修改nginx 配置文件:/etc/nginx/nginx.conf, 添加以項選項

location / {

? ? proxy_pass http://192.168.1.10:8080/;??????? # 前端服務器地址

}

location /api/ {

??? # 所有對后端的請求加一個 api 前綴方便區(qū)分,真正訪問的時候移除這個前綴

? ? rewrite ^/api/(.*)$ /$1 break;????????????????????????

 # 將真正的請求代理到真實的服務器地址,如 ajax 的 url 為 /api/user/1 的請求被轉(zhuǎn)發(fā)到http://www.serverA.com/user/1

? ? proxy_pass http://localhost:8080;??????????????

}

現(xiàn)在瀏覽器通過訪問 nginx 地址即可打開前端頁面,前端所有對后臺接口的請求都會通過 nginx 轉(zhuǎn)發(fā)到真正的后端服務器,

因為前后端域名一樣,所以瀏覽器不會有跨域問題

2. nginx 代理websocket配置:

$ vim /usr/local/nginx/conf/nginx.conf

# 在http上下文中增加如下配置,確保Nginx能處理正常http請求。

location /ws {

proxy_pass http://192.168.1.117:8080/ws;

proxy_read_timeout 300s;

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_http_version 1.1;

proxy_set_header Upgrade $http_upgrade; p

roxy_set_header Connection "Upgrade";

}

111

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容