fastcgi, try_files, problems

Maxim Dounin mdounin at mdounin.ru
Thu Jul 16 16:41:59 MSD 2009


Hello!

On Thu, Jul 16, 2009 at 02:06:34PM +0200, Tomasz Pajor wrote:

> Hello all,
>
> I have a problem with proper configuration of my page.
>
> What I want to achieve is that:
> - http://domain.com/ should point to an upstream bucket of fastcgi apps.
> - http://domain.com/administrator should be served by a fastcgi server  
> on the same machine as balancer, so it should point to 127.0.0.1:3000 in  
> this case
> - i think there is a way to simplify the two backend.php entries
> - all /js/ entries for domain.com should be served staticly
> - static.domain.com should be served staticly
>
> Don't know what am I doing wrong, but the debug says that when i go to  
> http://domain.com/administrator it uses the location /administrator but  
> then it's redirected to /index.php and it uses location /, so not as I  
> intended.
>
> Can You guys help me sort this out?
>
> Configuration is as follows:
>
> upstream apps {
>    server 10.0.1.50:3000;
> }
>
> server {
>    listen 80;
>    server_name domain.com;
>    error_log /var/log/nginx/domain-error.log debug;
>
>    location / {
>        root /disk0/vhosts/domain/public;
>        try_files $uri $uri /index.php;

See no reasons to test $uri twice.

>        fastcgi_pass apps;
>        #fastcgi_index index.php;
>        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
>        include fastcgi_params;
>    }
>
>    location /administrator {
>        root /disk0/vhosts/domain/public;
>        try_files $uri $uri index.php;

You fallback to 'index.php' which is wrong as far as I see (it 
produces redirect to 'index.php' in case of no file found - it's 
simply invalid since has no leading '/').  Probably you mean to 
use 

         try_files $uri /administrator/index.php;

instead, and probably it's a good idea to specify separate 
location for /administrator/index.php to avoid internal 
redirection loop in case there will be no /administrator/index.php 
file.

>        fastcgi_pass 127.0.0.1:3000;
>        #fastcgi_index index.php;
>        #fastcgi_param SCRIPT_FILENAME   
> /disk0/vhosts/domain/public/index.php;
>        fastcgi_param SCRIPT_FILENAME  
> /disk0/vhosts/domain/public/$fastcgi_script_name;
>        include fastcgi_params;
>    }
>
>    location /js/lib/xinha/plugins/ExtendedFileManager/backend.php {
>        fastcgi_pass 127.0.0.1:3000;
>        fastcgi_index backend.php;
>        fastcgi_param SCRIPT_FILENAME   
> /disk0/vhosts/domain/public/js/lib/xinha/plugins/ExtendedFileManager/backend.php;
>        include fastcgi_params;
>        access_log /var/log/nginx/backend1.log;
>    }
>
>    location /js/lib/xinha/plugins/ImageManager/backend.php {
>        fastcgi_pass 127.0.0.1:3000;
>        fastcgi_index backend.php;
>        fastcgi_param SCRIPT_FILENAME   
> /disk0/vhosts/domain/public/js/lib/xinha/plugins/ImageManager/backend.php;
>        include fastcgi_params;
>        access_log /var/log/nginx/backend2.log;
>    }
>
>    location ~ ^/(js)/  {

Any reasons to use regex here?  It should be enough to use normal 

     location /js/ {

unless you want to render the above '/js/.../backend.php' locations 
useless.

Maxim Dounin

>        root /disk0/vhosts/domain/public;
>        expires 30d;
>        access_log /var/log/nginx/js.log;
>    }
> }
>
> server {
>    listen 80;
>    server_name static.domain.com;
>
>    location / {
>        root /disk0/vhosts/domain/static;
>        access_log off;
>        expires 30d;
>    }
> }
>
> server {
>    listen 80;
>    server_name .domain2.com;
>
>    location / {
>        fastcgi_pass 127.0.0.1:3000;
>        fastcgi_index index.php;
>        fastcgi_param SCRIPT_FILENAME   
> /disk0/vhosts/domain2/public/index.php;
>        include       fastcgi_params;
>    }
> }
>





More information about the nginx mailing list