Store part of subdomain in a variable to use as root

Martin Schut martin at wommm.nl
Fri Aug 7 19:06:10 MSD 2009


On Fri, 07 Aug 2009 06:01:08 +0200, martinc6 <nginx-forum at nginx.us> wrote:

> Martin Schut Wrote:
> -------------------------------------------------------
>> On Thu, 06 Aug 2009 21:54:56 +0200, martinc6
>> wrote:
>>
>> > martinc6 Wrote:
>> >
>> --------------------------------------------------
>> -----
>> >> Igor Sysoev Wrote:
>> >>
>> --------------------------------------------------
>>
>> >> -----
>> >> > On Thu, Aug 06, 2009 at 02:24:53AM -0400,
>> >> martinc6
>> >> > wrote:
>> >> >
>> >> > > I need to store part of a subdomain in a
>> >> > variable in order to use it as my root and I
>> >> can't
>> >> > seem to get it to work.
>> >> > >
>> >> > > The URLs would be formed like:
>> >> > martin_branch.dev.testsite.com
>> >> > >
>> >> > > And I need root to be
>> >> > /home/martin/martin_branch.dev.testsite.com
>> >> > >
>> >> > > The underscore ("_") and stuff afterwards
>> is
>> >> > optional. I'll also need
>> >> martin.dev.testsite.com
>> >> > to have its root as
>> >> > /home/martin/martin.dev.testsite.com.
>> >> > >
>> >> > > Note that the name ("martin") and home
>> folder
>> >> > will vary.
>> >> > >
>> >> > > This is what I've got so far:
>> >> > >
>> >> > > server {
>> >> > >         listen   80;
>> >> > >         server_name
>> >> > ~^(.+)_*\.dev\.testsite\.com$;
>> >> > >         set $myroot $1;
>> >> > >         root /home/$myroot/$host;
>> >> > >  }
>> >> > >
>> >> > > Thanks in advance!
>> >> >
>> >> > What is in error_log ?
>> >> > BTW, "_" is invalid character in domain
>> name.
>> >> >
>> >> > Also for this simple configuraiton you may
>> omit
>> >> > "set" since $1 is never
>> >> > overwritten:
>> >> >
>> >> >  server {
>> >> >          listen   80;
>> >> >          server_name
>> >> > ~^(.+)_*\.dev\.testsite\.com$;
>> >> >          root /home/$1/$host;
>> >> >  }
>> >> >
>> >> >
>> >> > --
>> >> > Igor Sysoev
>> >> > http://sysoev.ru/en/
>> >>
>> >> The reason for the set is that we have other
>> if
>> >> statements and rewrites but they shouldn't be
>> >> conflicting because they're the same as on
>> other
>> >> subdomains we use. I commented it all out just
>> in
>> >> case to test this.
>> >>
>> >> In there error logs I get
>> >> /home//martin.dev.testsite.com which means
>> that
>> >> $myhost is empty so the regex isn't returning
>> >> anything.
>> >>
>> >> We're changing our format to
>> >> branch.martin.dev.testsite.com to be more
>> valid.
>> >> I'm reworking the regex like so:
>> >> ^\.*(.+)\.dev\.testsite\.com.*$
>> >>
>> >> But it's not done yet clearly. In my regex
>> tester
>> >> that returns the name I want but nginx doesn't
>> >> seem to do it.
>> >
>> >
>> > The regex we're using is:
>> \.*([^.]+)[.]dev[.]testsite[.]com.*$
>> >
>> > But it doesn't seem to be returning anything to
>> the server. Still get a
>> > 404 and logs says it's looking for
>> /home//martin.dev.testsite.com
>> >
>> > Posted at Nginx Forum:
>> >
>> http://forum.nginx.org/read.php?2,4750,4758#msg-47
>> 58
>> >
>> >
>> >
>>
>> I think you need something like
>> ^[^.]*\.([^.]*)\.dev\.testsite\.com$ or
>> ^.*\.(.*)\.dev\.testsite\.com$
>>
>> Best regards,
>>
>> Martin
>>
>> --
>> Using Opera's revolutionary e-mail client:
>> http://www.opera.com/mail/
>
>
> That only seems to grab 'martin" if the url is  
> branch.martin.dev.testsite.com but I also need it to grab "martin" if  
> the url is just martin.dev.testsite.com
>
> Posted at Nginx Forum:  
> http://forum.nginx.org/read.php?2,4750,4768#msg-4768
>
>
>

That is the correct behaviour to match:

branch.martin.dev.testsite.com
branch_martin.dev.testsite.com
martin.dev.testsite.com

you need something like ^(.*[_.])?(.*)\.dev\.testsite\.com$

please note 'martin' is matched into $2 in stead of $1.

Best regards,

Martin





More information about the nginx mailing list