阿里云服务器部署多个Web项目的Nginx配置指南
结论:在阿里云服务器上使用Nginx部署多个Web项目,关键在于正确配置server块、合理设置监听端口/域名,并通过location指令实现请求分发。核心是通过虚拟主机技术实现多项目共存。
一、基础环境准备
-
安装Nginx:
sudo apt update sudo apt install nginx
-
项目目录结构建议:
/var/www/ ├── project1/ # 项目1目录 │ └── public/ # 入口文件目录 ├── project2/ # 项目2目录 │ └── public/ └── ...
二、多项目配置方案
方案1:基于不同端口的配置(适合测试环境)
# 项目1配置
server {
listen 8080;
server_name localhost;
root /var/www/project1/public;
index index.html index.php;
# 其他配置...
}
# 项目2配置
server {
listen 8081;
server_name localhost;
root /var/www/project2/public;
index index.html index.php;
}
优点:配置简单,无需域名
缺点:需要记忆端口号,不专业
方案2:基于不同域名的配置(推荐生产环境)
# 项目1配置
server {
listen 80;
server_name www.project1.com project1.com;
root /var/www/project1/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# PHP处理配置
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
}
# 项目2配置
server {
listen 80;
server_name www.project2.com project2.com;
root /var/www/project2/public;
# 其他类似配置...
}
关键点:
- 每个项目使用独立的server块
- 通过server_name区分不同项目
- root指向各项目的公开目录
三、高级配置技巧
-
HTTPS配置(使用Let’s Encrypt免费证书):
sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d yourdomain.com
-
负载均衡配置(当单项目需要多实例时):
upstream project1 { server 127.0.0.1:8000; server 127.0.0.1:8001; } server { location / { proxy_pass http://project1; } }
-
静态资源缓存优化:
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ { expires 365d; add_header Cache-Control "public, no-transform"; }
四、常见问题解决
-
403 Forbidden错误:
- 检查目录权限:
chmod -R 755 /var/www
- 检查所有者:
chown -R www-data:www-data /var/www
- 检查目录权限:
-
502 Bad Gateway错误:
- 检查PHP-FPM是否运行:
sudo systemctl status php7.4-fpm
- 检查Nginx与PHP-FPM的sock文件路径是否匹配
- 检查PHP-FPM是否运行:
-
重定向循环问题:
- 检查HTTPS配置是否正确
- 避免在应用和Nginx同时做重定向
五、最佳实践建议
-
每个项目使用独立配置文件:
- 在
/etc/nginx/conf.d/
下为每个项目创建单独的.conf文件 - 主配置文件通过
include
指令引入
- 在
-
日志分离:
access_log /var/log/nginx/project1_access.log; error_log /var/log/nginx/project1_error.log;
-
安全加固:
- 禁用不必要的HTTP方法:
limit_except GET POST { deny all; }
- 隐藏Nginx版本号:
server_tokens off;
- 禁用不必要的HTTP方法:
最终建议:对于生产环境,始终使用域名区分项目+HTTPS加密的组合方案,这是最专业可靠的部署方式。配置完成后务必执行nginx -t
测试配置,然后systemctl reload nginx
平滑重载配置。