如何配置nginx自动重定向到主主机名?

如何配置nginx自动重定向到主主机名?,nginx,http-redirect,Nginx,Http Redirect,每个nginx配置都可以用于各种域,但我想自动将请求重定向到第一个域名(正式域名) 我希望如果有人进入b.example.com/some,直接进入a.example.com/some,这与我们的好例子差不多。也就是说,您应该使用两台服务器: server { server_name b.example.com; return 301 $scheme://a.example.com$request_uri; # For pre-0.8.42 installations: # r

每个nginx配置都可以用于各种域,但我想自动将请求重定向到第一个域名(正式域名)


我希望如果有人进入
b.example.com/some
,直接进入
a.example.com/some

,这与我们的好例子差不多。也就是说,您应该使用两台服务器:

server {
  server_name b.example.com;
  return 301 $scheme://a.example.com$request_uri;

  # For pre-0.8.42 installations:
  # rewrite ^ $scheme://a.example.com$request_uri? permanent;
}

server {
  server_name a.example.com;
  # Do stuff
}

要在单个服务器块中执行此操作,可以使用if和:

或者,要保留任何查询参数:

    server_name primary.tld secondary.tld;
    if ($host != $server_name) {
        rewrite ^/(.*) $scheme://$server_name/$1 permanent;
    }
这里,指的是主服务器名称,它是
server\u name
指令中的第一个名称,而指的是HTTP请求中给出的主机名

请注意,nginx配置中的
if
语句并不总是能达到预期效果,有些人不鼓励使用它。另见


这个答案的灵感来自于它使用了一个类似的aproach。

组合版本的@kolbyjack和@Matthijs answers,并带有一个
服务器
块。此配置将重定向所有头与example.com不同的
Host
请求,并仅处理example.com请求

server {
    server_name example.com a.example.com b.example.com;

    if ($host != $server_name) {
        return 301 $scheme://$server_name$request_uri;
    }

    # processing requests to $server_name (example.com) only
    ...
}

server\u name*.example.com
将捕获任何子域,包括
www
porno
™ 和
无论什么
,如果有人想要将任何内容重定向到主域。对于http->https重定向,您可以通过使用
server\u name.example.com
包含任何内容-它将同时重定向example.com和*.example.com。@当使用
.example.com
时,DmitryVerhoturov有什么好方法可以指示
www.
等变体应重定向到
example.com
?如果不使用性能降低的“如果”条件?@PKHunter,
.example.com
是覆盖
*.example.com
的最佳方法。但是如果使用ssl,并且两个站点都具有相同的证书,会发生什么情况?这肯定会打破SNI?
    server_name primary.tld secondary.tld;
    if ($host != $server_name) {
        rewrite ^/(.*) $scheme://$server_name/$1 permanent;
    }
server {
    server_name example.com a.example.com b.example.com;

    if ($host != $server_name) {
        return 301 $scheme://$server_name$request_uri;
    }

    # processing requests to $server_name (example.com) only
    ...
}