nginx反向代理-解决前端跨域问题

前后端分离现在已成主流系统架构设计方式,后台和前台页面分开部署,以便后期维护和扩展,对运维工作十分有利,不会出现因为后台崩溃而导致前台页面访问不了的情况。但是随之而来的就会产生跨域问题。

一、跨域的定义

浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域

1.1域名:
主域名不同:
http://www.fengleaf.cn/experience
http://www.sina.cn/experience
子域名不同:
http://www.ad.fengleaf.cn/experience
http://www.movie.fengleaf.cn/experienc
域名和域名ip:
http://www.baidu.com/index.html
http://180.149.132.47/test.js
1.2端口:
http://www.fengleaf.cn:8080/index.html
http://www.fengleaf.cn:8081/index.html
1.3协议:
http://www.fengleaf.cn
https://www.fengleaf.cn
备注:
1、端口和协议的不同,只能通过后台来解决
2、localhost和127.0.0.1虽然都指向本机,但也属于跨域

示例

前端node服务域名地址:http://localhost:3000
后端接口请求域名地址:http://www.fengleaf.cn/api~

在前端index.html中获取后台接口数据:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>跨域</title>
    <script src="./jquery.js"></script>
</head>

<body>
    <a id="linkBtn">获取接口服务数据</a>
    <textarea id="text" style="width: 400px; height: 100px;"></textarea>
    <script>
        $('#linkBtn').click(function () {
            $.ajax({
                url:'http://www.fengleaf.cn/api/skills',
                type: 'get',
                success: function (data) {
                    var result = JSON.stringify(data);
                    $("#text").val(result);
                }
            })
        })
    </script>
</body>
</html>

会发现直接拿“http://www.fengleaf.cn/api/skills”请求数据,浏览器报错,产生跨域问题:

image.png

二、nginx反向代理解决跨域

1、找到Nginx更目录下的nginx.conf文件,在http对象中添加一个sever,内容如下:

http: {
  server{
      listen 9000;
      server_name localhost;
      location / {
          proxy_pass http://127.0.0.1:3000/;
       }
      location /apis {
          rewrite  ^/apis/(.*)$ /$1 break;
          proxy_pass   http://www.fengleaf.cn;
       }
     }
}

修改完成后执行:sudo nginx -s reload,重新启动Nginx服务

nginx常用命令:

开启nginx服务
sodu nginx 服务器重启命令,关闭
sudo nginx -s reload :修改配置后重新加载生效
关闭nginx:
sudo nginx -s stop :快速停止nginx
sudo quit :完整有序的停止nginx

配置解释:

1.由配置信息可知,我配了一个端口代理,将3000端口代理到了9000端口,这样网站前端页面就可经过localhost的9000端口进行访问,也能使用3000端口访问。

2.我们特殊配置了一个“/apis”目录的访问,并且对url执行了重写,最后使以“/apis”开头的地址都转到“http://www.fengleaf.cn”进行处理。

3.rewrite ^/apis/(.)/1 break; 代表重写拦截进来的请求,并且只能对域名后边以“/apis”开头的起作用,例如www.a.com/apis/msg?x=1重写。只对/apis重写。
rewrite后面的参数是一个简单的正则 ^/apis/(.
),1代表正则中的第一个(),$2代表第二个()的值,以此类推。break代表匹配一个之后停止匹配。

2、更改ur路径
既然配置了nginx,那么所有的访问都要走nginx,而不是走网站原本的地址。所以要修改前端页面的ajax访问地址,把访问地址由
http://www.fengleaf,cn/api/skills”改成“/apis/api/skills”。如下代码:

$('#linkBtn').click(function () {
  $.ajax({
          url: '/apis/api/skills',
          type: 'get',
          success: function (data) {
              var result = JSON.stringify(data);
              $("#text").val(result);
          }
   })            
})

浏览器输入localhost:9000,点击按钮发起请求:


image.png

image.png

已经没有跨域问题了。

三、开发环境解决跨域

nginx一般是用来在生产版本部署时才用到,在开发环境中,可以使用其他的更简便的方法

vue.js项目开发模式跨域设置:在config下的index.js文件中配置proxyTable。

未完待续。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335