nginx子域重写


8

另一个Nginx重写规则问题

我怎样才能做一个重写的http://www.*.domain.comhttp://*.domain.com

提前致谢

-黛比

编辑:

对不起,我没有看到纺织品格式从我的问题中删除了*。我现在修复了。我需要做的是从www.joe.domain.com转到joe.domain.com,其中joe可以是任何单词。

Answers:


7

domain.com之前的额外期限有何意义?目标是从网址中删除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 Wiki


对不起,我没有看到纺织品格式从我的问题中删除了*。我需要做的是从www.joe.domain.com转到joe.domain.com,其中joe可以是任何单词。这样您是对的,我只需要删除www。
DEB

12

相当多的技巧。

性能明智的最快方法是

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

您可以保存一个正则表达式匹配项以及两个捕获,还可以使用哈希表来查找匹配的服务器块,从而获得nginx的优势。

另外,您不需要重新启动nginx-只需重新加载,谁会想要比所需时间更长的停机时间?


+1很有道理...干杯
iainlbc 2010年

1
这不是黑客。Nginx通过服务器名称进行非常快速的查找,因此这确实是最快的方法。
亚历山大·阿扎罗夫

1
@Alaz这是对iainlbc提供的答案的回应,我的意思是if条件是黑客入侵,而不是我建议的服务器查找。
马丁·峡湾


1

在您拥有数百个领域之前,Martin F的解决方案很好。但是,我建议您采用其他方式-在www.joe.domain.com上提供该应用程序,然后从joe.domain.com重定向。相当确定这是在RFC中。


如果您有nginx处理那么多域,请编写脚本以生成配置。这是一种相当简单的配置语言,您真的不想在高流量服务器上的每个页面加载上进行正则表达式解析。
马丁·峡湾

原则上来说,也许吧,但是您对此进行了介绍吗?我有一些使用正则表达式的高负载站点来处理所有请求。小心点 此外,许多共享主机环境没有严重的性能问题,但确实有管理开销问题。两种解决方案都可以在不同的参数中很好地工作。
贾斯汀·艾伦·瑞安

如果您有数百个域,请在server_name中使用正则表达式:stackoverflow.com/questions/2498712/nginx-subdomain-rewrite
Alexander Azarov,2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.