1. 上传文件到ECS服务器
你可以使用SCP或SFTPxx。配置好公钥后,文件上传到你的ECS服务器路径上。以SCP为例:
1 | scp /path/to/yourfile.html username@your-ecs-ip:/path/to/server/directory |
- /path/to/yourfile.html 是你本地文件的路径。
- username 是你在ECS服务器上的用户名。
- your-ecs-ip 是你的ECS服务器的IP地址。
- /path/to/server/directory 是你希望在ECS服务器上存放文件的路径。
安装和配置Web服务器
在ECS服务器上使用有sudo权限的用户进行操作,安装一个Web服务器,比如Nginx或Apache。这里我是基于CentOS的Nginx:
1 | sudo yum install epel-release |
启动Nginx并设置其开机自启动:
1 | sudo systemctl start nginx |
浏览器输入你的服务器ip,如果安装成功会显示:
1 | Welcome to HTTP Server Test Page! |
编辑Nginx的配置文件:
1 | sudo vi /etc/nginx/nginx.conf |
找到 server 块并修改为如下内容,
1 | server { |
保存并退出编辑器,重启Nginx以应用配置:
1 | sudo systemctl restart nginx |
然后开放80端口:到ecs服务控制台,找到网络与安全>安全组>管理规则>快速添加>HTTP-所有IPv4(0.0.0.0/0)
,
绑定域名
绑定域名在启用API文章 Linux服务器部署API的方法小节有提到,这里记录下完成流程;
首先的有域名,自己去阿里云域名控制台购买一个,备案(很重要)!!
然后找点购买的域名信息,点击解析。添加一个A记录,使您的域名指向您的服务器IP地址。
1 | 主机名(Hostname): @ 或www 及其他子域名 |
我绑定的是 cdn.rfcode.top
编辑Nginx的配置文件:
1 | sudo vi /etc/nginx/nginx.conf |
修改server里面的servername,其中cdn.rfcode.top
为你绑定的域名:
1 | server { |
重启ngnix
,完成:
1 | sudo systemctl reload nginx |
验证,打开您的浏览器并访问您的域名http://cdn.rfcode.top,确认您的网站可以正常访问。
设置HTTPS
为了网站更加安全,可以域名配置HTTPS。我用的是Let’s Encrypt免费的SSL证书:
安装Certbot
1 | sudo yum install certbot python3-certbot-nginx |
获取证书
1 | sudo certbot --nginx -d cdn.rfcode.top |
Certbot会自动设置证书续期任务。可以手动测试下:
1 | sudo certbot renew --dry-run |
证书步骤完成后,到ecs服务控制台,找到网络与安全>安全组>管理规则>快速添加>HTTPS-所有IPv4(0.0.0.0/0)
,开放443端口。
验证,打开您的浏览器并访问您的域名https://cdn.rfcode.top。
允许跨区
后期启用非同源https请求api时,需要开启允许跨域否则会报错:
1 | Access to fetch at 'https://cdn.rfcode.top/getarticles' from origin 'http://192.168.100.106:6002' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled. |
方案一
接口代码添加cors标头并修改nginx配置:
如果还没有安装 cors,可以通过 npm 或 yarn 安装它:
1 | npm install cors |
接口代码引入:
1 | const cors = require('cors'); |
打开nginx配置文件:
1 | sudo vim /etc/nginx/nginx.conf |
修改配置,找到server代码部分并添加上location /api/ {***}
相关代码,如下,
1 | server { |
其中http://localhost:3000/
是你设置的代理路径,例如远端请求https://cdn.rfcode.top/api/deploy
,请求链接存在/api/
就会把https://cdn.rfcode.top/api/
自动转到http://localhost:3000/
,最终相当于请求http://localhost:3000/deploy
:
设置请求路径代理就是为了方便提供静态文件服务,开辟某几条通道作为特定api请求入口,因此建议不要改动 location /{}
而是重定义location /path/{}
,
最后保存重新加载 NGINX 配置生效:
1 | sudo systemctl reload nginx |
方案二
直接修改配置,打开nginx配置文件:
1 | sudo vim /etc/nginx/nginx.conf |
找到以下代码并添加上location /api/ {***}
部分,其中http://localhost:3000/
是你设置的代理路径,例如远端请求https://cdn.rfcode.top/api/deploy
,请求链接存在/api/
就会把https://cdn.rfcode.top/api/
自动转到http://localhost:3000/
,最终相当于请求http://localhost:3000/deploy
。
注意,用该方案脚本代码就不能有方案一的cors标头相关代码了,否则会冲突解决不了跨域问题
1 | server { |
最后保存重新加载 NGINX 配置生效:
1 | sudo systemctl reload nginx |
启用长请求链接
如果需要在服务器执行某个长时间运行的任务,并希望客户端在等待期间不会因为超时而断开连接,需修改请求链接时长配置:
1 | http { |
相关文章:Linux服务器部署API的方法