Nginx可以通过配置多个server块来实现多域名转发,以下是最常见的几种实现方式:
server {
listen 80;
server_name domain1.com;
location / {
proxy_pass http://backend1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
listen 80;
server_name domain2.com;
location / {
proxy_pass http://backend2;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
listen 80;
server_name *.domain.com;
location / {
# 根据子域名转发到不同后端
if ($host ~* ^([^.]+)\.domain\.com$) {
set $subdomain $1;
proxy_pass http://backend-$subdomain;
}
proxy_set_header Host $host;
}
}
server {
listen 80;
server_name ~^(www\.)?(?<domain>.+)$;
location / {
# 根据捕获的域名部分进行转发
proxy_pass http://backend-$domain;
proxy_set_header Host $host;
}
}
server {
listen 443 ssl;
server_name domain1.com;
ssl_certificate /path/to/domain1.crt;
ssl_certificate_key /path/to/domain1.key;
location / {
proxy_pass http://backend1;
proxy_set_header Host $host;
}
}
server {
listen 443 ssl;
server_name domain2.com;
ssl_certificate /path/to/domain2.crt;
ssl_certificate_key /path/to/domain2.key;
location / {
proxy_pass http://backend2;
proxy_set_header Host $host;
}
}
map $host $backend {
default default_backend;
domain1.com backend1;
domain2.com backend2;
*.domain.com backend_wildcard;
}
server {
listen 80;
server_name _;
location / {
proxy_pass http://$backend;
proxy_set_header Host $host;
}
}
nginx -t
测试配置语法systemctl reload nginx
或nginx -s reload
重新加载配置以上配置可以根据实际需求进行组合和调整,Nginx的灵活性允许实现各种复杂的域名转发场景。