nginx重写子子域到子域

时间:2015-03-04 02:33:53

标签: nginx rewrite

我们有一个应用程序,我们为每个客户的安装使用子域。所以我们有customer1.ourapp.com,customer2.ourapp.com,customer3.ourapp.com等。

由于安全性,我们希望将所有http重定向到https,因为我们有一个通配符SSL证书。 此外,一些客户并不精通技术并在其域名中添加www,因此您可以获得以下内容:http://www.customer1.ourapp.comhttps://www.customer1.ourapp.com。在这些情况下,由于子子域,SSL证书无效。

我正在尝试为nginx编写vhost配置,以便在这两种情况下进行正确的重定向。我得到http到https重定向工作:

server {
    listen      80;
    server_name *.ourapp.com;

     #Rewrite all nonssl requests to ssl.
     return 301 https://$host$request_uri$is_args$args;
}

正确使用网址:

server {
    listen      443;
    server_name *.ourapp.com;

     #Rest of config
}

尝试子域名,但它不匹配:

server {
        server_name "~^(.*)\.(.*)\.ourapp\.com$";
        return 301 https://$2.ourapp.com$request_uri;
}

知道如何让这个工作吗?

1 个答案:

答案 0 :(得分:1)

Wildcarded服务器优先于regexp'ed,并匹配'www ...'。 您可以对两种情况使用一个定义:

server_name ~ ^(?:.*\.)?(.*)\.ourapp\.com$;
return 301 https://$1.ourapp.com$request_uri;