>> It works if I specify the full path for the alias. What is the
>> difference between alias and root? I have root specified outside of
>> the server block and I thought I could use alias to avoid specifying
>> the full path again.
>>http://nginx.org/en/docs/http/ngx_http_core_module.html#alias>http://nginx.org/en/docs/http/ngx_http_core_module.html#root>> The docs says that the requested filepath is constructed by concatenating
> root + URI
> That's for root.
>> The docs also say that alias replaces the content directory (so it must be
> absolutely defined through alias).
> By default, the last part of the URI (after the last slash, so the file
> name) is searched into the directory specified by alias.
> alias doesn't construct itself based on root, it's totally independent, so
> by using that, you'll need to specify the directory absolutely, which is
> precisely what you wish to avoid.
I see. It seems like root and alias function identically within "location /".
>> I tried both of the following with the same result:
>>>> location / {
>> alias webalizer/;
>> }
>>>> location ~ ^/$ {
>> alias webalizer/$1;
>> }
>>> For
>> what you wish to do, you might try the following:
>> set $rootDir /var/www/localhost/htdocs
> root $rootDir/;
> location / {
> alias $rootDir/webalizer/;
> }
>> alias is meant for exceptional overload of root in a location block, so I
> guess its use here is a good idea.
I'm not sure what you mean by that last sentence. When should alias
be used instead of root inside of "location /"?
> However, there seems to be no environmental propagation of some $root
> variable (which may be wanted by developers to avoid confusion and unwanted
> concatenation of values in the variables tree).
> $document_root and $realpath_root must be computed last, based on the value
> of the 'root' directive (or its 'alias' overload), so they can't be used
> indeed.
>> I'd be glad to know the real reasons of the developers behind the absence of
> environmental propagation of some $root variable.
Me too.
- Grant