在轻量服务器上部署多个网站,可以通过以下几种方式设置域名和端口:
一、基于域名的虚拟主机(推荐)
1. Nginx 配置示例
# 网站1:www.site1.com
server {
listen 80;
server_name www.site1.com site1.com;
location / {
root /var/www/site1;
index index.html index.php;
}
}
# 网站2:www.site2.com
server {
listen 80;
server_name www.site2.com site2.com;
location / {
root /var/www/site2;
index index.html index.php;
}
}
2. Apache 配置示例
# 网站1
<VirtualHost *:80>
ServerName www.site1.com
ServerAlias site1.com
DocumentRoot /var/www/site1
</VirtualHost>
# 网站2
<VirtualHost *:80>
ServerName www.site2.com
ServerAlias site2.com
DocumentRoot /var/www/site2
</VirtualHost>
二、基于端口的方式
1. 不同端口对应不同网站
# 网站1:使用80端口
server {
listen 80;
server_name _;
root /var/www/site1;
}
# 网站2:使用8080端口
server {
listen 8080;
server_name _;
root /var/www/site2;
}
# 网站3:使用8081端口
server {
listen 8081;
server_name _;
root /var/www/site3;
}
三、域名解析设置
1. 域名服务商处配置
A记录:
www.site1.com → 服务器IP
site1.com → 服务器IP
www.site2.com → 服务器IP
site2.com → 服务器IP
2. 本地hosts测试(开发环境)
服务器IP www.site1.com
服务器IP www.site2.com
四、完整部署步骤
步骤1:准备网站目录
# 创建网站目录
sudo mkdir -p /var/www/{site1,site2,site3}
# 设置权限
sudo chown -R www-data:www-data /var/www/
步骤2:安装并配置Web服务器
# 安装Nginx
sudo apt update
sudo apt install nginx
# 创建配置文件
sudo nano /etc/nginx/sites-available/site1.conf
sudo nano /etc/nginx/sites-available/site2.conf
# 启用站点
sudo ln -s /etc/nginx/sites-available/site1.conf /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/site2.conf /etc/nginx/sites-enabled/
# 测试配置
sudo nginx -t
# 重启Nginx
sudo systemctl restart nginx
步骤3:防火墙设置
# 开放端口
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 8080/tcp # 如果使用非标准端口
# 启用防火墙
sudo ufw enable
五、HTTPS配置(SSL证书)
使用Let’s Encrypt
# 安装Certbot
sudo apt install certbot python3-certbot-nginx
# 为多个域名申请证书
sudo certbot --nginx -d site1.com -d www.site1.com
sudo certbot --nginx -d site2.com -d www.site2.com
# 自动续期
sudo certbot renew --dry-run
六、反向XX配置(适用于Node.js、Python等应用)
# Node.js应用
server {
listen 80;
server_name app.site1.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
# Python Django应用
server {
listen 80;
server_name api.site2.com;
location / {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
七、最佳实践建议
- 域名方式优先:尽量使用基于域名的虚拟主机,用户体验更好
- 统一端口:对外统一使用80(HTTP)和443(HTTPS)端口
- 目录分离:每个网站使用独立的目录,便于管理
- 日志分离:为每个网站配置独立的访问日志
- 资源限制:根据需求为不同网站设置资源限制
八、常见问题解决
-
403 Forbidden错误
# 检查目录权限 sudo chmod -R 755 /var/www/site1 sudo chown -R www-data:www-data /var/www/site1 -
Nginx配置测试
sudo nginx -t sudo systemctl reload nginx -
查看端口占用
sudo netstat -tlnp sudo lsof -i :80
选择哪种方式取决于具体需求:
- 对外服务:推荐基于域名的方式
- 内部服务或测试:可以使用端口区分
- API服务:可以考虑使用子域名或路径区分
CLOUD技术笔记