server_name 如何配置多域名接入
在 nginx 中配置微服务网关的多域名接入,核心做法是在 server 块中使用 server_name 指令列出所有需要监听的域名。nginx 会根据请求头中的 host 字段匹配 server_name,一旦匹配成功,就会进入该虚拟主机处理逻辑。通过这种方式,你可以让同一个网关实例同时响应多个不同域名的请求,并将它们统一转发到后端的微服务集群。

如何根据域名区分不同的路由规则
要实现基于域名的差异化路由,需要在每个 server 块内部定义独立的 location 或 upstream 配置。虽然 server_name 负责将请求分流到正确的 server 块,但具体的业务路由逻辑(如路径重写、负载均衡策略)需要在该块内单独配置。这样,不同域名的流量虽然经过同一台 Nginx 服务器,但会被引导至不同的后端服务组或应用不同的访问控制策略。

server {
listen 80;
server_name api.example.com gateway.example.com;
# 通用网关入口
location /api/ {
proxy_pass http://backend_cluster;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
upstream backend_cluster {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
如何处理非标准端口或 HTTPS 的域名绑定
当涉及 HTTPS 或多端口接入时,server_name 的配置依然遵循相同的匹配逻辑,但需要结合 listen 指令和 SSL 证书配置。对于 HTTPS 场景,Nginx 会先根据 IP 和端口定位到对应的 server 块,如果存在多个 server 监听同一端口,则进一步通过 server_name 进行精确匹配。此时,必须确保每个域名都绑定了有效的 SSL 证书,否则浏览器会拒绝连接。此外,还可以利用 map 指令在 HTTP 层面对域名进行预处理,实现更灵活的路由分发。

server {
listen 443 ssl;
server_name secure.api.example.com;
ssl_certificate /etc/nginx/ssl/api.crt;
ssl_certificate_key /etc/nginx/ssl/api.key;
location / {
proxy_pass http://secure_backend;
}
}
upstream secure_backend {
server 192.168.1.20:8443;
}











