Possible bug in "root" declaration?

Igor Sysoev is at rambler-co.ru
Thu May 28 18:52:23 MSD 2009


On Thu, May 28, 2009 at 03:42:19PM +0100, Systems Maintenance wrote:

> Igor Sysoev wrote:
> >On Thu, May 28, 2009 at 02:51:11PM +0100, Systems Maintenance wrote:
> >  
> >>Below is part of a server block for a particular vhost:
> >>
> >>server {
> >>   server_name mysite.tld ~^.+\.mysite\.tld$;
> >>
> >>   set $base /var/www/mysite;
> >>
> >>   if ( $host ~* "^(x|y|z)\.mysite\.tld$" ){
> >>      set $files misc;
> >>   }
> >>
> >>   if ( $host ~* "^(admin)\.mysite\.tld$" ){
> >>      set $files admin;
> >>   }
> >>
> >>   if ( $host = "mysite.tld" ){
> >>      set $files home;
> >>   }
> >>    
> >
> >This is not effective way. It's better to use map:
> >
> >map $host  $files {
> >     default           home;
> >     mysite.tld        home;
> >     admin.mysite.tld  admin;
> >     x.mysite.tld      misc;
> >     y.mysite.tld      misc;
> >     z.mysite.tld      misc;
> >}
> >  
> We're also capturing "wildcard" subdomains in the vhost with:
> 
> if ( $host ~* "^([a-zA-Z]+[a-zA-Z0-9]*)\.mysite\.tld$" ){
>    set $files custom;
> }
> 
> so if someone hits "a8df15f.mysite.tld" they get a custom homepage, but 
> "18sdf351f.mysite.tld" is invalid and therefore they get the "home 
> page". Can this also be reproduced with the "map" directive?

No, only "*.mysite.tld".

> >>   root $base/$files/www;
> >>   error_page 404 $base/errors/404.html;
> >>
> >>   location / {
> >>      try_files $uri @webapp;
> >>   }
> >>
> >>   location @webapp {
> >>      rewrite ^/([\w\d]+)/([\w\d]+)(.*)? /index.php/$1/$2?_params=$3 last;
> >>   }
> >>
> >>   location ~ \.php($|/) {
> >>       set $script $uri;
> >>       set $path_info "";
> >>
> >>       if ($uri ~ "^(.+\.php)(/.+)") {
> >>           set $script $1;
> >>           set $path_info $2;
> >>       }
> >>
> >>       fastcgi_pass unix:/tmp/php-socket;
> >>       include conf/fastcgi_params;
> >>       fastcgi_intercept_errors on;
> >>       fastcgi_param SCRIPT_FILENAME $base/$interface$script;
> >>       fastcgi_param PATH_INFO $path_info;
> >>       fastcgi_index index.php;
> >>   }
> >>
> >>}
> >>
> >>What I'm seeing in my error log is that the error_page its trying to 
> >>return is: /var/www/mysite/var/www/mysite/errors/404.html instead of the 
> >>expected /var/www/mysite/errors/404.html
> >>    
> >
> >error_page uses URI, but not file:
> >
> >    error_page 404 /errors/404.html;
> >
> >    location = /error/404.html {
> >        set /var/www/mysite;
> >    }
> >  
> Thanks, I'll try this.
> >>--without-mail_pop3_module 
> >>--without-mail_imap_module --without-mail_smtp_module 
> >mail modules are not built by default.
> >  
> This isn't mentioned in "./configure --help":
> 
>  --with-mail                        enable POP3/IMAP4/SMTP proxy module
>  --with-mail_ssl_module             enable ngx_mail_ssl_module
>  --without-mail_pop3_module         disable ngx_mail_pop3_module
>  --without-mail_imap_module         disable ngx_mail_imap_module
>  --without-mail_smtp_module         disable ngx_mail_smtp_module

If there is --with-mail and there is no --without-mail, then this should
mean that mail modules are not built by default.


-- 
Igor Sysoev
http://sysoev.ru/en/





More information about the nginx mailing list