在Nginx中配置一个域名访问多个项目,可以通过以下几种常见方式实现:
server {
listen 80;
server_name example.com;
location /project1 {
alias /var/www/project1;
try_files $uri $uri/ /project1/index.html;
}
location /project2 {
alias /var/www/project2;
try_files $uri $uri/ /project2/index.html;
}
}
访问方式: - example.com/project1 - example.com/project2
server {
listen 80;
server_name app1.example.com;
root /var/www/app1;
index index.html;
}
server {
listen 80;
server_name app2.example.com;
root /var/www/app2;
index index.html;
}
访问方式: - app1.example.com - app2.example.com
server {
listen 80;
server_name example.com;
location /api1 {
proxy_pass http://localhost:3001;
proxy_set_header Host $host;
}
location /api2 {
proxy_pass http://localhost:3002;
proxy_set_header Host $host;
}
}
server {
listen 80;
server_name example.com;
rewrite ^/blog/(.*)$ /wordpress/$1 last;
location /wordpress {
root /var/www;
index index.php;
}
}
alias
时要注意路径拼接问题proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
server {
listen 80;
server_name example.com;
# 静态项目A
location /static-app {
alias /var/www/static-app;
try_files $uri $uri/ /static-app/index.html;
}
# 动态项目B(反向代理)
location /api {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
}
# 子路径重定向
location /old-path {
return 301 /new-path;
}
# 默认处理
location / {
root /var/www/main-app;
index index.html;
}
}
选择哪种方式取决于具体需求: - 路径区分:适合少量项目,简单直接 - 子域名:适合独立性强、需要隔离cookie的项目 - 反向代理:适合后端服务分离的架构
配置完成后记得测试并重载Nginx:
sudo nginx -t # 测试配置
sudo systemctl reload nginx # 重载配置