宝塔上线前后端项目操作

目录

一、上线前端项目

二、上线后端项目

三、域名配置

[3.1 前端域名配置](#3.1 前端域名配置)

[3.2 后端域名配置](#3.2 后端域名配置)

四、跨域配置

[4.1 网关支持(Nginx)](#4.1 网关支持(Nginx))

[4.2 后端配置跨域](#4.2 后端配置跨域)


一、上线前端项目

(1) 下载nginx

(2) 下载tomcat 这步是为了下载java

(3) 添加一个站点

(4) 站点创建好了,进入到站点的目录 并删除目录内所有文件

有一个文件删不掉没关系 不影响 那个是php自带的文件

(5) 将前端打包好的dist文件直接扔进这个目录即可

(6) 最后你在网址中访问你刚才填写过的ip就可以访问你的前端项目了 非常方便

二、上线后端项目

(1) 进入这个目录 来创建一个后端项目的文件夹

(2) 把jar包放到文件夹下

(3) 因为我的后端项目使用的是8080端口,所以将我们刚才的tomcat关掉,它占用了8080端口

(4) 我们来添加一个java项目

(5) 输入正确信息后 放开我们防火墙的8080端口

(6) 这样前后端就打通了

a. 前端配置好上线的请求地址

b. 后端配置好跨域 并配置好允许跨域的域名

但是我这里访问前端的时候出现了一个问题,问题就是我前端第一次是用vite的脚手架打包的,打包之后并没有静态化的页面,所以我只能在服务器的nginx上进行一些列配置,以下是配置过程的连接 宝塔nginx部署前端页面刷新报404

三、域名配置

3.1 前端域名配置

网络传输简单介绍:

a. 前端项目访问:用户输入网址 => 域名解析服务器(把网址解析为 ip 地址 / 交给其他的域名解析服务) => 服务器 =>(防火墙)=> nginx 接收请求,找到对应的文件,返回文件给前端 => 前端加载文件到浏览器中(js、css) => 渲染页面

b. 后端项目访问:用户输入网址 => 域名解析服务器 => 服务器 => nginx 接收请求 => 后端项目(比如 8080端口)

(1) 购买域名,服务器在哪就在哪买域名就可以了,这个买域名的教程我就不教了,大家看看bilibili其实都有很完备的教程

(2) 我这里准备好了一个域名

我们点击域名进行配置

(3) 主机记录就是你当前域名的前缀,记录值就是你当前域名所对应的ip地址

其中的记录类型 请参考你网站需要的类型

(4) 那么我们现在配置好了,我们来试一下现在能不能访问到前端页面

从图片可以看出 目前还不能使用刚才配置好的域名进行访问

(5) 因为我们的nginx配置上只有ip没有域名,所以它并不能跳转到对应的页面

我们需要在nginx上添加上我们的域名

这样我们的网站就成功的加上了域名

配置好域名后,把之前配置的临时ip域名删除掉,这样前端的域名算是大功告成了

(6) 这个域名配置好后,别忘记改前端项目上线的url地址,修改完后,重新打包上传到服务器

3.2 后端域名配置

(1) 去云解析DNS那里点击域名,进去再添加一个记录

把后端的域名添加进来

(2) 域名生效后,我们其实就可以访问后端项目了,

类似于 http://backend.*****.***:8080/api/user/search

因为我后端项目设置的端口号是8080,但是这样很丑,难道每次我们都要让用户加个端口去访问吗?虽然说用户不可能直接调后端,但是对于开发者来说,其实加个端口号也不是那么舒服ㄟ( ▔, ▔ )ㄏ 能不能把这个端口号去掉?

(3) 去再配置一个nginx,去新建一个站点,然后点击新站点的设置

我们让nginx来转发请求,甚至你不光能做转发,还能做改写请求去做拦截等等

(4) 站点添加好后,点击刚才添加好的站点的设置,然后添加一个反向代理

目的是当我们访问到 域名:80端口的时候 nginx帮我做个反向代理,映射到8080端口上去

nginx 反向代理:替服务器接收请求,转发请求

因为配置在当前服务器上,所以我们要反向代理到当前服务器的8080端口

配置成功后就是这样了 👇

(5) 访问一下,不带端口号,成功了

http://域名/项目路径

四、跨域配置

🪔 什么是跨域?浏览器为了用户的安全,仅允许向 同域名、同端口 的服务器发送请求。

💬 我们前端的域名是user,后端域名是backend,域名不一样就出现了跨域,跨域的话就报错了

我们可以看一下网络请求:

为了防止跨域,或者说为了检测跨域,浏览器它会在发送正式请求之前,发送一个预检请求,预检的请求方法是OPTIONS。

预检请求经常用来检查是否跨域,或者换一句话说,当我们请求的域名是和当前网页域名不同的时候,它就会发送预检请求。

可以自己再去了解一下,什么情况下会发送遇见请求,有很多种情况,比如说域名不同😴

如何解决跨域?(三种方式)

1 把域名、端口改成相同的

2 网关支持(Nginx)

3 修改后端服务

4.1 网关支持(Nginx)

第一种把域名设置成相同的我就不演示了,这个没什么必要,主要演示后两种

让服务器告诉浏览器:允许跨域(返回 cross-origin-allow 响应头)

在nginx配置跨域,点击设置

把之前配置的反向代理删除

因为我们在nginx中配置跨域就顺便一起把反向代理都在配置文件中写好,这里就先删除掉

把配置粘贴进去,然后点击保存

bash 复制代码
location ^~ /api/ {
    proxy_pass http://127.0.0.1:8080/api/;
    add_header 'Access-Control-Allow-Origin' $http_origin;
    add_header 'Access-Control-Allow-Credentials' 'true';
    add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
    add_header Access-Control-Allow-Headers '*';
    if ($request_method = 'OPTIONS') {
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Origin' $http_origin;
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
        add_header 'Access-Control-Max-Age' 1728000;
        add_header 'Content-Type' 'text/plain; charset=utf-8';
        add_header 'Content-Length' 0;
        return 204;
    }
}

这样我们访问就不会出现跨域错误了

4.2 后端配置跨域

(1) 第一种方式: 配置 @CrossOrigin 注解

像这样 在controller类上添加注解 然后配置哪些域名可以在这个controller类中进行跨域

(2) 第二种方式:第二种方式:添加 web 全局请求拦截器

同理:在红框位置配置的你允许跨域的ip地址即可

java 复制代码
/**
 * 全局跨域配置
 *
 * @author yupi
 */
@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        // 覆盖所有请求
        registry.addMapping("/**")
                // 允许发送 Cookie
                .allowCredentials(true)
                // 放行哪些域名(必须用 patterns,否则 * 会和 allowCredentials 冲突)
                .allowedOriginPatterns("*")
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                .allowedHeaders("*")
                .exposedHeaders("*");
    }
}
相关推荐
程序员敲代码吗4 分钟前
如何通过命令行启动COMSOL的参数化、批处理和集群扫描
java·c#·bash
晚霞的不甘6 分钟前
揭秘 CANN 内存管理:如何让大模型在小设备上“轻装上阵”?
前端·数据库·经验分享·flutter·3d
MX_93599 分钟前
Spring的bean工厂后处理器和Bean后处理器
java·后端·spring
小迷糊的学习记录15 分钟前
0.1 + 0.2 不等于 0.3
前端·javascript·面试
市场部需要一个软件开发岗位25 分钟前
JAVA开发常见安全问题:纵向越权
java·数据库·安全
历程里程碑38 分钟前
普通数组----合并区间
java·数据结构·python·算法·leetcode·职场和发展·tornado
梦帮科技1 小时前
Node.js配置生成器CLI工具开发实战
前端·人工智能·windows·前端框架·node.js·json
程序员泠零澪回家种桔子1 小时前
Spring AI框架全方位详解
java·人工智能·后端·spring·ai·架构
CodeCaptain1 小时前
nacos-2.3.2-OEM与nacos3.1.x的差异分析
java·经验分享·nacos·springcloud
VT.馒头1 小时前
【力扣】2695. 包装数组
前端·javascript·算法·leetcode·职场和发展·typescript