Nginx反向代理解决Vue跨域问题

news/2024/7/10 3:17:05 标签: nginx, java, vue

1.场景

vue_2">项目前后端分离,前端项目使用vue框架书写,在请求后端接口时,由于服务运行在不同的服务器,就会出现跨域问题。

示例:

运行环境:Windows,

前端项目的项目地址为:192.168.1.2:8082,

后端项目的项目地址为:192.168.1.3:8083, 由于ip地址不同,肯定会存在跨域问题

2.解决方法

(1) 后端配置跨域,如下是springboot的配置

java">public class TestApplication implements WebMvcConfigurer {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }

    @Override
    protected void addCorsMappings(CorsRegistry registry) {
        // 解决跨域问题
        registry.addMapping("/**")
                .allowCredentials(true)
                .allowedHeaders("*")
                .allowedOrigins("*")
                .allowedMethods("*")
                .maxAge(3600);
        super.addCorsMappings(registry);
    }
}
但是在复杂请求时(带自定义的请求头参数),由于浏览器的自检机制,会先发送一次options请求,这无疑会增加服务器的负担,这就很烦,那么怎么解决这个问题呢?马上揭晓答案

nginxoptions_45">(2) 使用nginx进行反向代理,彻底解决跨域问题,再也不用担心options请求了

nginx_47">第一步:下载nginx并解压

在这里插入图片描述

nginxconf_50">第二步,打开conf目录下的nginx.conf文件,找到以下代码块

nginx_52">(1)nginx配置文件基本参数的释义

server {
		listen  8085;							// 我们要监听的端口(可以是没有被占用的任意端口号)
		server_name 192.168.1.1;				// 你的服务器ip地址
		location /api {							// 要代理的路径,这个是指以api开头
			proxy_pass http://127.0.0.1:8082/;	// 代理指向的ip地址以及端口号
		}
}

(2)上面我们说到前端的项目地址为192.168.1.2:8082,那么我们实际就可以这样来配置

server {
	listen  8085;									// 我们要监听的端口(可以是没有被占用的任意端口号)
		server_name 192.168.1.2;					// 你的服务器ip地址
		location / {								// 代理/开头的路径
			proxy_pass http://192.168.1.2:8082/;	// 代理指向的ip地址以及端口号,切记加上http
		}
		location /api {								//  代理api开头的路径
			proxy_pass http://192.168.1.3:8083/;	//	指向后端接口的IP地址加端口号
		}
}

nginxexe_80">(3)点击nginx.exe将其启动

在这里插入图片描述

这样我们在访问http://192.168.1.2:8085的时候,就会打开你的前端项目页面,在请求接口时,需要在前端项目将url改为例如http://192.168.1.2:8085/api/user/login。这样就会将请求的接口地址带到http://192.168.1.3:8083/user/login上,可以发现,我们前端项目的域名和请求后端接口的域名都是192.168.1.2:8085,这样就不会存在跨域问题了。


http://www.niftyadmin.cn/n/1169567.html

相关文章

Zabbix监控交换机设置方法

Zabbix监控服务端已经配置完成,现在要使用Zabbix对交换机进行监控。 具体操作: 以下操作在被监控的交换机上进行,这里以Cisco交换机为例。 一、登录到Cisco交换机,开启snmp服务 注意:使用telnet或者仿真终端登录到交换…

SpringBoot之Filter和Interceptor

SpringBoot之Filter和Interceptor Filter 1.定义 Filter依赖于Servlet容器,属于Servlet规范的一部分它可以对客户端与资源之间的请求与响应的信息进行过滤以及处理。 2.执行流程 当Web容器接收到一个对资源的请求时,它会根据过滤器的过滤规则判断是…

KindEditor 上传漏洞致近百个党政机关网站遭植入

开发四年只会写业务代码,分布式高并发都不会还做程序员? 2月21日消息,近日,安恒明鉴网站安全监测平台和应急响应中心监测发现近百起党政机关网站被植入色情广告页面,分析发现被植入色情广告页面的网站都使用了 KindE…

windows下安装unbantu

下载wubi.exe,傻瓜式安装ubuntu,linux与windows共享操作系统,实在是菜鸟学写的好东东。下载地址:http://www.ubuntu.com/download/ubuntu/windows-installer本文转自 simeon2005 51CTO博客,原文链接:http://blog.51cto…

Flask 教程 第十七章:Linux上的部署

本文转载自:https://www.jianshu.com/p/e9eff3dbc2a2 这是Flask Mega-Tutorial系列的第十七部分,我将把Microblog部署到Linux服务器。 在本章中,我将谈到Microblog应用生命周期中的一个里程碑,因为我将讨论如何将应用部署到生产服…

Java并发编程入门

进程与线程的区别 进程是一段正在执行的程序,是资源分配的基本单元。线程是进程的一个执行单元,线程是轻量级的进程。一个程序中至少有一个进程,一个进程中至少有一个线程 实现线程的几种方式 继承Thread类 public class TestThread exte…

jQuery中的事件和动画

1.鼠标事件 click( ) 触发或将函数绑定到指定元素的click事件 单击鼠标时dblclick( ) 触发或将函数绑定到指定元素的dblclick事件 双击鼠标时mouseover( ) 触发或将函数绑定到指定元素的mouseover事件 鼠标指针移过时 子元素有效mouseout( ) 触发或将函数绑定到指定元素的mouse…

Python中的条件判断

12345678910111213141516171819202122232425262728293031323334353637383940414243# 条件判断# 1print("#1") age 20 if age > 18: print(your age is, age) print(adult) print("---------------------") # 2print("#2") age 3 if age >…