1 创建 Nginx 配置文件: 在 Nginx 配置文件夹中(通常在 /etc/nginx/conf.d/
或 /etc/nginx/sites-available/
中)创建一个新的配置文件,例如 tenant.conf
。
2 配置泛域名解析
2.1指向同一个后端服务的
server {
listen 80;
server_name ~^(?<subdomain>.+)\.yourapp\.com$;
location / {
proxy_pass http://127.0.0.1:8000; # 后端应用服务器的地址和端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 其他代理相关配置
}
# SSL 配置
listen 443 ssl;
ssl_certificate /path/to/ssl/cert.pem;
ssl_certificate_key /path/to/ssl/private.key;
}
2.2 指向不同的后端服务的
http {
map $host $tenant_id {
~^(?<subdomain>.+)\.yourapp\.com$ $subdomain;
}
server {
listen 80;
server_name ~^(?<subdomain>.+)\.yourapp\.com$;
location / {
proxy_pass http://backend-server-$tenant_id;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 其他代理相关配置
}
}
}
举例说明:
假设您有以下两个子域名:
tenant1.yourapp.com
tenant2.yourapp.com
使用上述 map 指令,当请求的主机名是 tenant1.yourapp.com 时,正则表达式将匹配成功,并从中提取子域名 tenant1。这个值将被映射到变量 $tenant_id,从而将 $tenant_id 设置为 tenant1。
同样地,如果请求的主机名是 tenant2.yourapp.com,正则表达式将提取子域名 tenant2,并将其映射到变量 $tenant_id,将 $tenant_id 设置为 tenant2。