0%

上传文件到ECS服务器并开放请求

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
2
sudo yum install epel-release
sudo yum install nginx

启动Nginx并设置其开机自启动:

1
2
sudo systemctl start nginx
sudo systemctl enable nginx

浏览器输入你的服务器ip,如果安装成功会显示:

1
Welcome to HTTP Server Test Page!

编辑Nginx的配置文件:

1
sudo vi /etc/nginx/nginx.conf

找到 server 块并修改为如下内容,

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen 80;
server_name your-ecs-ip;

root _;
index index.html;

location / {
try_files $uri $uri/ =404;
}
}
+ 默认资源存放路径为`/usr/share/nginx/html/`:
+ 有域名时再用`server_name`没有不操作

保存并退出编辑器,重启Nginx以应用配置:

1
sudo systemctl restart nginx

然后开放80端口:到ecs服务控制台,找到网络与安全>安全组>管理规则>快速添加>HTTP-所有IPv4(0.0.0.0/0)

绑定域名

绑定域名在启用API文章 Linux服务器部署API的方法小节有提到,这里记录下完成流程;
首先的有域名,自己去阿里云域名控制台购买一个,备案(很重要)!!
然后找点购买的域名信息,点击解析。添加一个A记录,使您的域名指向您的服务器IP地址。

1
2
3
主机名(Hostname): @ 或www 及其他子域名
类型(Type): A
值(Value): 8.134.102.5:

我绑定的是 cdn.rfcode.top
编辑Nginx的配置文件:

1
sudo vi /etc/nginx/nginx.conf

修改server里面的servername,其中cdn.rfcode.top为你绑定的域名:

1
2
3
4
5
server {
...
server_name cdn.rfcode.top;
...
}

重启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
2
npm install cors
# yarn add cors

接口代码引入:

1
2
const cors = require('cors'); 
app.use(cors());

打开nginx配置文件:

1
sudo vim /etc/nginx/nginx.conf

修改配置,找到server代码部分并添加上location /api/ {***}相关代码,如下,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server {
...
server_name cdn.rfcode.top;
...

location / {
try_files $uri $uri/ =404;
}

# 添加代理设置
location /api/ {
proxy_pass http://localhost:3000/;
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;
}
}

其中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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
server {
listen 80;
server_name cdn.rfcode.top;

location /api/ {
proxy_pass http://localhost:3000/;
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;

# 添加 CORS 头部
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type';
if ($request_method = 'OPTIONS') {
return 204;
}
}

location / {
try_files $uri $uri/ =404;
}
}

最后保存重新加载 NGINX 配置生效:

1
sudo systemctl reload nginx

启用长请求链接

如果需要在服务器执行某个长时间运行的任务,并希望客户端在等待期间不会因为超时而断开连接,需修改请求链接时长配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
http {
...
# 与上游服务器建立连接的超时时间
proxy_connect_timeout 300s; # 300秒(5分钟)

# 向上游服务器发送请求数据的超时时间
proxy_send_timeout 300s; # 300秒(5分钟)

# 从上游服务器读取响应数据的超时时间
proxy_read_timeout 300s; # 300秒(5分钟)

# 向客户端发送响应数据的超时时间
send_timeout 300s; # 300秒(5分钟)
...
}

相关文章:Linux服务器部署API的方法

-------------本文结束感谢您的阅读-------------