关键词:
学习课程有一段时间之后,想起买课的初衷是为了学习如何在服务器上部署前后端分离的项目,因此花了几天时间研究,最后功夫不负有心人。期间还是遇到很多问题,特此记录。
一.部署过程
准备:一个已经安装好JDK环境,Nginx的配有公网IP的云服务,数据库环境也不用担心,也就是前后端打包都能正常在服务器上启动起来,关键就是确定 Nginx 的配置。
1.1 Nginx配置
部署的关键其实就是配置Nginx。前端调用的接口经过Nginx反向代理转发到后端。在课程中,Nginx的配置文件除了 Nginx.conf
之外。还可以在 conf.d
目录下面新建各种 XXX.conf
,也会生效。但是,我安装的 Nginx
版本为1.13.1,是没有此目录。实际上也无需,只在 Nginx.conf
里配置即可,也就是多几个 location
配置。
下面是成功实现只用公网IP即可成功部署之后的 Nginx.conf
主要需要变动的内容,其中关键的部分都有注释。
server
# Nginx监听端口,从下面前端的配置来看,也是Nginx作为web服务器的静态页面的访问端口
listen 80;
# 示例公网IP:乱写的,如有雷同,概不负责
server_name 100.11.22.199;
#charset koi8-r;
#access_log logs/host.access.log main;
# 1.代理前端项目地址,即前端Vue框架打的静态文件存放到 /root/web/目录。
location /
alias /root/web/;
index index.html index.htm;
try_files $uri $uri/ /index.html;
# 2. 将前端所有调用后端的带有 **/api/** URL地址转发到本服务器的8880端口,
# 其中8880端口即后端springboot服务端口
# 比如 前端调后端的某个接口地址是 http://100.11.22.199/api/user/login,那么Nginx就 转发到服务器 的
# http://127.0.0.1:8880/user/login接口。
location /api/
# 3.这里的127.0.0.1写成localhost也可以,但是不能写成公网IP。注意端口号后面要加上/
proxy_pass http://127.0.0.1:8880/;
# 下面这些时常规加的一些配置
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_max_temp_file_size 300m;
client_max_body_size 1024M;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 240s;
......
配置文件的增加的配置信息在对应注释中已经说明,下面说一下前端代码中需要配置的操作:
1.2 前端打包配置
由于 locaiton /api/ ......
转发匹配规则是前端调用后端接口的 URL地址都得有 /api/
。因此前端统一配置的 baseURL就也得加上统一前缀 /api,以示区分。在课程的 Wiki项目中就是 .env.prod文件中 的 VUE_APP_SERVER
需要改成VUE_APP_SERVER=http://100.11.22.199:80/api
。这里 是加 /api
还是 /api/
主要看前端调的接口地址 是 类似 /user/login
,还是 user/login
。注意避免多加了一个/。
这样访问页面前端就能正常调用后端的接口了。基本上就部署完成了。
1.3. 配置域名
如果已经有成功解析到公网IP的域名,那么在两个地方修改就可以成功配置域名,并不必须如课程中老师要解析到两个二级域名到同一个公网IP:
-
前端的 VUE_APP_SERVER=http://100.11.22.199:80/api IP地址用域名替换即可,比如我的域名是yourDomain.top,就是 http://yourDomain.top:80/api 。
-
Nginx.conf 中的
server_name 100.11.22.199
IP地址改成 www.youDomain.top。即域名前面得加个www
。记得重启Nginx生效。以上两步之后,就可以用域名代替IP访问,前端调后端地址也是通过域名访问。
四. 关键问题解释
3.1 为什么 前端配置调用后端的的统一URL 即VUE_APP_SERVER=http://100.11.22.199:80/api
答:ip不用解释,然后/api
在 上面Nginx配置的时候也已经说的很清楚了。那么端口为什么是80呢。因为要避免跨域。
简单来说,我们的项目前端静态页面访问完整的链接是 http://100.11.22.199:80/
,端口是80。那么浏览器的同源策略就要求,这个页面中发送到后端的Ajax请求必须也类似 http://100.11.22.199:80/**
,协议,主机IP,端口全部一样,否则就会引报CORS跨域问题,浏览器会直接限制前端发送这样的接口到后端,这就是 VUE_APP_SERVER的端口设置为80的原因。更详细的理论知识见掘金-那些年我们“跨”过的“域”(接口篇)。
然后,后端的wiki springBoot应用启动的端口是8880。由此,就需要在Nginx进行转发,将:80/api/端口的请求,转发给
http://127.0.0.1:8880/;
。因此 Nginx
就像是充电器的转接头一样,连接前端和后端的两头,将前端的请求转发到后端。
那么野生吴彦祖们又要问了:我不想用80端口,想改成其他端口吗,可以吗?
答:可以,首先找一个服务器还没用过的端口,怎么查,看我的这个帖子 JavaWeb开发在服务器常用命令 。里面可以在端口 部分找到如何查看目前服务器已经用的端口。比如我想用8989,查了没有服务在用。然后先在防火墙把这个端口永久放开,如果是云服务器,还得把安全组对应的TCP:8989放开,这样从外网浏览器就可以访问了。之后在Nginx 里面把监听端口 改成 8989。然后和上面一样,把前端BaseURL也配置成 8989。就可以了。
3.2 为什么 proxy_pass 的 配置是 http://127.0.0.1:8880/ 或者 http://localhost:8880/
答:proxy_pass http://127.0.0.1:8880/;
端口是8880就不赘述了。这里的主机地址必须是127.0.0.1或者localhost,也就是 Nginx 代理的是这台云服务器。如果是填的是公网 IP,那么在 调后端接口就会报 502 bad gateway
或 504 gateway time-out
。其实查看Nginx error日志,发现 错误日志输出的是 Connection timed out) while connecting to upstream
。表明 Nginx
无法连接的upstream server。upstream server 就是 http://100.11.22.199:8880/。也就是 Nginx
通过 公网IP连不上服务器的,只能通过自己本地localhost才能连上。
最后,如果本文对你有帮助,还望三连支持,你们的鼓励是对我继续写作的支持。
记录.net部署docker-v指令使用(代码片段)
...ocker的-v指令使用前言之前我浅学了一下docker,方便部署.net项目(部署的是打包之后的项目)dockerfile文件如下:FROMmcr.microsoft.com/dotnet/aspnet:6.0ASbaseWORKDIR/appEXPOSE5031EXPOSE7031FROMmcr.microsoft.com/dotnet/sdk:6.0ASbuildWORKDIR/srcCOPY..ENTRYPOINT["dotnet","Pe... 查看详情
yjzh前端部署记录centos+nginx+vue(代码片段)
前端项目代码打包请检查vue.config.js中proxy中的target最后不要有斜杠/打包npmrunbuild放到服务器/home/project/路径下Node环境配置下载源代码sudowgethttps://npm.taobao.org/mirrors/node/v13.14.0/node-v13.14.0-linux-x64.tar.xznodenpm环境配置mvnode-v13.1 查看详情
部署django项目nginx+uwsgi(代码片段)
记录一下使用Nginx+uwsgi部署Django项目关于域名和端口在这个教程中,我们将假设你的域名为 example.com 。用你自己的FQDN或者IP地址来代替。从头到尾,我们将使用8000端口作为web服务器的公开端口,就像Djangorunserver默认的那... 查看详情
markdowntrm部署历史记录(代码片段)
idea部署springboot项目到外部tomcat(代码片段)
【README】本文旨在记录idea部署springboot项目到外部tomcat的步骤;第一次部署会踩很多坑儿,多查google,多重试;第一次部署,不建议手动录入依赖,因为有可能遗漏;而且网络上资料很多但也很乱,... 查看详情
使用idea部署项目到远程docker(代码片段)
之前在公司都是自动打包部署到远程docker上,也没有考虑过怎么搞的,今天在公司内网docker上测试,跟同事学习了下,记录一下分享,daydayup !!!!!,开始吧。1、安装docker插件这步我不记得有没有安... 查看详情
docker部署应用过程记录(代码片段)
Kibana直接部署到centos中,老是没有任何征兆退出,今天将他移动到docker中部署,以下是部署的过程,做个记录防止忘记 1.安装Docker#yuminstalldocker 2.启动Docker服务#systemctlstartdocker//Docker安装 查看详情
一键部署工具easy-jenkins,界面友好,操作简单(代码片段)
文章目录前言一、项目地址二、使用步骤1.项目结构2.启动主类EasyJenkinsApplication3.安装4.项目启动图三、功能点介绍1.部署列表1.添加连接(部署jar)1.添加本地项目地址2.添加服务器相关信息2.部署jar3.部署成功4.删除5.编辑2... 查看详情
windows使用php启动thinkphp项目,部署配置(代码片段)
HI,I’mShendiphp还是比较简单的,项目需要嵌入一个php项目,这里记录一下使用方法文章目录下载php安装vs工具包配置php.ini配置mysql启动thinkphp项目下载php可以直接从官网下载https://www.php.net/8.1.3的php压缩包关于版本可以... 查看详情
rabbitmq部署及配置与验证(代码片段)
1.场景描述朋友项目需要弄个测试环境,稍微帮忙了下,系统不复杂,但是需要自己安装mysql、Reids、Es、RabbitMq等,Mq主要用在同步用户信息与发送站内消息和短信上,RabbitMq以前没记录,刚好又重新走了一遍,记录下部署、测试... 查看详情
rabbitmq部署及配置与验证(代码片段)
1.场景描述朋友项目需要弄个测试环境,稍微帮忙了下,系统不复杂,但是需要自己安装mysql、Reids、Es、RabbitMq等,Mq主要用在同步用户信息与发送站内消息和短信上,RabbitMq以前没记录,刚好又重新走了一遍,记录下部署、测试... 查看详情
docker学习|第八篇:docker+jenkins单机部署springboot项目(代码片段)
Docker学习|第八篇:Docker+Jenkins单机部署SpringBoot项目前言最近学了一段时间的jenkins以及Docker之后,自己进行了一些自动持续集成的相关实践。在这里记录一下。环境本文所需环境如下:CentOs7系统已安装Docker已安装... 查看详情
inidjango项目部署(代码片段)
项目部署nginx+uwsgi(代码片段)
1.项目部署的相关概念关于部署流程,主要包含以下两个方面:部署方案、部署环境:1.1部署方案1.分析项目的产品需求文档,定好部署方案的方向2.分析项目开发文档,按照功能边界,设计部署的结点3.分析项目功能软件,合理... 查看详情
一台服务器部署多台tomcat(代码片段)
如题,多个项目部署在一台服务器。减少容错性,觉得分开部署,这样一个tomcat挂了不会影响另一个项目。看配置和应用大小决定数量,一般四五个没问题,也有单台服务器部署8个tomcat稳定运行的。下面记录方法1.修改/etc/profile... 查看详情
docker项目部署(代码片段)
docker项目部署1.webapp部署方法一方法二2.springboot项目部署1.webapp部署进入容器//dockerexec-it容器名称/ID/bin/bashdockerexec-ittomcat/bin/bash方法一把项目war包拷贝到webapps//dockerexec-it容器名称/ID/bin/bashdockercp***.wartomcat:/usr/local/t 查看详情
项目部署流程(代码片段)
项目部署http://blog.51cto.com/ljmict项目部署流程:买服务器,服务器租用选择操作系统的版本,安装系统在开发环境中把项目需要的pip包写到一个文件pipfreeze.requirements.txt把项目上传到服务器部署项目,安装需要的环境pyhton3解释器... 查看详情
vue项目部署(nginx)(代码片段)
本文记录如何将做好的Vue项目部署到服务器上,需要准备:linux系统的服务器或者虚拟机Vue项目打包Nginx服务器的配置和部署1、linux系统准备本次使用云主机作为部署主机。 2、Vue项目打包切换到项目所在目录,使用np... 查看详情