Alias which works like in other web servers

Maxim Dounin mdounin at mdounin.ru
Sun Aug 5 05:55:39 MSD 2007


Hello!

On Sat, 4 Aug 2007, marc at corky.net wrote:

> I already had this working like this.   But unfortunately every single 
> request, for any file (jpg, swf...etc) gets passed to fastcgi, too...

The root of your problems is that nginx has no such thing as
extension-based handlers. Only one location{} configuration matches any
particular request, and everything needed to process the request must be
specified in this location (or at higher level).

If you wish to serve *.php through fastcgi backend and static content with 
same url prefix directly from nginx, you should write two locations for 
each such url prefix - one for static content, and one for *.php. 
Something like this:

location /blog/wp-admin/ {
 	alias /var/www/wordpress/wp-admin/;
 	auth_basic ...
}
location ~ ^/blog/wp-admin/.*\.php$ {
 	alias /var/www/wordpress/wp-admin/;
 	auth_basic ...

 	fastcgi_pass ...
 	...
}

NOTE1: Not really checked, test before using. You probably will need some 
more tweaks to catch .../ -> .../index.php mapping.

NOTE2: Regex locations are tested in order, so please make sure you 
specified "location ~ ^/blog/wp-admin/.*\.php$" before "location ~ 
^/blog/.*\.php$" (and of course before "location ~ \.php$").

NOTE3: This is not performance-optimal solution, since all regex locations 
will be checked for all non-matching requests (but better than passing 
them to backends, of course). To achive maximum performance you should 
separate static and dynamic content (to eliminate regex locations 
completely).

To simplify things with multiple such locations you may use "include" 
directive (e.g. with fastcgi_* params).

Maxim Dounin

>
>
>
> Igor Sysoev wrote:
>> On Sat, Aug 04, 2007 at 10:21:11AM +0100, marc at corky.net wrote:
>>
>> 
>>> I need / to point to /var/www/site,  /blog to /var/www/wordpress, /nagios 
>>> to /var/www/nagios, /munin to /var/www/munin   the /munin, /nagios and 
>>> /blog/wp-admin dirs should be password protected using auth.
>>> 
>>> All dirs except /munin and /nagios have PHP scripts in them that need to 
>>> be run.
>>> 
>>
>>    location / {
>>        root   /var/www/site;
>>
>>        fastcgi_pass    ...
>>        fastcgi_index   index.php;
>>        fastcgi_param   SCRIPT_NAME      $document_root$fastcgi_script_name;
>>        ...
>>    }
>>
>>    location /blog/ {
>>        alias   /var/www/wordpress/;
>>
>>        fastcgi_pass    ...
>>        fastcgi_param   SCRIPT_NAME      $request_filename;
>>        ...
>>    }
>>
>>    location /blog/wp-admin/ {
>>        alias   /var/www/wordpress/wp-admin/;
>>
>>        auth_basic "adm";        auth_basic_user_file conf/nginx.user;
>>
>>        fastcgi_pass    ...
>>        fastcgi_param   SCRIPT_NAME      $request_filename;
>>        ...
>>    }
>>
>>    location /nagios/ {
>>        root   /var/www;
>>
>>        auth_basic "adm";        auth_basic_user_file conf/nginx.user;
>>    }
>>
>>    location /munin/ {
>>        root   /var/www;
>>
>>        auth_basic "adm";        auth_basic_user_file conf/nginx.user;
>>    }
>> 
>>
>> 
>
>
>





More information about the nginx mailing list