前端开发往往涉及到跨域问题,其中解决方案很多:

1.jsonp 需要目标服务器配合一个callback函数。

  2.window.name+iframe 需要目标服务器响应window.name。

  3.window.location.hash+iframe 同样需要目标服务器作处理。

  4.html5的 postMessage+ifrme 这个也是需要目标服务器或者说是目标页面写一个postMessage,主要侧重于前端通讯。

  5.CORS  需要服务器设置header :Access-Control-Allow-Origin。

  6.nginx反向代理 这个方法一般很少有人提及,但是他可以不用目标服务器配合,不过需要你搭建一个中转nginx服务器,用于转发请求。

个人觉得6才是正规的解决方案。这里给大家介绍一下如何使用nginx做跨域

由于本人使用MAC,下面的命令都是在MAC环境下的,如需要windows,可同步转化

1.nginx 安装

  通过homeBrew 安装nginx   

  命令行: brew install nginx    安装完毕后,

  输入nginx -v 出现版本号,则安装成功 (homebrew 如何安装就不叙述了)    

2.修改nginx的配置文件 

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 }
span.s1 { font: 12.0px ".PingFang SC" }

       文件名:nginx.conf    路径/usr/local/etc/nginx/nginx.conf

  这是最简单的配置

以下代码可以直接复制 全覆盖nginx.conf 文件。

    worker_processes  1;

    events {

        worker_connections  1024;

    }

  

    http {

        include       mime.types;

        default_type  application/octet-stream;

        sendfile        on;

        keepalive_timeout  65;

        server {

            listen       805;    #开辟启动805 端口,原文件是8080端口,由于很多地方使用8080端口,所以此处改为805

           

            server_name  localhost; # 当前服务的域名

            access_log on;

            access_log  logs/host.access.log  ;

            location / {

                #8080端口号是第一步开启的本地服务端口号 

                proxy_pass http://localhost:8080;     

             

            }

        

            location /uc {                 

        #uc 是对应的ajax 请求的地址,uc下所有请求都会被重写到http://qa.cx-psi.wmdev2.lsh123.com/去做请求,就可以实现跨域了

                rewrite ^/(.*)$ /$1 break;

                proxy_pass http://qa.cx-psi.wmdev2.lsh123.com/;

            }

            location /basic {  

                #每有一个新的代理需求,就新增一个location,同上

                #反向代理,达到前后端分离开发的目的

                rewrite ^/(.*)$ /$1 break;

                # include uwsgi_params;

                proxy_pass http://qa.cx-psi.wmdev2.lsh123.com/;

            }

        }

 

          include servers/*;

    }

3.  跨域步骤

    1.在完成了对nginx的配置文件修改后,

     首先启动本地服务,无论是gulp,webpack,fis3 ,都会跑一个本地服务起来,访问地址是8080 

    如图:这里的访问地址是IP:8080  也可以用localhost:8080 来访问 

     很明显,可以看出,全部跨域抱红了。

   

这个时候,启nginx 服务, 启动成功后,访问localhost:805端口 ,即可实现跨域

      

再次配合图片解释下,这里location /basic   这个basic 是自己手动配置的  指的是 请求的路径,

也就是说,每一个不同的接口路径 都需要配置一次。而proxy_pass 对应的则是目标后端服务器域名

      location /basic {  

                #每有一个新的代理需求,就新增一个location

                #反向代理,达到前后端分离开发的目的

                rewrite ^/(.*)$ /$1 break;

                # include uwsgi_params;

                proxy_pass http://qa.cx-psi.wmdev2.lsh123.com/;

            }

    

 

               是不是很简单哇。 快动手试试吧!

  Ps:可能需要用到的命令

    ###nginx5个命令
    nginx 启动nginx
    ps -ef|grep nginx 查看已启动的nginx服务进程
    Kill -TERM 15800 (立刻停止) 【15800:上面一个命令会看到这个进程号】
    sudo nginx -t 检验配置文件是否有错误(sudo: /usr路径下资源需要管理员权限)
    sudo nginx -s reload reload nginx配置文件
    ###nginx 配置文件
    /usr/local/etc/nginx/nginx.conf (配置文件路径

    

  

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545; min-height: 14.0px }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingFang SC"; color: #454545 }
span.s1 { font: 12.0px ".PingFang SC" }
span.s2 { font: 12.0px "Helvetica Neue" }

nginx 反向代理,支持跨域,前后分离的更多相关文章

  1. nginx反向代理实现跨域请求

    nginx反向代理实现跨域请求 跨域请求可以通过JSONP实现,缺点是需要修改被请求的服务器端代码进行配合,稍显麻烦通过在自己服务器上配置nginx的反向代理,可以轻松实现跨域请求 思路 示例服务器A ...

  2. VUE线上通过nginx反向代理实现跨域

    1.NGINX反向代理实现跨域 VUE代码中配置参考上一篇文章 nginx配置,红色框线内: 代码: location /list { proxy_set_header X-Real-IP $remo ...

  3. nginx反向代理解决跨域问题

    跨域:浏览器从一个域名的网页去请求另一个域名的资源时,域名.端口.协议任一不同,都是跨域 . 下表格为前后端分离的域名,技术信息:   域名 服务器 使用技术 前端 http://b.yynf.com ...

  4. 利用nginx 反向代理解决跨域问题

    说到nginx,不得不说真的很强大,也带来很多便利用于解决一些头疼的难题. 一般来说可以用来做:静态页面的服务器.静态文件缓存服务器.网站反向代理.负载均衡服务器等等,而且实现这一切,基本只需要改改那 ...

  5. 前端通过Nginx反向代理解决跨域问题

    在前面写的一篇文章SpringMVC 跨域,我们探讨了什么是跨域问题以及SpringMVC怎么解决跨域问题,解决方式主要有如下三种方式: JSONP CORS WebSocket 可是这几种方式都是基 ...

  6. nginx反向代理解决跨域问题,使本地调试更方便

    我们可能都会遇到一个这样的问题,线上环境是https://...,本地启动了项目,域名是localhost:8000等,本地想要访问线上的接口,直接在本地调试,却提示跨域,这个时候我们可以配置ngin ...

  7. Nginx 反向代理解决跨域问题分析

    当你遇到跨域问题,不要立刻就选择复制去尝试.请详细看完这篇文章再处理 .我相信它能帮到你. 分析前准备: 前端网站地址:http://localhost:8080 服务端网址:http://local ...

  8. nginx反向代理解决跨域

    nginx作为反向代理服务器,就是把http请求转发到另一个或者一些服务器上.通过把本地一个url前缀映射到要跨域访问的web服务器上,就可以实现跨域访问.对于浏览器来说,访问的就是同源服务器上的一个 ...

  9. vue前后分离项目部署(不同端口号,nginx反向代理解决跨域问题)

    #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #erro ...

  10. windows环境下 nginx+iis 反向代理解决跨域问题

    项目基本完成,是时候花点时间整理一下最近的姿势了 1 什么是跨域? 网上对于跨域的概念会有大篇幅的文章去解释,似乎有点玄乎,初学者很容易对这个概念产生恐惧,跨域其实很简单,其实只要知道一点,无法跨域访 ...

随机推荐

  1. gradle 修改生成的apk的名字

    在app的module里的build.gradle文件中,在android { ...}里面加上这样一段代码,即可修改生成的apk的文件名. android.applicationVariants.a ...

  2. Property属性, KVC键值编码OC…

    1.属性:帮你自动生成setter 和 getter 方法      属性的声明:(写在.h中)      格式: @property 数据类型 属性名      属性的实现:(写在.m中)      ...

  3. (三十七)从私人通讯录引出的细节I -Notification -Segue -HUD -延时

    细节1:账号和密码都有值的时候才可以点击登录按钮,因此应该监听文本框的文本改变. 因为文本框的文本改变代理不能处理,因此应该使用通知Notification. 文本框文本改变会发出通知:通知的前两个参 ...

  4. 20_Android中apk安装器,通过WebView来load进一个页面,Android通知,程序退出自动杀死进程,通过输入包名的方式杀死进程

     场景:实现安装一个apk应用程序的过程.界面如下: 编写如下应用,应用结构如下: <RelativeLayout   编写activity_main.xml布局: <Relative ...

  5. div+css基础教程

    本文存下来作为备忘. 第一节  了解div+css 一.什么是div+css div元素是html(超文本语言)中的一个元素,是标签,用来为html文档内大块(block-level)的内容提供结构和 ...

  6. 双向链表设计与API实现

    为什么需要双向链表? 单链表的结点都只有一个指向下一个结点的指针 单链表的数据元素无法直接访问其前驱元素 逆序访问单链表中的元素是极其耗时的操作! 双向链表的定义 在单链表的结点中增加一个指向其前驱的 ...

  7. 【62】Spring总结之bean(3)

    Spring核心机制:依赖注入 Java应用(从applets的小范围到全套n层服务端企业应用)是一种典型的依赖型应用,它就是由一些互相适当地协作的对象构成的.因此,我们说这些对象间存在依赖关系.加入 ...

  8. 数据库用户映射到SQL Server登录名

    由于不是固定在一如电脑开始,经常需要把数据备份与恢复.或者是帮助客户修改程序,接收到客户备份好的数据,需要在电脑恢复. 这样就需要将数据库用户映射到 SQL Server 登录名.如何映射?可使用下面 ...

  9. Bookmarkable Pages

      Build a Bookmarkable Edit Page with JDeveloper 11g Purpose In this tutorial, you use Oracle JDevel ...

  10. SpriteBuilder中如何简单的重置APP保存的数据

    在任意一款APP中,我们可能需要在磁盘上保存一些游戏数据,以便在下一次运行APP时恢复游戏数据. 但是由于在测试阶段,我们需要快速恢复初始状态的游戏数据,该如何做呢? 非常简单,只需要将APP从真机或 ...