背景:在一台服务上同时要部署 nginx web站点 app的API服务呢,该如何做?如果有两台服务器又该如何做?本文实际操作并进行记录。
如果第一台服务器需要同时部署 Nginx Web 站点 和 App 的 API 服务,可以通过 Nginx 的配置将不同的请求路径或域名分别转发到 Web 站点和 API 服务。以下是具体步骤:
1. 安装 Nginx 和 API 服务
确保在第一台服务器上安装 Nginx 和 API 服务。
安装 Nginx
sudo apt update
sudo apt install nginx
安装 API 服务
根据你的 API 服务需求,安装相应的环境(如 Node.js、Python、Java 等),并部署 API 服务。
2. 部署 Web 站点
将你的 Web 站点文件放到服务器上,例如 /var/www/html
目录。
3. 配置 Nginx
通过 Nginx 配置,将 Web 站点和 API 服务的请求分开处理。
编辑 Nginx 配置文件
sudo nano /etc/nginx/sites-available/default
示例配置
以下是一个示例配置,假设:
- Web 站点根路径为
/var/www/html
。 - API 服务运行在
127.0.0.1:3000
。
server {
listen 80;
server_name your_domain.com;
# 配置 Web 站点
location / {
root /var/www/html; # Web 站点的根目录
index index.html index.htm;
}
# 配置 API 服务
location /api/ {
proxy_pass http://127.0.0.1:3000/; # 将 /api/ 开头的请求转发到 API 服务
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;
}
}
重启 Nginx
sudo systemctl restart nginx
4. 部署 API 服务
确保 API 服务已启动并监听指定端口(如 3000)。
5. 测试
- 访问
http://your_domain.com
,应该看到 Web 站点。 - 访问
http://your_domain.com/api/
,应该看到 API 服务的响应。
6. 使用不同域名(可选)
如果你希望通过不同的域名访问 Web 站点和 API 服务,可以配置多个 server
块。
示例配置
# Web 站点配置
server {
listen 80;
server_name web.your_domain.com;
location / {
root /var/www/html;
index index.html index.htm;
}
}
# API 服务配置
server {
listen 80;
server_name api.your_domain.com;
location / {
proxy_pass http://127.0.0.1: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;
}
}
重启 Nginx
sudo systemctl restart nginx
测试
- 访问
http://web.your_domain.com
,应该看到 Web 站点。 - 访问
http://api.your_domain.com
,应该看到 API 服务的响应。
7. 后期扩展
当增加第二台服务器时,可以更新 Nginx 配置,将 API 服务的请求转发到第二台服务器。
更新 Nginx 配置
upstream api_servers {
server 127.0.0.1:3000; # 第一台服务器的 API 服务
server 192.168.1.2:3000; # 第二台服务器的 API 服务
}
server {
listen 80;
server_name api.your_domain.com;
location / {
proxy_pass http://api_servers;
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;
}
}
重启 Nginx
sudo systemctl restart nginx
8. 其他注意事项
- 静态文件缓存:如果 Web 站点有大量静态文件,可以配置 Nginx 缓存。
- SSL/TLS:使用 Let's Encrypt 为 Web 站点和 API 服务配置 HTTPS。
- 防火墙:确保防火墙允许 HTTP/HTTPS 流量。
通过以上步骤,你可以在第一台服务器上同时部署 Nginx Web 站点和 API 服务,并支持后期扩展。