nginx怎么解決跨域問題

nginx怎么解決跨域問題

如何用nginx解決前端跨域問題?

前言

在開發靜態頁面時,類似Vue的應用,我們常會調用一些接口,這些接口極可能是跨域,然后瀏覽器就會報cross-origin問題不給調。

最簡單的解決方法,就是把瀏覽器設為忽略安全問題,設置–disable-web-security。不過這種方式開發PC頁面到還好,如果是移動端頁面就不行了。

解決辦法

使用nginx轉發請求。把跨域的接口寫成調本域的接口,然后將這些接口轉發到真正的請求地址。

舉個栗子

例如我們在開發一個Vue應用。

原先:

調試頁面是:http://192.168.1.100:8080/

請求的接口是:http://ni.hao.sao/api/get/info

步驟一:

請求的接口是:http://192.168.1.100:8080/api/get/info

PS:這樣就解決了跨域問題。

步驟二:

安裝好Nginx后,去到/usr/local/etc/nginx/目錄(這是Mac的),修改nginx.conf文件。

步驟三:

把默認的server配置注釋掉。

在下面增加:

???server{ ????????listen?8888; ????????server_name??192.168.1.100; ? ????????location?/{ ????????????proxy_pass?http://192.168.1.100:8080; ????????} ? ????????location?/api{ ????????????proxy_pass?http://ni.hao.sao/api; ????????} ????}

保存后,啟動Nginx。

PS:并不需要太了解Nginx的配置,很簡單的。

步驟四:

訪問:http://192.168.1.100:8888/

搞定。

PS:注意訪問的端口是‘8888’,有其他域的地址繼續加location就行了。

錯誤示范

我一開始不太懂Nginx的配置,以為可以如下配置。

????server{ ????????listen?8080; ????????server_name??192.168.1.100; ? ????????location?/api{ ????????????proxy_pass?http://ni.hao.sao/api; ????????} ????}

之所以這么寫,是我認為這樣可以讓Nginx幫我監聽8080的請求,然后只轉發匹配的請求。我沒有意識到的是Nginx這么寫后,是需要占用8080端口的。

既然需要占用端口,那也就不能再被其他相同協議的進程占用,就導致開發的頁面無法以8080端口啟用。經同事提點,才想起這事情,換下思路,就有了最上面的方法。

總結

其實不僅是在開發調試時候能這么干,在生產環境也能這么玩。利用Nginx轉發請求之后,就能夠讓所要部署的靜態頁面不需要放在跟請求接口同域的地方。

附錄

如果發現請求出現問題,且發現是Nginx的報錯,那只需要找到Nginx的error.log,就可以知道原因。

前提需要在nginx.conf配置error.log:

error_log??logs/error.log;

error.log在Mac的位置:

/usr/local/Cellar/nginx/1.15.8/logs/error.log

更多Nginx相關知識,請訪問Nginx使用教程欄目!

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享