服务器折腾之旅:购入服务器,域名绑定与反向代理
宝贵的端午假期,干了几件事:科目二终于上车实操了;买了属于自己的云服务器。关于云服务器,两年以前我试用过阿里云的服务器,并在上面搭建起了自己的应用,当时的体验还不错,不过试用期三个月过去,并没有继续续费。
今年上旬随着关注了一些Github项目,拥有一个服务器的想法愈发强烈。假期第一天,在斟酌许久以后,终于在阿里云下单了一个两年的香港服务器,共计1900大洋。
服务器采购之旅
下单服务器之前,看了很多个厂商:阿里云是首选,腾讯云,华为云,火山引擎,七牛云都在清单上。从价格和服务上,阿里云都是性价比最高的选择。我最开始下单了一台华东的服务器,价格上两年只要一千块,但是在部署服务的时候遇到了不少需要折腾的地方:
首先就是大陆服务器的限制问题,导致docker的官方镜像源没办法拉,虽然可以用阿里云的加速源解决,但是还是有部分镜像在国内镜像源始终无法拉取。
其次是致命的访问问题,我在服务器上部署了几个应用,但是在安全组端口策略和防火墙策略已经放开的情况下,始终无法访问。这里附上我提的工单,不得不提,阿里云的售后服务效率很高,本以为假期无法回复,想不到迅速就给出了解答。
在解答的过程中,注意到是代理的问题,由于我的电脑和主机长年开着代理,导致访问时会出现阻塞,使用一个国际服务器在一定程度上可以解决这个问题。
亚太服务器中,香港和新加坡都是不错的选择。前者在国内访问速度更快,后者比前者要便宜300块钱,并且对国际访问更友好,权衡之下最终决定购入香港服务器。
域名绑定与Nginx反向代理
Nginx反代在这篇博客里简单介绍过,这里记录一下这次服务器部署的服务。首先,我在服务器上起了一个web服务,指向0.0.0.0:4444端口,在安全组策略配置过以后,可以通过IP:4444直接访问到这个服务,但是这显然不安全。
由于我有一个zerolovesea.top的域名,我希望将这个服务绑定在service.zerolovesea.top上,这样通过访问这个域名可以直接使用这个服务。首先需要在阿里云域名–>域名解析处添加一条A类型的主机记录,主机记录命名为se rvice,记录值为服务器ip。这样当访问service.zerolovesea.top时,就会跳转到服务器ip。
随后就是Nginx配置,首先我们添加一下service.zerolovesea.top.conf
作为配置项(vim /etc/nginx/conf.d/service.zerolovesea.top.conf
),配置如下:
1 |
|
我们需要监听服务器的http默认80端口,并将外部访问通过 http://service.zerolovesea.top 的请求,反向代理到本地的 http://127.0.0.1:4444。随后配置设置代理请求头,将客户端信息传递给服务器。
写完配置后,检查一下配置,并重启nginx:
1 |
|
在这之后,可以为域名申请一下SSL证书,使用certbot可以一键为nginx配置Https。
1 |
|
执行后,certbot会识别Nginx配置的所有域名,请求Let’s Encrypt 免费证书,随后修改 Nginx 配置文件,加上 SSL 配置。最后自动重启 Nginx 以生效。
Cloudflare代理配置
如果没有使用代理,那么之前的操作已经足够了,不过由于此前我的域名是通过CF代理的,因此需要在CF上配置一下DNS。同样添加一条A类型的service记录,指向服务器IP,代理状态打开。这时就大功告成了。访问service.zerolovesea.top直接可以访问到部署的应用。
streamlit服务部署踩坑
最后顺便记录一个踩坑心得。写了一个streamlit服务,使用Docker进行部署后,发现浏览器怎么都无法打开,显示Bad gateway Error code 502,该网页无法正常运作。安全组和入方向规则均已开放了端口,并且服务器和外网使用curl指令都可以获取到返回,就是浏览器上打不开。
检查后发现是由于Nginx 默认不转发Streamlit默认使用的WebSocket 协议头,在nginx配置里加上后就可以正常访问了。
curl 只取 HTML,不涉及 WebSocket、JS 执行,所以它不会暴露这个问题。
附上了最后我的配置:
1 |
|
修改完以后,sudo nginx -t && sudo systemctl reload nginx
一下,顺利解决。
2025/6/1 于苏州