在 nginx 中配置 api 接口的独立调用域名,核心做法是在 server 块中使用 server_name 指令指定该域名,并通过 location 块将请求转发到后端服务。具体而言,你需要为 api 域名新建一个 server 块,设置 server_name api.example.com,然后在内部使用 proxy_pass 指向你的应用服务器地址(如 http://127.0.0.1:8080)。这样做可以将针对该域名的所有 http 请求隔离并路由到特定的后端逻辑,实现与其他网站流量的分离。

如何区分不同域名的请求处理
Nginx 通过 server_name 匹配请求头中的 Host 字段来决定由哪个 server 块处理请求。当客户端访问 api.example.com 时,Nginx 会查找 server_name 包含该域名的配置块。如果未找到匹配项,则回退到默认服务器(通常是第一个加载的或标记为默认的 server 块)。因此,确保 API 域名的 server 块正确配置且优先级合理是关键。

server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}上述配置创建了一个监听 80 端口、仅响应 api.example.com 的服务器块。它将所有根路径请求代理到本地 8080 端口的后端服务,并传递原始主机名和客户端 IP。预期结果是:对 api.example.com 的请求被成功转发至后端,而对其他域名的请求则由其他 server 块处理。
如何处理非标准端口或 HTTPS 场景
若 API 接口需通过 HTTPS 访问,需在 server 块中监听 443 端口并配置 SSL 证书。此时 server_name 仍用于标识域名,但需额外添加 ssl_certificate 和 ssl_certificate_key 指令。对于非标准端口(如 8443),只需修改 listen 指令即可,server_name 逻辑不变。关键点是确保 SSL 配置与域名绑定,避免证书不匹配错误。

server {
listen 443 ssl;
server_name api.example.com;
ssl_certificate /etc/ssl/certs/api.crt;
ssl_certificate_key /etc/ssl/private/api.key;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}此配置启用 HTTPS,监听 443 端口并使用指定的证书文件。请求同样被代理到后端 8080 端口。预期行为是:浏览器访问 https://api.example.com 时建立安全连接,请求内容加密传输至后端。若证书无效或域名不匹配,客户端将收到 SSL 警告。
当 server_name 匹配多个域名时会发生什么
如果 server_name 配置了多个域名(如 server_name api.example.com www.api.example.com;),Nginx 会将所有匹配域名的请求路由到同一个 server 块。这意味着这些域名共享相同的后端处理和配置。若需对不同子域名实施不同策略,应拆分多个 server 块。此外,通配符(如 *.example.com)也可用于匹配多级子域名,但需注意优先级规则:精确匹配优先于通配符,通配符优先于通用匹配(如 _)。


















