if ,-f and variables
Igor Sysoev
is at rambler-co.ru
Wed Feb 27 22:34:10 MSK 2008
On Wed, Feb 27, 2008 at 12:34:08PM -0500, Sean Allen wrote:
> On Feb 27, 2008, at 11:42 AM, Roxis wrote:
>
> >On Wednesday 27 February 2008, Sean Allen wrote:
> >>this works:
> >>
> >>if ( -f /ah/sites/colon365.co.uk/public/.maintenance )
> >>{
> >> set $maintenance 1;
> >>}
> >>
> >>this doesn't:
> >>
> >>if ( -f $document_root/.maintenance )
> >>{
> >> set $maintenance 1;
> >>}
> >>
> >>two questions,
> >>
> >>1. is there a way to make the latter work? some slight change or
> >>tweak?
> >>2. why doesn't it work? are variables not interpolated when doing
> >>file
> >>system checks like -f?
> >
> >it should work.
> >probably you have wrong root or root in wrong place.
> >plz provide full config
> >
>
> One thing i just noticed. root is defined until after that snippet
> above.
> is that an issue?
>
>
> Config is spread across multiple files.
>
> Here is the best bits:
>
> /ah/sites/colon365.co.uk/conf/nginx.conf:
>
> server
> {
> listen 208.113.69.210;
> server_name colon365.co.uk;
> server_name www.colon365.co.uk;
>
> include /ah/sites/colon365.co.uk/conf/nginx/base;
> include /ah/sites/colon365.co.uk/conf/nginx/maintenance;
> include /ah/sites/colon365.co.uk/conf/nginx/fake-homepage;
>
> access_log /var/log/ah/colon365.co.uk.log combined;
> include /ah/conf/nginx/www-shared;
> }
>
>
> --
>
> /ah/sites/colon365.co.uk/conf/nginx/base:
>
> set $base /ah/sites/colon365.co.uk;
>
> --
>
> /ah/conf/nginx/www-shared:
>
> include /ah/conf/nginx/root;
> include /ah/conf/nginx/favicon;
> include /ah/conf/nginx/standard-expire;
> include /ah/conf/nginx/unsub-aliases;
> include /ah/conf/nginx/hackersafe;
> include /ah/conf/nginx/historical;
> location /
> {
> if ( !-e $request_filename )
> {
> expires -1;
> proxy_pass http://mod_perl;
> break;
> }
> }
>
>
> --
>
> /ah/conf/nginx/root:
>
> set $root $base/public;
> root $root;
The "root" directive may be set in eny place of http, server, or locacation:
it will be properly set or inherited:
http {
server {
location / {
# here root is /path
}
}
root /path;
}
But this is not true for "set" directives: they are executed in order
of thier apperance.
include /ah/sites/colon365.co.uk/conf/nginx/base;
set $base /ah/sites/colon365.co.uk;
include /ah/sites/colon365.co.uk/conf/nginx/maintenance;
using $document_root, here it is "root ''",
because $root is still undefined
include /ah/conf/nginx/www-shared;
include /ah/conf/nginx/root;
set $root $base/public;
root $root;
You should to set "set $root $base/public;" early.
--
Igor Sysoev
http://sysoev.ru/en/
More information about the nginx
mailing list