nginx 子域名重写

nginx 子域名重写

又一个 nginx 重写规则问题

http://www.*.domain.com我怎样才能从到重写http://*.domain.com

提前致谢

-- 黛布

编辑:

很抱歉,我没有看到 Textile 格式已将问题中的 * 删除。我现在修复了它。我需要做的是从 www.joe.domain.com 转到 joe.domain.com,其中 joe 可以是任何单词。

答案1

domain.com 前面的额外句号有什么意义?目的是从 URL 中删除 www 吗?如果是这样,那么下面这个应该可以解决问题:

if ($host ~* www\.(.*)) {
  set $host_without_www $1;
  rewrite ^(.*)$ http://$host_without_www$1 permanent; # $1 contains '/foo', not 'www.mydomain.com/foo'
}

别忘了:sudo /etc/init.d/nginx restart加载它

来源:NGINX 维基百科

答案2

这真是太黑客了。

性能方面最快的方法是

server {
  server_name www.domain.com;
  rewrite ^ http://domain.com$request_uri permanent;
}

您保存了一个正则表达式匹配以及两个捕获,另外您还可以利用 nginx 使用哈希表来查找匹配的服务器块。

此外,您不需要重新启动 nginx - 只需重新加载即可,谁会希望有比所需更多的停机时间?

答案3

您可以使用正则表达式服务器名称(请参阅http://nginx.org/en/docs/http/server_names.html#regex_names):

server {
  listen 80;
  listen 443;
  server_name ~^www\.(\w+)\.domain\.com$
  location / {
    rewrite ^ $scheme://$1.domain.com$request_uri permanent;
  }
}

答案4

Martin F 的解决方案很好,但您拥有数百个域名时就不行了。不过,我建议采用另一种方法 - 在 www.joe.domain.com 上提供应用程序,然后从 joe.domain.com 重定向。我确信这是在 RFC 中。

相关内容