什么是nginx?
Nginx (engine x) 是一款轻量级的Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。
跨域问题原因:
浏览器访问时会创建请求头,请求头中存在ui服务器域名,当它去访问一个跨域服务器时仍然带着这个ui服务器域名,这时跨域服务器会拦截这个带着ui服务器域名的访问,浏览器就会报不允许跨域访问的错。
第一种方案:(适用于跨域服务器你不能动的情况)
ui服务器不用nginx代理,只用Nginx代理跨域服务器,代理服务器实现允许跨域请求后,浏览器访问UI服务器,下载UI到浏览器,浏览器把要发给跨域服务器的请求发给代理服务器(要发给UI服务器的请求仍然发给UI服务器),代理服务器再去跨域服务器请求(跨域是浏览器触发的,代理服务器访问跨域服务器就不会有跨域问题),获取到跨域服务器的响应后再把该响应返给浏览器,这样就不需要跨域服务器做任何改变就可以实现跨域访问。
第二种方案:
把ui所在的服务器和跨域服务器都用nginx代理转发,浏览器访问nginx,nginx到ui服务获取ui,再把ui下载到浏览器,浏览器发起ui中的URL,该URL为Nginx封装后的跨域服务器的URL或ui服务器的URL,该URL到达Nginx之后,会被转发到跨域服务器或ui服务器,请求处理完毕后,会通过Nginx中转返回给浏览器。暴露出来的或者浏览器所发起的url都是nginx的url,nginx去跨域服务器和ui服务器获取响应,返给浏览器,这样就没有跨域问题了。
什么是反向代理?
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
可参考下图:
简单来说:
正向代理:是代表客户端去请求接受响应
反向代理:是代表服务端来接受请求去响应
第一次写,写的不好,请多指教哈。
这是我作为前端对nginx解决跨域问题的理解,如果写的不对的地方,请指教,感激不尽!!!