将webserver部署到公网(使用阿里云服务器)

阿里云轻量应用服务器介绍

这里我是用的是阿里云进行部署,阿里云推出的相关产品包括 云服务器 ECS轻量应用服务器。阿里云的指引和说明我觉得还是比较清楚详细的,适合新手。

先来介绍相关的一些名词:

  • 云服务器 ECS(Elastic Compute Service,弹性计算服务)是阿里云提供的一种基础云计算服务,类似于虚拟机。它可以通过互联网进行访问并且具有高度的灵活性和扩展性。
  • VPC(Virtual Private Cloud,虚拟私有云) 是一种可以让用户在公有云上创建一个独立隔离的网络环境的服务。VPC提供了类似于传统数据中心的网络管理功能,但在云中实现。
  • 安全组:类似于防火墙,用户可以设置安全组规则来控制对 ECS 的访问。

那么这两者有什么区别?如何进行选择?

贴出阿里云官网给出的介绍:选轻量应用服务器or云服务器ECS?一图帮你彻底区分-阿里云开发者社区

简单来说,轻量应用服务器 适合个人开发者、学生,针对的应用场景轻量级且访问量较低,可以快速上手,经济实用,同时资源有限,支持的功能也更少;后者支持和可以自定义的功能更多更加灵活,可以覆盖绝大多数的业务场景(如大数据分析,深度学习等)。对于我们这个项目来说,使用前者就够了。

创建轻量应用服务器

我创建的服务器基本配置如下:价格是 67 R/月

创建好以后,设置密码

永久修改云服务器主机名

打开 /etc/hostname 文件:

sudo nano /etc/hostname

将文件中的内容修改为你想要的主机名即可。

或者使用hostnamectl 命令来更改主机名,这种方法会自动更新相关配置文件。

sudo hostnamectl set-hostname [new_hostname]

重启系统以确保主机名在所有会话中生效:

sudo reboot

重启后检查主机名:

hostname

使用密钥对远程登录云服务器

管理密钥对(Linux)阿里云 SSH 密钥对是一种安全便捷的登录认证方式,用于在 SSH 协议中进行身份验证和加密通信。为轻量应用服务器绑定密钥对后,服务器会自动禁止使用用户及密码登录。

创建并绑定密钥对:

创建密钥对

系统将自动下载密钥信息(文件后缀名为.pem)至本地主机,密钥仅有这一次下载机会,请妥善保管。

我将下载后的.pem 文件保存在/keypair 文件夹下面,命名为myWebserver.pem

修改私钥文件权限:

chmod 400 ~/keypair/myWebserver.pem

使用 SSH 远程连接 Linux 服务器:([] 中的内容自行替换)

ssh -i [~/path_to/x.pem] root@[服务器公网ip]

执行上面的指令后,可能提示:

The authenticity of host ‘xxxx’ can’t be established.

Are you sure you want to continue connecting (yes/no/[fingerprint])?

这是首次连接时的正常安全检查,输入 yes 即可。

成功连接后,显示:

Welcome to Alibaba Cloud Elastic Compute Service !

基本操作:

查看目录内容:ls -a

查看系统版本:uname -a

查看磁盘使用情况:df -h

查看内存使用情况: free -h

使用 exit 或者 Ctrl + D 断开远程链接。

将 Webserver 部署到远程服务器

本地主机连接远程服务器以后,更新系统软件包:

sudo apt-get update   # 更新软件包列表
sudo apt-get upgrade  # 升级所有已安装的软件包

安装 C++ 编译工具:

sudo apt-get install build-essential

安装数据库开发包:

sudo apt-get install libmysqlclient-dev

将本地服务器项目传输到远程服务器。

scp -r [/path/to/your/webserver_project] root@[ip]:/home/root/

因为我把我的项目上传到了 github ,所以这里我直接通过 git 克隆项目到远程服务器上了。

# 远程服务器安装 git
apt install gitgit clone https://github.com/bhu619/myWebserver.git

克隆完了以后,还要像之前在本地部署时一样,配置数据库,参考我的另一篇文章:0. 配置安装

配置好数据库以后,别忘记在 myWebserver 中的 main.cpp 文件中修改密码:

编译:

sh ./build.sh

编译通过以后,在阿里云服务器上启动 Web 服务器,让它监听公网 IP 地址:

./server &

& 符号表示将该命令放到后台执行,这样你可以在不占用当前终端的情况下运行程序。终端会返回该进程的 PID。

查看后台进程:jobs

web 服务器跑起来以后,通过公网 ip+端口号访问一下:

http:://[ip]:[port]

别忘了,我们的默认端口号是 9006

http 错误码为 502,即“502 Bad Gateway”,通常表示服务器在作为网关或代理时,从上游服务器收到无效响应。猜测是云服务器防火墙设置的原因,找到如下位置,新建防火墙模板即可。

应用防火墙模板后,重新进入服务器,成功~。

设置开机自启动

在云服务器上将数据库和 Web 服务器设置为开机自启动。

设置 MySQL 数据库开机自启动

确保 MySQL 已安装并且可以启动:

sudo systemctl start mysql

通过创建 Systemd 服务设置 MySQL 服务为开机自启动:

Systemd 是一种 Linux 系统初始化系统和服务管理器,它的主要功能是用于启动、停止和管理系统服务。取代了传统的 SysV init 系统。

sudo systemctl enable mysql

设置 Web 服务器开机自启动

我们的 Web 服务器没有内置服务文件,你可以创建一个 Systemd 服务文件,并将它设为开机自启动。

sudo nano /etc/systemd/system/mywebserver.service

填写服务文件基本配置内容:

[Unit]
Description=My Custom Web Server
After=network.target[Service]
ExecStart=/root/myWebserver/server
Restart=always
User=root
WorkingDirectory=/root/myWebserver[Install]
WantedBy=multi-user.target

刷新 Systemd 配置:

sudo systemctl daemon-reload

启用 web 服务器开机自启:

sudo systemctl enable mywebserver

检查是否设置成功:

systemctl is-enabled mywebserver

启动服务:

sudo systemctl start mywebserver

检查服务状态(确保服务正常启动):

sudo systemctl status mywebserver

这样设置完以后,每次重启云服务器,webserver 都会开机自启动了。

域名

现在可以通过 公网 IP 地址 + 端口号的方式访问 web 服务器了。

  • 公网 IP 地址指定了互联网上的唯一一台主机
  • 端口号表示这台主机上运行的一个应用程序或者服务

通常我们访问一个网页不是通过 IP 地址+端口号这种形式来访问的,而是通过域名的形式,域名其实就是 IP 地址的字符串形式, 当用户在浏览器中输入域名时,域名系统(Domain Name System, DNS) 会将域名解析成对应的 IP 地址,从而定位到服务器并加载网页内容。

阿里云也支持域名购买服务:万网-阿里云旗下品牌

注意,这里有的域名只是首次购买便宜,后期续费就会比较贵了,所以不要单纯只看首年价格,除非你确定之后不打算续费了。

我购买的是.cn 英文域名,首年 15 ,之后续费的话是三十几。

首次使用的话,还需要完成实名认证域名过户等操作,这里等待审核需要花费一点时间。

审核完成后,就可以把域名添加到服务器并等待域名解析了。域名备案请在实名认证成功后,等待至少 3 天信息同步后操作,备案成功后域名才可以对外提供服务。

使用域名和端口号访问 WebServer

因为应用程序在非标准端口(9006)上运行,不能直接访问 http://bhu619.cn。因此,可以在访问时显式指定端口号:

http://bhu619.cn:9006/

这样,浏览器会自动解析 bhu619.cn 域名并指向 IP 地址 xxx.xxx.xxx.xxx,再加上端口号 9006,最终访问 xxx.xxx.xxx.xxx:9006 上的 Web 应用程序。

配置反向代理以隐藏端口号

如果希望使用指定端口(例如 80 , 443 或 9006) 访问应用程序,而不显示端口号,可以在服务器上配置一个反向代理(如 Nginx 或 Apache):

安装 Nginx(假设使用 Nginx):

sudo apt update
sudo apt install nginx

配置反向代理: 打开 Nginx 配置文件 /etc/nginx/sites-available/default 或新建一个配置文件,将 bhu619.cn 的请求代理到 localhost:9006

/etc/nginx/sites-available/ 目录下创建一个新配置文件 bhu619.cn

sudo nano /etc/nginx/sites-available/bhu619.cn

在文件中添加以下内容,将所有来自 bhu619.cn 的请求代理到 localhost:9006

server {listen 80;server_name bhu619.cn www.bhu619.cn;# 将请求转发到本地的 Web 服务端口(例如 9006)location / {proxy_pass http://127.0.0.1:9006;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_set_header X-Forwarded-Proto $scheme;}
}

配置说明:

  • listen 80;:监听 80 端口(HTTP 默认端口),这样用户可以直接通过 http://bhu619.cn 访问而无需指定端口。+ listen 80;:监听 80 端口(HTTP 默认端口),这样用户可以直接通过 http://bhu619.cn 访问而无需指定端口。
  • server_name:指定此虚拟主机的域名。+ server_name:指定此虚拟主机的域名。
  • proxy_pass http://127.0.0.1:9006;:将请求转发到 localhost:9006,即 Web 服务的实际端口。+ proxy_pass http://127.0.0.1:9006;:将请求转发到 localhost:9006,即 Web 服务的实际端口。
  • proxy_set_header:用于设置一些请求头信息,帮助服务器识别客户端的真实 IP 地址和请求来源。+ proxy_set_header:用于设置一些请求头信息,帮助服务器识别客户端的真实 IP 地址和请求来源。

通过创建符号链接将新配置文件添加到 sites-enabled 目录,以启用该站点:

sudo ln -s /etc/nginx/sites-available/bhu619.cn /etc/nginx/sites-enabled/

使用 nginx -t 命令来检查配置文件的语法是否正确:

sudo nginx -t

重启或重新加载 Nginx,使配置生效:

sudo systemctl reload nginx

现在,打开浏览器,访问 http://bhu619.cn。Nginx 会将该请求转发到 localhost:9006,不需要在 URL 中显式指定端口号。

但是目前我还没有进行网站备案,所以还是无法访问。。。

后续

  1. 为了确保安全访问,考虑为bhu619.cn 配置 SSL(HTTPS)

总结

以上配置完成后,用户可以通过 http://bhu619.cnhttps://bhu619.cn(如果启用了 HTTPS)访问 Web 服务器,Nginx 会将请求反向代理到 localhost:9006,从而隐藏了实际端口。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/12510.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaEE进阶】Spring 事务和事务传播机制

目录 1.事务回顾 1.1 什么是事务 1.2 为什么需要事务 1.3 事务的操作 2. Spring 中事务的实现 2.1 Spring 编程式事务(了解) 2.2 Spring声明式事务 Transactional 对比事务提交和回滚的日志 3. Transactional详解 3.1 rollbackFor 3.2 Transactional 注解什么时候会…

Python 实现阿里滑块全攻略

阿里划块技术为开发者提供了高精度的视觉分割能力,而 Python 作为一种简洁高效的编程语言,可以轻松调用阿里划块接口,实现各种场景下的图像分割需求。 Python 调用阿里云分割抠图 - 商品分割接口的步骤如下:首先,开通…

[ComfyUI]Flux:繁荣生态魔盒已开启,6款LORA已来,更有MJ6写实动漫风景艺术迪士尼全套

今天,我们将向您介绍一款非常实用的工具——[ComfyUI]Flux。这是一款基于Stable Diffusion的AI绘画工具,旨在为您提供一键式生成图像的便捷体验。无论您是AI绘画的新手还是专业人士,这个工具都能为您带来极大的便利。 在这个教程中&#xff…

阿里云CDN稳定吗?

在互联网服务中,CDN(内容分发网络)扮演着至关重要的角色,它能够加速网站加载速度,提升用户体验。那么,作为市场上的领先者之一,阿里云的CDN到底稳定吗?九河云来和你说一说吧。 一、…

Matlab实现鹈鹕优化算法(POA)求解路径规划问题

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1内容介绍 鹈鹕优化算法(POA)是一种受自然界鹈鹕捕食行为启发的优化算法。该算法通过模拟鹈鹕群体在寻找食物时的协作行为,如群飞、潜水和捕鱼等,来探索问题的最优解。POA因其…

C++builder中的人工智能(22):在C+++中读取WAV格式的音频文件

在这篇文章中,我们将探讨如何在C中读取WAV格式的音频文件。音频文件是计算机科学和编程中的一个重要组成部分,正确使用音频可以为娱乐应用程序增添乐趣,或者在业务应用程序中提醒用户重要事件或状态变化。在这篇文章中,我们将解释…

.NET Core 应用程序如何在 Linux 中创建 Systemd 服务 ?

.NET Core 和 Linux 已经成为一个强大的组合,为开发人员提供了一个灵活、高性能的平台来构建和运行应用程序。在 Linux 上部署 .NET Core 应用程序的一个关键方面是利用 systemd 服务来确保应用程序顺利运行,在开机时自动启动,并在失败后重新…

@RestController 源码解读:解决 Web 开发中 REST 服务的疑难杂症

目录 一、RestContrller注解 1.1 查看底层源码 1.2 AliasFor注解说明 1.2.1 注解别名 1.2.2 元数据别名 1.3 value() 方法的作用 一、RestContrller注解 1.1 查看底层源码 首先编写如下内容: RestController public class TestController {} 按住 Ctrl &am…

vs2019托管调试助手 “ContextSwitchDeadlock“错误

错误描述 托管调试助手 "ContextSwitchDeadlock":“CLR 无法从 COM 上下文 0xd183e0 转换为 COM 上下文 0xd18328,这种状态已持续 60 秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的情况下处理一个运行时间非常长…

H.264/H.265播放器EasyPlayer.js RTSP播放器关于webcodecs硬解码H265的问题

EasyPlayer.js H5播放器,是一款能够同时支持HTTP、HTTP-FLV、HLS(m3u8)、WS视频直播与视频点播等多种协议,支持H.264、H.265、AAC、G711A、Mp3等多种音视频编码格式,支持MSE、WASM、WebCodec等多种解码方式&#xff0c…

免费在线图片翻译工具:PicTech

文章目录 简介编辑功能 简介 PicTech是一款免费的在线图片翻译工具。图片翻译,顾名思义就是把图片中的文字翻译成另外一种语言,并以图片的形式输出。这种功能在手机的词典软件中似乎还挺常见的,但作为一种在线工具我还是第一次见。 其使用过…

【Vue】Vue3.0(二十)Vue 3.0 中mitt的使用示例

上篇文章 【Vue】Vue3.0(十九)Vue 3.0 中一种组件间通信方式-自定义事件 🏡作者主页:点击! 🤖Vue专栏:点击! ⏰️创作时间:2024年11月11日12点23分 文章目录 一、mitt 在…

搭建监控系统Prometheus + Grafana

公司有个技术分享会,但是业务忙,没时间精心准备,所以就匆匆忙忙准备分享一下搭建(捂脸哭)。技术含量确实不多,但是分享的知识确实没问题。 以下是搭建过程: 一、讲解 Prometheus Prometheus 最…

蓝桥杯真题——班级活动

目录 题目链接:1.班级活动 - 蓝桥云课 题目描述 输入格式 输出格式 样例输入 样例输出 样例说明 评测用例规模与约定 解法一:Map集合处理 举个例子 Java写法: C写法: 运行时间 时间复杂度和空间复杂度 时间复杂度…

Win10下使用Anaconda安装GPU版本PyTorch

一、判断是否有Nvidia(英伟达)显卡 右键开始菜单,在弹出选项中选择任务管理器。 点性能选项,然后点GPU。在右上方会显示GPU名称,只有带NVIDIA的英伟达显卡的电脑才能安装GPU版本,否则其他的就只能安装CPU版本。 二、安装CUDA 首…

精品案例PPT | 企业架构及典型设计方案

本文全面介绍企业架构的理论和实践,包括企业架构的概述、元模型、视图、业务架构、应用架构、数据架构、技术架构以及企业架构管控等内容,有助于企业管理者理解和设计企业级的IT架构,确保架构的全局性、整体性、关联性、可控制性、可实现性和…

java--泛型

欢迎来到我的博客~~欢迎大家对我的博客进行指导~点击进入我的博客主页 目录 一、什么是泛型二、包装类2.1基本数据类型和对应的包装类2.2装箱和拆箱2.3 自动装箱和自动拆箱 三、引出泛型四、泛型类的使用4.1 语法4.2示例 五、泛型如何编译的六、泛型的上界6.1语法6.2 示例 七、…

【CentOS】中的Firewalld:全面介绍与实战应用(下)

🐇明明跟你说过:个人主页 🏅个人专栏:《Linux :从菜鸟到飞鸟的逆袭》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、iptables 时代 2、firewalld 时代 二、服务管…

【新人系列】Python 入门(九):数据结构 - 中

✍ 个人博客:https://blog.csdn.net/Newin2020?typeblog 📝 专栏地址:https://blog.csdn.net/newin2020/category_12801353.html 📣 专栏定位:为 0 基础刚入门 Python 的小伙伴提供详细的讲解,也欢迎大佬们…

如何用【钉钉文档】发公告

功能亮点 ✔️借助钉钉文档强大的编辑能力,可以让编写出的公告更加精美。 ✔️将钉钉文档一键导入公告,可以完整保留已经编辑好的格式,无需再手动调整。 ✔️使用钉钉文档,可以将所有公告内容有序沉淀和保存。 💡 使…