博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nginx实现跨域访问
阅读量:5218 次
发布时间:2019-06-14

本文共 1780 字,大约阅读时间需要 5 分钟。

跨域概念

简单来说:两个url只要协议、域名、端口有任何一个不同,都被当作是不同的域,相互访问就会有跨域问题。

案例

例如:在开发前后端完全分离的系统中,服务端代码属于一个工程,前端代码属于另一个工程,人员在进行接口对接时,可能会在webstorm等工具进行编码,并用webstorm的内置服务器进行调试,这就会有跨域问题,因为,webstorm内置服务器默认前缀部分是,而服务端接口的路径前缀部分一定不会是这样,这样便产生了跨域访问的问题。

案例代码

例如如下这一段代码,在webstorm中调试这个ajax所在的页面,页面路径是,而要访问的接口路径是

[javascript]   
 
 
  1. $(function(){  
  2.        $.ajax({  
  3.            url: "http://localhost:8888/ssm/interfaces/test/m006",  
  4.            type: "POST",  
  5.            async: false,  
  6.            dataType: "json",  
  7.            contentType: "application/json",  
  8.            cache: false,  
  9.            data: JSON.stringify({  
  10.                        "id": "bgdsdgs",  
  11.                        "name": "name",  
  12.                        "email": "429661318@qq.com",  
  13.                        "voModel2": [{  
  14.                            "id": "429661318@qq.com",  
  15.                            "v3": {
    "id":"sdfghjkl"}  
  16.                        }]  
  17.                    }),  
  18.            success: function(data) {  
  19.                $("#text").html(JSON.stringify(data));  
  20.            },  
  21.            error: function(text) {  
  22.                $("text").html(JSON.stringify(text))  
  23.            }  
  24.        })  

直接访问,打开浏览器的控制台查看,没错,提示的正是无法进行跨域访问。 

这里写图片描述

1、要解决这个问题很简单,只要使页面的前缀和接口的前缀一致就可以了,因此可以使用nginx进行反向代理。打开nginx目录下的conf文件夹,在nginx.conf文件的配置如下

[xml]   
 
 
  1. #默认监听80端口,ip后面不加端口号默认就是80  
  2. listen       80;  
  3. #服务器地址  
  4. server_name  localhost;  
  5. #charset koi8-r;  
  6. #access_log  logs/host.access.log  main;  
  7. #项目根目录,一般就是启动页  
  8. location / {  
  9.     #项目所在目录  
  10.     root   C:\Users\shengmengqi\WebstormProjects\angularJsFrame;  
  11.     #假设across-domain.html的首页,如果之后页面中跳转也是基于http://localhost/跳转  
  12.     index  across-domain.html;  
  13. }  
  14. #作用:访问的http://localhost/ssm/interfaces/相当于一个代理url,实际访问的  
  15. 是http://localhost:8888/ssm/interfaces/  
  16. location /ssm/interfaces/{  
  17.     proxy_pass http://localhost:8888/ssm/interfaces/;  
  18. }  

2、配置完毕,将ajax中的接口路径改为,将ngnix启动起来,在任务管理器中是否有nginx进程,有的话说明启动成功,如果没有,可以查看nginx目录下log文件夹中的error.log,看哪里有问题进行修改,启动成功后,在浏览器地址栏直接访问localhost,这次结果就正确了。 

这里写图片描述

这次的请求其实是走了nginx代理服务器的 

这里写图片描述

总结

nginx的实际原理就是配置一个代理路径替换实际的访问路径,使得浏览器认为访问的资源都是属于相同协议,域名和端口的,而实际访问的并不是代理路径,而是通过代理路径找到实际路径进行访问,所以,不妨将nginx看作是给浏览器的一种障眼法好了,哈哈~

转自:http://blog.csdn.net/smq29661318/article/details/51023558

转载于:https://www.cnblogs.com/duanxz/archive/2012/10/25/2738664.html

你可能感兴趣的文章
怎么学习逆向工程?
查看>>
Sea.js学习3——Sea.js的CMD 模块定义规范
查看>>
高通平台Camera调试(一)【转】
查看>>
(cljs/run-at (JSVM. :all) "一次说白DataType、Record和Protocol")
查看>>
如何使用java代码进行视频格式的转换(FLV)
查看>>
正则表达式的使用
查看>>
深拷贝+浅拷贝
查看>>
asterisk
查看>>
linux 多核
查看>>
POJ 1273 Drainage Ditches
查看>>
Theano 学习四 pool_2d
查看>>
多线程下载服务器上的资源
查看>>
Scheme Programming language II
查看>>
Python和数据结构学习 --- 5
查看>>
【luogu P4462 [CQOI2018]异或序列】 题解
查看>>
【luogu P1494 [国家集训队]小Z的袜子】 题解
查看>>
AC自动机的另类匹配算法
查看>>
使用SpringContextHolder获取bean实例
查看>>
lua windows 安装(解决lua forwindows 无法安装问题)
查看>>
vue中eslint报错的解决方案
查看>>