server_name capture and $document_root

Igor Sysoev is at rambler-co.ru
Mon Mar 16 16:41:41 MSK 2009


On Mon, Mar 16, 2009 at 02:35:06PM +0100, Rapsey wrote:

> I'm trying to use the new feature from 0.7.40 - captures in server_name.
> I use $document_root in SCRIPT_FILENAME for fastcgi. The problem is that the
> captured part of server_name is not being used. If I check my access log, it
> will say this:
> 404 .... /var/www/htdocs//index.php
> 
> For a regular index.php, the path will be correct and the captured part will
> be in it:
> 200 .... /var/www/htdocs/domain/index.html
> 
> This is the gist of my config:
> 
> server {
>   listen 80;
>   server_name   ~^(www\.)?(.+)\.(.+)$;
>   root /var/www/htdocs/$2;
> 
>   log_format  main  '$status "$request" $body_bytes_sent $remote_addr
> $document_root$fastcgi_script_name';
>   ....
> 
>    location ~ .php$ {
>       fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
>       ... # normal fastcgi params
>     }
>   }
> }
> 
> Is this a bug or an incorrect config on my part?

The "root /var/www/htdocs/$2" is evaluated in "location ~ .php$" context,
therefore, the ".php$" regex clears $2. The woraround is:

server {

   server_name    ~^(www\.)?(.+)\.(.+)$;
   set   $domain  $2;
   root /var/www/htdocs/$domain;

BTW, you better to use 0.7.42, as there are bugfixes in captures.


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





More information about the nginx mailing list