这是一系列服务端踩坑笔记,记录笔者从零开始服务端学习之旅
服务器
既然是服务器踩坑,拥有一个服务器是必要条件,这里介绍一个低成本的尝试
购买
腾讯云每天都有 4 核 4G 轻量级服务器的特价活动,38 元/年,相比原价动辄五六百的价格,很香。每天两次抢购机会,抢中的概率还是挺大的
系统安装
服务器其实就是一个云端电脑,它也需要操作系统,我这里选择基于 linux 内核发行的 debian,选择 Cen'tOS,Ubuntu 对服务器部署差别也不会很大,根据个人喜好

既然是系统,当然要设置登录密码,不过后续登录基本不会用到图形界面,使用 ssh 终端登录服务器

ssh 终端
使用服务器的服务,需要用到不同端口,例如 web http 服务是 80 端口,linux ssh 登录是 22 端口,如果要本地 ssh 登录远端服务器,还要开启服务器的 22 端口,一般服务器已经默认开启,在服务器页面-防火墙标签页可以看到端口开放情况

笔者用的终端是 FinalShell,服务器登录成功如下

我现在本地有一个前端项目,需要部署到服务器,方便浏览器中查看,应该怎么做呢,这里要提到 nginx
nginx
nginx 很强大,这里不深入探讨,目前我们只需要用到一点功能,请求转发,它可以监听服务器入口流量,根据 ip,端口,域名,将请求执行不同的服务,当然不用 nginx,我们也可以把前端项目放在服务器,在浏览器也可以访问到,这里就不做介绍
基本配置
在 Debian 中安装应用非常方便,使用命令即可安装
bash
# 更新软件源
apt update
# 安装 nginx
apt install nginx
安装成功,查看 nginx 运行状态,active 表示正在运行
bash
systemctl status nginx

nginx 的目录一般在/etc/nginx下,我们可以在/etc/nginx/conf.d下创建自己的配置文件,名称自定义方便区分即可

双击打开,设置规则
- listen 80:拦截 web http 访问
- server_name:服务器 ip 地址
- root:/var/www/utils-web 项目文件根目录
- index index.html index.htm 默认首页文件
其他照抄即可

对应 web 项目

设置完成,检查配置,重启 nginx 服务
bash
// nginx 验证配置正确性
nginx -t
// 重启服务
systemctl restart nginx

一般到这步结束,在浏览输入服务器 ip,回车应该可以看到网站,如果访问异常,可以尝试以下几点排错
排错
端口
nginx 监听的是 80 端口,如果端口被其他服务占用,nginx -t配置验证就不通过。那么我们可以看一下腾讯云服务器里防火墙规则,80 端口是否放行,如果系统安装了防火墙,也要看防火墙端口规则
我这里安装了 ufw,查看配置规则
bash
ufw status

文件权限
因为对文件权限的不了解,我就遇到了/var/www/utils-web不属于 root,导致页面一直无法访问,关于文件(夹)所属用户和用户组,可以从 finalshell 底部文件浏览器直观看到

https
当我们在浏览地址栏输入 ip 访问网页时候,有些浏览可能会提示

这就不得不提到 https,默认我们的请求都是 http 的,https 比 http 安全系数更高,配置有些后台服务,明确要求要使用 https(例如微信小程序),配置 https 还是很有必要的,这里我们申请腾讯云免费的 ssl 证书

域名和备案
但是这里有个问题,免费证书需要提供域名,我们还要去申请域名。阿里云和腾讯云都提供有域名服务,根据喜好选择即可。可以选择冷门后缀的域名,价格优惠不少
😱😱 如果是国内的网站,部署上线还要完成备案,备案跟域名也有关系,域名的备案跟服务器是绑定的,就是说域名在哪里备案,服务器也要在哪里购买,虽然说可以转移备案,毕竟麻烦不少,所以备案域名时需要注意,这跟域名在哪里买没关系
域名购买完后,就可以着手开始备案,我在阿里云买的域名,但是服务器在腾讯云,因此就在腾讯云备案,一般备案需要半个多月,中间腾讯客服人员会打电话询问一些网站情况,注意接听电话
ssl证书
提交免费 ssl 申请,很快就能获取免费的 ssl 证书,下载 nginx 证书配置文件

修改 /var/nginx/conf.d/ankkaya.conf的配置,把前面下载的 ssl 压缩包中的 .crt 和 .key 文件放到/etc/nginx/ssl目录下,如果没有这个目录,新建该目录,重启服务
配置中有新用到的 443 端口,服务器和系统内(如果有防火墙)也要添加 443 的规则
bash
server {
listen 80;
server_name ankkaya.top; # 你的服务器IP地址或域名
return 301 https://$server_name$request_uri; # 重定向到 https
location / {
root /var/www/utils-web; # 项目文件的根目录
index index.html index.htm; # 默认首页文件
try_files $uri $uri/ =404; # 尝试按顺序查找文件或目录,不存在则返回404
}
}
server {
listen 443 ssl; # https 端口
server_name ankkaya.top www.ankkaya.top;
ssl_certificate /etc/nginx/ssl/ankkaya.top_nginx/ankkaya.top_bundle.crt;
ssl_certificate_key /etc/nginx/ssl/ankkaya.top_nginx/ankkaya.top.key;
# 其他配置项,如根目录、代理等
location / {
root /var/www/utils-web;
index index.html index.htm;
}
}
这时在浏览器输入 ip 已经无法访问网页,因为在 nginx 配置中,server_name 都配为了域名和子域名,但是输入域名也无法访问,这就要说到 DNS 解析,服务器只认 ip 地址,如果是域名,需要配置 DNS 解析,告诉浏览器去哪里获取资源
😱😱 域名在哪里购买,DNS 解析也要在对应平台配置,我的域名在阿里云买的,就要到阿里云配置 DNS

在浏览器输入域名地址ankkaya.top,就可以打开网站了