如何通过Nginx实现域名跳转?将a.com及*.a.com转发至对应b.com域名
解决Nginx下a.com域名跳转至b.com的配置方案
嗨,我来帮你搞定这个域名跳转的需求!你需要把所有来自a.com和*.a.com的请求,无缝转发到对应的b.com和*.b.com(而且只有b.com配置了SSL证书),下面是具体的配置方案:
核心思路
我们需要通过Nginx的变量替换来实现域名的映射,同时确保跳转后的链接是HTTPS协议(因为b.com配置了SSL)。推荐用map指令来处理域名替换,比直接写正则更清晰易维护。
完整配置示例
# 先定义域名映射规则:把a系列域名替换成b系列 map $host $target_host { ~^(.*)\.a\.com$ $1.b.com; # 匹配子域名,比如 blog.a.com → blog.b.com a.com b.com; # 匹配主域名,a.com → b.com } # 处理HTTP请求(80端口) server { listen 80; server_name a.com *.a.com; # 301永久重定向到对应的HTTPS地址 return 301 https://$target_host$request_uri; } # 可选:处理HTTPS请求(443端口) # 注意:因为a.com没有SSL证书,用户访问时会先看到证书警告,但接受后仍会完成跳转 server { listen 443 ssl; server_name a.com *.a.com; # 这里可以用自签证书或者任意证书(只是为了让Nginx能启动443监听) ssl_certificate /path/to/your/fake-cert.crt; ssl_certificate_key /path/to/your/fake-cert.key; return 301 https://$target_host$request_uri; }
配置说明
map块:专门用来做域名的正则匹配和替换,把所有*.a.com子域名映射到*.b.com,主域名a.com直接映射到b.com。- 80端口的server块:捕获所有a系列域名的HTTP请求,通过301重定向到HTTPS的b系列域名,保留原请求路径
$request_uri。 - 443端口的server块:处理可能的HTTPS请求(虽然用户访问会有证书错误,但如果用户选择继续访问,仍然会跳转到正确的b.com地址)。
这样配置后,不管是访问http://a.com/hello还是http://docs.a.com/article/123,都会自动跳转到https://b.com/hello和https://docs.b.com/article/123,完全符合你的需求!
内容的提问来源于stack exchange,提问作者injoker1
相关产品推荐
相关产品推荐

