【如何使用nginx配置反向代理 _跨域 _Ajax 】 | IT修真院·坑乎
如何使用nginx配置反向代理
我也踩过这个坑( 1 )
已统计您的踩坑,无需重复点击
回答(1)
跨域 Ajax
详细描述
图片
文本
编辑于2024-11-23
  • [成都|荣耀师兄]JS-胡力耘
    0

    因为各大浏览器都遵循同源策略,同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。

    例:

    nginx服务器的默认端口是80,完整的url是http://localhost:80

    tomcat服务器的默认端口是8080,完整的url是http://localhost:8080

    此时,如果我们有一个js文件在nginx服务器上,这个js文件中发起了ajax请求,此时浏览器就会报错,

    ajax.html:34 ajax.html:1<span  <="" span="" style="word-break: break-all; white-space: inherit !important;">
    Failed to load http://localhost/query?name=zhangsan: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

    此时,我们就需要给nginx设置反向代理,将发送至tomcat的请求全部转发到tomcat内进行处理,然后tomcat内的程序处理完成之后返回给nginx,再由nginx返回给服务器。在这个过程中,用户是并不知道是nginx还是tomcat处理了这个请求。

    再解释一下什么是反向代理,什么是正向代理

    正向代理

    正向代理类似一个跳板机,代理访问外部资源。

    我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。

    客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。

    反向代理

    初次接触方向代理的感觉是,客户端是无感知代理的存在的,反向代理对外都是透明的,访问者者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。

    二者的区别:上两张图

    nginx的反向代理

    location ~ /.*.(html|js|css) 表示 html,js,css等静态文件都会由nginx来处理

    location ~ /.* 除了上述的静态文件,全部转发到tomcat

    nginx的location详细配置

    这样就实现了nginx的方向代理了,这样我在nginx中的js脚本可以通过ajax请求来获取tomcat中的servlet返回的数据了。


    编辑于2018-07-02