🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 解决跨域 在众多的解决跨域方式中, 都不可避免的都需要服务端进行支持, 使用Nginx可以纯前端解决请求跨域问题。 特别是在前后端分离调试时, 经常需要在本地起前端工程, 接口希望拉取服务端的实际数据而不是本地的mock。 而如果本地程序直接访问远程接口, 肯定会遇到跨域问题。现在前端成熟的做法,一般是把node proxy server集成进来。事实上,用Nginx同样可以解决问题,甚至可以应用于线上。 <br> 本地起一个nginx server。server_name是 `mysite-base.com`,比如现在需要请求线上www.kaola.com域下的线上接口 `www.kaola.com/getPCBanner`… 的数据,当在页面里直接请求,浏览器会报错: ![](https://box.kancloud.cn/809f762d853edebbce5428ca91d17311_1090x62.png) <br> 为了绕开浏览器的跨域安全限制,现在需要将请求的域名改成`mysite-base.com`。同时约定一个url规则来表明代理请求的身份,然后Nginx通过匹配该规则,将请求代理回原来的域。Nginx配置如下: ~~~ #请求跨域,这里约定代理请求url path是以/apis/开头 location ^~/apis/ { # 这里重写了请求,将正则匹配中的第一个()中$1的path,拼接到真正的请求后面,并用break停止后续匹配 rewrite ^/apis/(.*)$ /$1 break; proxy_pass https://www.kaola.com/; } ~~~ 在页面代码里,把请求url换成 `http://mysite-base.com/apis/getPCBannerList.html` 。这样就可以正常请求到数据。 这样其实是通过nginx,用类似于hack的方式规避掉了浏览器跨域限制,实现了跨域访问。