(六)内网Linux中部署的前后端分离项目实现公网访问 详细过程(arm64/aarch64架构下)

专题系列往期文章目录

(一)移动端安卓手机改造成linux服务器&Linux中安装软件踩坑历险记
(二)Debian Linux系统中安装oracle JDK1.8详细过程(arm64/aarch64架构下)
(三)Debian Linux系统中安装mysql5.7+详细过程(arm64/aarch64架构下)
(四)Debian Linux系统中安装Redis与Nginx详细过程(arm64/aarch64架构下)
(五)Debian Linux中部署 SpringBoot + Vue 的前后端分离项目详细过程(arm64/aarch64架构下)


快捷目录

  • 专题系列往期文章目录
  • 前言
  • 一、内网项目实现外网访问的几种方案
    • 1、异地组网技术
    • 2、VPN技术
    • 3、内网穿透,即内网映射技术(又叫端口映射技术)
  • 二、下载与安装内网穿透工具Cpolar
    • 1. 注册Cpolar账号
    • 2. 下载安装cpolar客户端
  • 三、配置内网穿透服务Cpolar
    • 1. 安装cpolar服务
    • 2. 将cpolar服务加入到系统服务列表,实现/允许自启动
    • 3. 连接并绑定cpolar账户到cpolar客户端(验证与绑定)
    • 4. 启动cpolar服务(启动后会在后台一直运行)
    • 5. 简单穿透测试
    • 6. 创建隧道、映射本地端口(正式穿透配置过程)
    • 7. 配置/设置固定公网域名(二级子域名),实现公网永久访问
  • 总结


前言

在上一篇文章中,主要分享了基于Spring Boot + Vue的前后端分离项目的前、后端配置与打包,以及部署到Linux服务器 等内容。
本篇文章 将为大家分享 部署在内网环境Linux上的基于Spring Boot + Vue的前后端分离项目 如何实现公网访问 的详细过程。【本篇文章也适合作为树莓派中部署前后端分离项目、实现外网访问的参考笔记】


一、内网项目实现外网访问的几种方案

我们都知道在Internet中,IP地址可以唯一的识别并定位到处在互联网内的一个设备(类似于个人身份证),但由于IPv4类型的IP地址数量很有限,所以在全球有无数硬件设备的情况下不可能每个电子设备都分到一个唯一IP(称为公网ip),而我们的设备又需要连接到互联网上实现上网。在这样的背景下,就出现了私网IP(又叫内网ip、局域网ip)地址段。

局域网可使用的网段(私网地址段)共有三大段:

  • A类: 10.0.0.0 ~ 10.255.255.255
  • B类: 172.16.0.0 ~ 172.31.255.255
  • C类: 192.168.0.0~192.168.255.255

上述地址段内的所有ip均为内网ip地址。一般而言,我们的手机,Windows,Linux等设备大多数情况下分配的都是内网IP,位于同一局域网网段中的设备之间可以互联互通,这些内网设备通过统一的网关(一般为路由器) 或 一台服务器的路由转发实现上网,即:内网的机子在上网时,都是在向网关发出请求,再由网关用外网IP转到Internet网上,接受数据后,再分发到你的内网IP上。

但在实际工作中,有很多类似内网搭建的服务器需要外网访问、外网连接内网等 的需求, 例如在任何地方都能访问自己家里的主机 或 电脑笔记本上的应用,再比如让出差外网和任何地方都能访问到公司内部局域网的服务器……

要实现上述这类需求,就需要解决:公网 访问内网 的难题。对于这个场景 有以下几种常见解决方案:

1、异地组网技术

即通过硬件技术或软件技术(软路由),将不同网段连在一起形成一个更大的局域网,使得不同网段间的设备可以互联互通。如通过三层交换机或路由器就是其中一种解决方案。
感兴趣的可以阅读这篇文章【10年老网工总结的八种异地组建局域网】
`

2、VPN技术

简称组网。如搭建PPTP服务器或L2TP服务器、openVPN(一款开源的基于SSL的VPN, OpenVPN实际上是在应用层做的传输, 传输协议可以选择UDP/TCP, 其中UDP更为常用)等。

VPN主要采用隧道技术、加密技术、密钥管理技术和使用者与设备身份认证技术。

VPN的实现原理是通过借助 或者说利用公共网络,建立一个安全、专用的虚拟隧道进行安全通信, 从而使得不同局域网连接形成成一个大的保密虚拟局域网,实现互联互通。如下图所示:
(六)内网Linux中部署的前后端分离项目实现公网访问 详细过程(arm64/aarch64架构下)_第1张图片

由于公网IP地址不够用,一些网络运营商只给拨号用户提供二级IP地址。换句话说,你的网关获取到的只是一个内网IP地址,在公网上是不可达的。这个事实,会给拨号上网的企业带来如下问题:

  • 无法实现依赖端口映射的业务功能。
  • 无法实现直接VPN组网。因为: VPN服务器的建立都需要固定的公网IP才可以

总结一句话,VPN的核心就是利用公共网络建立虚拟私有网。
`

3、内网穿透,即内网映射技术(又叫端口映射技术)

内网穿透,即内网映射,是内网地址端口主动权限映射到外网的实现过程。原本只能在本机上访问的项目、网站、软件,通过内网穿透就可以实现其他人在任何地方进行访问。

内网穿透的软件工具及实现方式有很多,常见的有:

  • 路由器端口映射。
  1. 要求条件:适合有路由权限,且路由上WAN是公网IP的网络环境。
  2. 操作过程:登录自己路由管理后台(如192.168.1.1以自己本地实际地址为准),找到虚拟服务器转发功能(不同型号路由叫法略有不同,有的叫端口映射,有的叫虚拟服务器,或转发),添加对应转发规则。将主机内网固定IP端口与公网IP端口对应(通常内外网端口是保持一致的,未知协议的用ALL)。路由映射后,即可以在外网通过公网IP进行访问对应内网应用。
  • 自己通过公网服务器搭建内网映射,例如通过AWS亚马逊云服务器、GCP谷歌云服务器、DigitalOcean 或 Azure等,来安装并运行您的VPN服务器。您可以根据需要选择服务器的规格和地理位置,以及操作系统类型,如Ubuntu、CentOS或Debian等。
  1. 要求条件:有公网IP服务器。如购买了一台包含公网IP宽带的云主机。
  2. 过程概要:公网主机上安装第三方内网映射软件并“发布“映射——自己另一个此内网映射软件帐号购买自己发布的映射服务使用内网端口映射。
  • 直接使用第三方提供的映射服务,如:Cpolar,nat123,快解析端口映射等方案 。
  1. 要求条件:可以上网,即可以通过此类软件,将本地内网IP端口映射到外网访问。
  2. 操作过程:在本地服务器上,或所在内网另台互通主机上,安装并登录Cpolar等软件的客户端,然后添加端口映射。将本地需要访问的内网地址端口,映射到外网地址上。


`

二、下载与安装内网穿透工具Cpolar

经过上面的简单介绍,相信大家已经知晓内网项目实现公网访问的思路与方法了。从经济角度考虑可以选择第三方提供的内网穿透方案,目前市面上这类服务提供商比较多,这里介绍一种经实测:好用免费简便稳定的内网穿透工具:Cpolar。下面就跟大家分享一下cpolar内网映射工具的详细使用教程,供有需要的伙伴们学习、参考。

1. 注册Cpolar账号

使用内网穿透工具cpolar实现端口映射,公开一个本地Web站点至公网,就需要注册并下载安装cpolar客户端。除此之外cpolar工具还具备其他用途与功能,感兴趣的可以自行了解。

第一步: 访问cpolar官网
浏览器输入:https://dashboard.cpolar.com/signup,进入cpolar页面。

第二步: 在线注册cpolar账号
根据要求填写信息,完成账号注册。(已注册用户请点击最下方提示信息,进入登录页面直接登录cpolar后台即可)
(六)内网Linux中部署的前后端分离项目实现公网访问 详细过程(arm64/aarch64架构下)_第2张图片

第三步: 登录cpolar后台
完成注册后进入登录页面,输入登录信息登录进入cpolar后台。
(六)内网Linux中部署的前后端分离项目实现公网访问 详细过程(arm64/aarch64架构下)_第3张图片
`

2. 下载安装cpolar客户端

Linux中安装cpola客户端有两种方式:1.脚本自动安装; 2.手动下载安装包

方法一: 安装脚本自动安装方式(推荐)
Ⅰ. 环境需求说明:
该脚本适用于Ubuntu16.04/18.04/20.04及以后,Centos7/8及以后版本,树莓派最新官方镜像,及支持systemd的新式Linux操作系统,该脚本会自动判断Linux系统的CPU架构(i386/amd64/mips/arm/arm64等等),自动下载对应cpolar客户端,并自动部署安装。

Ⅱ. Linux终端运行命令,下载安装cpolar
国内用户请使用: curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
国外用户请使用: curl -sL https://git.io/cpolar | sudo bash (cpolar短链接安装方式)

补充说明:
如果运行上述命令后,出现类似如下错误提示:
(六)内网Linux中部署的前后端分离项目实现公网访问 详细过程(arm64/aarch64架构下)_第4张图片
-原因:系统中安装了systemctl命令,导致systemd等命令被自动移除/卸载,而该脚本运行时又依赖systemd命令。
-解决办法:暂时卸载/移除systemctl,等安装cpolar成功后再将systemctl安装回来。具体操作如下:

  • a. 暂时卸载/移除systemctl; (如Debian、Ubuntu等中可以执行执行apt remove systemctl)
  • b. 安装libnss-systemd、 libpam-systemd、 systemd 、systemd-sysv; (如Debian、Ubuntu等中可以执行执行apt install systemd)
  • c. 重新运行脚本;
  • d. 安装cpolar服务。cpolar service install
  • e. 将systemctl安装回来,后面配置cpolar为自启动服务时会用到。

Ⅲ. 查看版本号,测试cpolar的安装结果
查看版本号,有正常显示版本号即为安装成功。命令为:cpolar version (还可以在安装后通过 whereis cpolar 检测安装位置)

root@localhost:/home#
root@localhost:/home# cpolar version
cpolar version 3.3.12
root@localhost:/home#
root@localhost:/home# whereis cpolar
cpolar: /usr/bin/cpolar /usr/local/bin/cpolar /usr/local/etc/cpolar
root@localhost:/home# 


方法二: 手动安装方式
cpolar提供的手动安装方式的压缩包 为 二进制免安装型安装包(类似于Windows中的绿色版软件),因此下载并解压后得到cpolar,然后通过命令行带参数运行即可。
Ⅰ. 进入cpolar下载页面
浏览器输入:https://www.cpolar.com/download,进入下载界面。

  • Windows安装包下载位置:
    (六)内网Linux中部署的前后端分离项目实现公网访问 详细过程(arm64/aarch64架构下)_第5张图片
  • Linux安装包下载位置:
    (六)内网Linux中部署的前后端分离项目实现公网访问 详细过程(arm64/aarch64架构下)_第6张图片

Ⅱ. 查看系统CPU架构,确定下载版本
可使用arch、uname、getconf LONG_BIT 等相关命令进行查看。

root@localhost:/home# getconf LONG_BIT
64
root@localhost:/home# 
root@localhost:/home# uname -a
Linux localhost 5.4.0-aidlite #1 SMP PREEMPT Thu Jul 28 17:52:05 CST 2022 aarch64 GNU/Linux
root@localhost:/home# 
root@localhost:/home# uname -ar
Linux localhost 5.4.0-aidlite #1 SMP PREEMPT Thu Jul 28 17:52:05 CST 2022 aarch64 GNU/Linux
root@localhost:/home# 
root@localhost:/home# uname -m
aarch64
root@localhost:/home# 
root@localhost:/home# arch
aarch64

Ⅲ. 下载安装包
下载压缩包到Linux有两种方法: 1. 直接使用wget等命令下载; 2.下载到本地,然后上传到Linux。

  • 方法一:命令直接下载法 (注意:此方法下载时需要知道下载链接/地址)

a. 获取下载地址:
通过上一步可知,作者的Linux系统cpu架构类型为:aarch64 即属于ARMv8架构。获取下载链接方法为:在下载页面对应下载按钮处右键,复制地址即可。如下图:(六)内网Linux中部署的前后端分离项目实现公网访问 详细过程(arm64/aarch64架构下)_第7张图片
`
b. 通过命令下载:

root@localhost:/home#
root@localhost:/home# wget https://static.cpolar.com/downloads/releases/3.3.12/cpolar-stable-linux-arm64.zip
cpolar version 3.3.12
root@localhost:/home# 
  • *方法二:下载到本地,然后手动上传到Linux。

a. 点击下载对应压缩包:
通过上一步可知,作者的Linux系统cpu架构类型为:aarch64 即属于ARMv8架构。如下图:
(六)内网Linux中部署的前后端分离项目实现公网访问 详细过程(arm64/aarch64架构下)_第8张图片
`
b. 上传到Linux:
使用Xshell等工具远程连接到Linux服务器,进入到某一目录下,然后使用 rz 命令上传。如下图:

root@localhost:/home#
root@localhost:/home# cd /opt/cpolarPackage/
root@localhost:/opt/cpolarPackage# 
root@localhost:/opt/cpolarPackage# rz -be 

(六)内网Linux中部署的前后端分离项目实现公网访问 详细过程(arm64/aarch64架构下)_第9张图片

Ⅳ. 解压安装包
将cpolar压缩包解压到/usr/bin/ 或 /usr/local/bin/ ,并在另一个目录下面建立软链接指向解压目录

Ⅴ. 查看版本号,测试cpolar的安装结果

root@localhost:/home#
root@localhost:/home# cpolar version
cpolar version 3.3.12

至此,就完成了Linux中内网穿透工具cpolar的安装。接下来进行cpolar内网穿透服务的配置等设置,以实现公网访问内网中站点、项目等。


`

三、配置内网穿透服务Cpolar

Linux服务器中安装好cpolar客户端之后,就可以正式进行内网穿透服务的配置了。

1. 安装cpolar服务

root@localhost:/home#
root@localhost:/home# cd /usr/lib/    //进入cpolar的安装目录
root@localhost:/usr/lib# 
root@localhost:/usr/lib# cpolar service install   //安装cpolar服务
root@localhost:/usr/lib# 
root@localhost:/usr/lib# systemctl status cpolar   //检查cpolar服务状态。 也可以使用service cpolar status 进行查看
cpolar.service - Cpolar Service
    Loaded: loaded (/etc/systemd/system/cpolar.service, disabled)
    Active: inactive (dead)
root@localhost:/usr/lib# 

`

2. 将cpolar服务加入到系统服务列表,实现/允许自启动

安装成功cpolar服务后,需要将cpolar服务配置为系统服务,从而确保cpolar服务保持后台运行并可以自启动。以后便可以直接使用systemctl命令来代替cpolar service start/stop等命令来方便的管理cpolar服务咯!

root@localhost:/usr/lib# systemctl enable cpolar   //安装cpolar服务后,便可以在任何目录下执此命令,添加cpolar到系统自启动服务列表中
root@localhost:/usr/lib# 
root@localhost:/usr/lib# systemctl list-unit-files|grep cpolar   //测试系统服务列表是否成功添加上了cpolar服务
cpolar.service	enabled   //说明添加成功
root@localhost:/usr/lib# systemctl status cpolar   //使用systemctl命令查看cpolar服务状态
cpolar.service - Cpolar Service
    Loaded: loaded (/etc/systemd/system/cpolar.service, enabled)   //可以看到状态已经由上一步中的disabled 变成了 enabled,说明添加成功,下次系统重启后cpolar服务便可自启动
    Active: inactive (dead)
root@localhost:/usr/lib# 

`

3. 连接并绑定cpolar账户到cpolar客户端(验证与绑定)

当服务器中安装好cpolar客户端和cpolar服务后,先需要进行验证(即:为cpolar客户端指定匹配的authtoken),以便客户端与此帐户绑定,同时这将为我们提供更多功能,所有打开的隧道将在此页面中的仪表板中列出。

第一步: 复制账户对应的authtoken字符串
浏览器登录cpolar后台并进入cpolar验证页面,复制authtoken字符串值。(https://dashboard.cpolar.com/auth)
(六)内网Linux中部署的前后端分离项目实现公网访问 详细过程(arm64/aarch64架构下)_第10张图片

.
第二步: 执行命令将authtoken值写入cpolar配置文件
在Linux终端中输入:./cpolar authtoken MDc1Y2RmZjYtYm…(刚复制的一串很长的东东) ,回车后cpolar将会将authtoken保存在~/.cpolar/cpolar.yml中,并在终端中输出:
Authtoken saved to configuration file: /root/.cpolar/cpolar.yml

也可以自行进入并打开cpolar的配置文件yml中将刚复制的一串很长的东东配置进去。(我倒是没试过)

第三步: 查看绑定结果
(六)内网Linux中部署的前后端分离项目实现公网访问 详细过程(arm64/aarch64架构下)_第11张图片
`

4. 启动cpolar服务(启动后会在后台一直运行)

到此,内网穿透服务基本环境就算搭建完毕。接下来就可以启动cpolar服务,为后面创建隧道等做好准备,开启我们期待已久的神奇之旅了,开搞开搞!

root@localhost:/home#   //因为已安装了cpolar服务,所以可以进入任意目录下执行以下命令
root@localhost:/home# systemctl status cpolar   //使用systemctl命令查看cpolar服务状态,此时应该是未开启
cpolar.service - Cpolar Service
    Loaded: loaded (/etc/systemd/system/cpolar.service, enabled) 
    Active: inactive (dead)
root@localhost:/home#
root@localhost:/home# systemctl start cpolar   //启动cpolar服务
root@localhost:/home# systemctl status cpolar   //查看服务状态,此时应该是成功开启
cpolar.service - Cpolar Service
    Loaded: loaded (/etc/systemd/system/cpolar.service, enabled)
    Active: active (running)
root@localhost:/home#
root@localhost:/home# service cpolar status   //另一种查看方法
Running
root@localhost:/home# 
root@localhost:/home# ps -ef|grep cpolar    //查看cpolar相关进程信息
10179    13991     1  0  2020 ?        00:00:00 cpolar: master process
10179    14000 13991  0  2020 ?        00:00:00 cpolar: worker process
10179    14021 32743  0  2020 pts/5    00:00:00 grep cpolar

`

5. 简单穿透测试

cpolar服务成功启动后,便可以创建隧道,配置端口映射,愉快的体验:任何地方访问内网中项目的感觉了,啦啦啦 GoGoGo!

例如: 要在端口8080上启动HTTP隧道时,可以运行命令:cpolar http 8080

root@localhost:/home# 
root@localhost:/home# cpolar http 8080
root@localhost:/home# cpolar http 8080

cpolar by @bestexpresser                                                                                (Ctrl+C to quit)
                                                                                                                        
Tunnel Status       online                                                                                              
Account             HaloAn (Plan: Basic)                                                                                
Version             3.12/3.18                                                                                           
Web Interface       127.0.0.1:4042                                                                                      
Forwarding          http://6809febf.r15.cpolar.top -> http://localhost:8080                                             
Forwarding          https://6809febf.r15.cpolar.top -> http://localhost:8080                                            
# Conn              0                                                                                                   
Avg Conn Time       0.00ms  

如上图,输入cpolar http 8080回车后,就会出现上图穿透映射后的http和https两种类型的公网访地址,说明配置成功。此时,如果8080端口有本地服务或部署的项目,就可以在浏览器输入该公网地址(域名)进行访问了!
(如果提示某行错误,请根据行号及报错信息修改。)

弊端: 这种方式运行后,就得一直停在此终端界面,如果ctrl+c返回后,在线隧道就失效无法使用了(没了),所以需要使得 cpolar隧道创建后保持在后台运行。

`

6. 创建隧道、映射本地端口(正式穿透配置过程)

此步操作的目的是:通过创建隧道、详细配置本地需要穿透的各端口,以生成内网项目对应的公网访问域名供外网访问,并使其在创建和启动后保持后台运行 从而确保随机访问。(隧道保持后台稳定运行)

第一步: 验证/确认cpolar服务是否在后台运行中
此步不可或缺,必须确保cpolar服务是运行的,才能进行下面的步骤。

root@localhost:/home# systemctl status cpolar   
cpolar.service - Cpolar Service
    Loaded: loaded (/etc/systemd/system/cpolar.service, enabled)
    Active: active (running)
root@localhost:/home#
root@localhost:/home# ps -ef|grep cpolar    //查看cpolar相关进程信息
10179    13991     1  0  2020 ?        00:00:00 cpolar: master process
10179    14000 13991  0  2020 ?        00:00:00 cpolar: worker process
10179    14021 32743  0  2020 pts/5    00:00:00 grep cpolar

第二步:创建隧道、配置映射端口
配置cpolar隧道与映射端口有两种方法: 1. 通过登录cpolar web UI管理界面; 2. 通过编辑cpolar配置文件。

  • 方法一:登录cpolar web UI管理界面 (web UI管理界面地址:http://安装cpolar客户端的机器ip:9200/)

a. 访问并进入cpolar web UI管理界面:
浏览器输入:http://安装cpolar客户端的机器ip:9200/ 回车进入 web UI登录后台。如下图:
(六)内网Linux中部署的前后端分离项目实现公网访问 详细过程(arm64/aarch64架构下)_第12张图片
.
b. 输入注册cpola时的账号信息,登录 web UI管理台:
下图是cpolar的web UI管理台在线隧道列表页面,右边框中列出的表示目前已创建的隧道(映射)信息。
(六)内网Linux中部署的前后端分离项目实现公网访问 详细过程(arm64/aarch64架构下)_第13张图片
.
c. 创建隧道,配置对应映射端口:
进入隧道管理/创建隧道 页面,按下图提示创建就完事儿!
(六)内网Linux中部署的前后端分离项目实现公网访问 详细过程(arm64/aarch64架构下)_第14张图片
.
d. 管理所有隧道的运行状态:
进入隧道管理/隧道列表 页面,可以查看并根据实际需要随时启、停映射的隧道。
(六)内网Linux中部署的前后端分离项目实现公网访问 详细过程(arm64/aarch64架构下)_第15张图片

  • *方法二:编辑cpolar配置文件方式。(不推荐,可能改错导致启动不起来)

a. cpolar相关内容说明:
-cpolar默认安装路径 /usr/local/bin/cpolar;
-如果第一次安装,会默认配置一个简单的样例配置文件,创建了两个样例隧道,一个web,一个ssh;
-cpolar配置文件路径: /usr/local/etc/cpolar/cpolar.yml
.
b. 修改cpolar的配置文件cpolar.yml,完成隧道的配置与创建:
使用Xshell等工具远程连接到Linux服务器,进入到cpolar配置文件目录并打开cpolar.yml文件。配置如下图:

root@localhost:/home#
root@localhost:/home# vim ~/.cpolar/cpolar.yml
authtoken: MDc1Y2RmZj............    #认证token

tunnels:
 ssh:              #隧道名称,表示ssh,名称可以自定义
   addr: 22        #端口号为22
   proto: tcp      #协议tcp
   region: cn      #地区,cn_vip,可选:us,hk,cn,cn_vip,如果升级到付费版本此项请设置为cn_vip
 web:              #隧道名称,用户可以自定义,但多隧道时,不可重复
   addr: 3000      #本地Web站点端口
   proto: http     #协议http
   region: cn      #地区,cn_vip,可选:us,hk,cn,cn_vip
Web-api:              #隧道名称,用户可以自定义,但多隧道时,不可重复
   addr: xxxx      #本地Web站点后端接口对应端口
   proto: http     #协议http
   region: cn      #地区,cn_vip,可选:us,hk,cn,cn_vip
root@localhost:/home# 

c. 管理隧道:
创建后需要手动运行命令,以启用需要使用的隧道。管理隧道的可用命令有:
cpolar start xxx (比如: cpolar start www api blog pubsub,表示启用www等四个隧道。)
cpolar start ssh -log=stdout -config=cpolar.yml (表示启用ssh,以便可以远 程连接)
cpolar start-all (表示启用所有隧道)

root@localhost:/home#
root@localhost:/home# cpolar start-all    //该操作将启用所有隧道

第三步:测试穿透结果:使用cpolar穿透后的公网域名访问内网项目
创建、配置完隧道,并启用隧道后,本地项目的对应端口就已成功映射至公网,此时,就可以在任何地方通过浏览器输入cpolar生成的公网域名,访问部署在内网中的项目或服务了!
如下图所示:
Ⅰ. 查看所有运行中的隧道(在线隧道)
登录cpolar后台查看在线隧道列表,展示出来的即表示所有运行中的隧道(故可以通过列表中是否展示出来来判断隧道是否运行)。
(地址: https://dashboard.cpolar.com/status)
(六)内网Linux中部署的前后端分离项目实现公网访问 详细过程(arm64/aarch64架构下)_第16张图片

Ⅱ. 使用cpolar穿透后的公网域名访问内网项目
例如上图中隧道名称为jeecg的隧道生成的公网域名是: http://haloan…,其穿透的是Linux服务器中本地3000端口。下图为随机在某个城市使用该域名测试的结果:
(六)内网Linux中部署的前后端分离项目实现公网访问 详细过程(arm64/aarch64架构下)_第17张图片
·
弊端: 使用免费套餐所生成的公网地址为随机临时地址,其24小时内会发生变化,所以适合用于临时穿透测试使用。如果内网项目需要长期穿透至公网来访问,可以为其配置一个二级子域名,指定一个容易记忆的地址进行访问,同时该二级子域名为固定不会随机变化(此功能需要根据自己的预算付费获得(至少升级至基础版))。下面分享具体实现过程
`

7. 配置/设置固定公网域名(二级子域名),实现公网永久访问

需升级至基础套餐或以上才支持配置二级子域名。如果条件有限,可以升级至基础版套餐即可。

第一步: 升级套餐
在cpolar官网在线付费升级到所需套餐即可。

第二步: 配置二级域名
比如升级到基础版套餐后,便可以创建多个二级子域名形式的固定公网访问地址,此地址全网唯一。
此步骤省略,直接参考cpolar教程即可。地址为:配置二级子域名

第三步: 测试访问二级子域名
在任何地方打开浏览器,我们来测试一下访问配置成功的二级子域名。
(六)内网Linux中部署的前后端分离项目实现公网访问 详细过程(arm64/aarch64架构下)_第18张图片

特别说明:在使用cpolar内网穿透工具 配置好固定公网访问地址后:
内网项目实现公网访问后,不可避免的会面临诸如:后端api应用服务器如Tomcat 被频繁恶意攻击、随着日益增长的业务量及其用户请求,应用服务器可能出现宕机而无法正常提供服务等等线上问题。
因此:在部署时,需要重新配置后端接口、配置实现负载均衡从而分摊应用服务器压力,同时保证客户端访问的稳定性,

1. 重新配置接口地址、打包并部署前端。
具体操作为:编辑 .env 相关配置文件,将之前 直接请求API服务器的内网形式的接口地址修改为:请求nginx服务器 (即cpolar生成的固定公网域名形式地址),由此前端对后端api的请求转交给了nginx来代理,即所谓的nginx反向代理。然后打包并部署到Linux。示例如下图:
(六)内网Linux中部署的前后端分离项目实现公网访问 详细过程(arm64/aarch64架构下)_第19张图片
如上图,打包前端时配置的接口地址是cpolar穿透生成的公网形式地址,该地址指向的是我们的Web服务器即Nginx。
.
2. 在Nginx中配置动静分离(即:前端代理和后端反向代理),负载均衡等。
前端包部署完毕后,就需要在nginx中配置后端api的反向代理,条件允许的话还可以配置负载均衡等。
具体操作为:编辑Nginx服务器的nginx.conf配置文件, 配置后端api的反向代理、负载均衡等。示例如下:
类型一: 单个API服务时的配置:

root@localhost:/home#  cd /etc/nginx
root@localhost:/etc/nginx# ll
total 64K
drwx------. 2 root root 4.0K Oct  6 16:46 conf.d
drwx------. 2 root root 4.0K Oct  6 16:46 modules-enabled
... 省略部分不相关文件
-rw-------. 1 root root 3.6K Mar 23 17:32 nginx.conf
-rw-------. 1 root root  180 Sep 29  2022 proxy_params

root@localhost:/etc/nginx# vim nginx.conf 
... 省略部分非核心内容,仅展示前、后端代理配置部分
http{
 server {
       listen       3000;   # nginx监听端口,即浏览器访问端口
       server_name  localhost;  #前端访问域名  localhost
       charset utf-8;
       #access_log logs/host.access.log main;
       
       #前端
       location / {   
          root   html/dist/;   #前端打的dist资源存放目录
          index  index.html index.htm;  #首页
          try_files $uri $uri/ /index.html;  #解决Vue项目部署Nginx服务器后,刷新页> 面后出现404的问题
       }
	   #后端api反向代理:单个api服务时的配置
       location /jeecg-boot {    # ^~ /jeecg-boot
           proxy_pass http://localhost:xxxx/jeecg-boot/;  # 将请求转发到xxxx端口. 注意:结尾处有/哦,有/与没有/的区别自己研究吧
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header Host $host;
           proxy_set_header X-NginX-Proxy true;
           proxy_set_header CAPTCHA_TOKEN $http_captcha_token;
           proxy_set_header Authorization $http_authorization;
           proxy_connect_timeout 300;
           proxy_send_timeout 300;
           proxy_read_timeout 300s;
          try_files $uri $uri/ /index.html;
      }
      #异常页面配置
      error_page   500 502 503 504  /50x.html;
     location = /50x.html {
          root   html;
      }    
  }
}

类型二: API服务器集群时的配置(即实现负载均衡时的配置):

root@localhost:/home#  cd /etc/nginx
root@localhost:/etc/nginx# ll
total 64K
drwx------. 2 root root 4.0K Oct  6 16:46 conf.d
drwx------. 2 root root 4.0K Oct  6 16:46 modules-enabled
... 省略部分不相关文件
-rw-------. 1 root root 3.6K Mar 23 17:32 nginx.conf
-rw-------. 1 root root  180 Sep 29  2022 proxy_params

root@localhost:/etc/nginx# vim nginx.conf 
... 省略部分不涉及模块
http{
    ... 省略http下部分非核心模块

	# 负载均衡配置:代理服务器是一组服务器的话,我们可以使用upstream指令配置后端服务器组
    upstream domain {  # proxy_api
       server localhost:xxxx weight=10;    //如localhost:8080 weight=10
       server localhost:xxxx weight=10;    //如localhost:8081 weight=10
       server localhost:xxxx weight=10;    //如localhost:9090 weight=10
       ..........   //如果有多个端口或多个应用服务器如Tomcat提供api服务,则按照此格式继续配置
    }

    server {
       listen       3000;   # nginx监听端口,即浏览器访问端口
       server_name  localhost;  #前端访问域名  localhost
       charset utf-8;
       #access_log logs/host.access.log main;
       
       #前端
       location / {   
          root   html/dist/;   #前端打的dist资源存放目录
          index  index.html index.htm;  #首页
          try_files $uri $uri/ /index.html;  #解决Vue项目部署Nginx服务器后,刷新页> 面后出现404的问题
       }
	   #后端api反向代理:单个api服务时的配置
       location /jeecg-boot {    # ^~ /jeecg-boot
           proxy_pass  http://domain;   # 负载均衡配置,请求会根据配置的 负载策略/权重 平均分配请求到xxxx和xxxx端口或不同api服务器
           proxy_set_header Host $host:$server_port;  
       }
      
       #异常页面配置
       error_page   500 502 503 504  /50x.html;
       location = /50x.html {
            root   html;
       }    
    }
}

至此,就成功的完成了:内网项目实现外网/公网访问。换句话说,我们在内网中的 Linux 服务器上部署的基于Spring Boot + Vue 的前后端分离项目JeecgBoot,终于可以在任何地方随时的访问了!。



总结

以上就是今天要分享的内容:安卓手机改造成Linux服务器后 部署的内网环境下的前后端分离项目 实现外网公/网访问 的详细过程,一句话总结就是:
内网环境中部署的项目如何实现外网/公网访问

到这里为止,我们就完整的实现了以下所有目标:

  • –> 一部废弃的手机(安卓)改造成一台不花钱的私人Linux服务器 (搭建私人Linux服务器) ; √
  • –> Linux服务器中常用软件的安装与配置 (环境搭建) ; √
  • –> Linux服务器中部署前后端分离项目 (跑自己的项目); √
  • –> 内网环境下的Linux服务器中部署的项目 实现外网访问 (为互联网用户提供服务); √

本篇文章是此系列专题中暂定的最后一篇,欢迎大家的阅读,同时也非常欢迎 志同道合而又有趣的每一位朋友自远方而来,期待与您一起干一杯猫屎Java,分享每一份收获与成功的喜悦,还有那些我们当年没有实现的梦想!当然,我们还可以交流学习吉他,一起徜徉在美妙的音乐世界,聆听每一个跳动的音符。

你可能感兴趣的:(#,手机改造成Linux服务器,部署前后端分离项目,linux,架构,spring,boot,vue,网络)