如何配置Nginx实现特定子域名与路径的重定向需求?
可以通过Nginx配置实现你的需求
完全可以实现,核心是拆分独立的server块来分别处理不同域名的规则,避免同一块内规则冲突。以下是调整后的完整配置:
# 处理HTTP跳转HTTPS的server块(80端口) server { listen 80 default_server; listen [::]:80 default_server; server_name example.com www.example.com task-manager.example.com; # example.com和www.example.com HTTP跳转HTTPS根路径 if ($host ~* ^(www\.)?example\.com$) { return 301 https://$host/; } # task-manager.example.com HTTP直接跳转HTTPS的/api/路径 if ($host = task-manager.example.com) { return 301 https://$host/api/; } return 404; # 兜底规则 } # 处理example.com和www.example.com的HTTPS请求 server { server_name example.com www.example.com; # 保留Certbot的SSL配置(比如listen 443 ssl; ssl_certificate等) # some Certbot SSL configuration ... # 根路径代理到前端应用 location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://localhost:9091; } # 访问/api/时重定向到对应域名的根路径 location /api/ { return 301 https://$host/; } } # 处理task-manager.example.com的HTTPS请求 server { server_name task-manager.example.com; # 保留Certbot的SSL配置 # some Certbot SSL configuration ... # 精确匹配根路径访问,自动重定向到/api/ location = / { return 301 https://$host/api/; } # /api/路径代理到后端应用 location /api/ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://localhost:9090; } # 其他非/api路径默认跳转到/api/(可选,覆盖用户输入的非常规路径) location / { return 301 https://$host/api/; } }
关键规则说明:
- 拆分server块:把三个域名拆成两组独立的HTTPS server块,确保不同域名的规则互不干扰,这是Nginx配置的最佳实践之一。
- task-manager子域名跳转:用
location = /精确匹配根路径访问,直接重定向到/api/,同时HTTP请求也一步跳转到HTTPS的目标路径,避免多次跳转。 - 主域名/api路径拦截:单独在主域名的server块里配置
/api/规则,访问该路径时直接重定向到根路径,不再代理到后端服务。 - 保留Certbot配置:所有SSL相关配置(监听端口、证书路径等)都保留在对应HTTPS server块中,不影响证书自动续期。
验证效果:
- 访问
http://task-manager.example.com或https://task-manager.example.com,自动跳转到https://task-manager.example.com/api/ - 访问
https://example.com/api或https://www.example.com/api,自动跳转到对应域名的根路径 - 主域名根路径正常代理到前端应用,task-manager的/api路径正常代理到后端应用
内容的提问来源于stack exchange,提问作者Fahri Can
相关产品推荐
相关产品推荐

