Problems with fastcgi php migration

Igor Sysoev is at rambler-co.ru
Mon Mar 10 12:23:03 MSK 2008


On Sun, Mar 09, 2008 at 10:16:14AM +0100, Carlos wrote:

> I'm using CodeIgniter (a PHP framework) with "pretty URLs" which comes
> close to what you want to achieve. This is what my server section
> looks like:
> 
> server {
> ...
>                 include conf/php-fcgi.conf;
> 
>                 location / {
>                         index           index.php index.html;
>                         if (-f $request_filename) {
>                                 break;
>                         }
>                         if (!-f $request_filename) {
>                                 rewrite ^/(.*)$ /index.php/$1 last;
>                         }
>                 }

NO. NO. NO. Do not use if/rewrite unless you really need it.

       location / {
           index            index.php index.html;
           error_page  404  = /index.php$uri;
           log_not_found    off;
       }

> ...
> }
> 
> and php-fcgi.conf:
> 
>         location ~ .*\.php.*$ {
>                 fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
>                 fastcgi_param  SERVER_SOFTWARE    nginx;
>                 fastcgi_param  QUERY_STRING       $query_string;
>                 fastcgi_param  REQUEST_METHOD     $request_method;
>                 fastcgi_param  CONTENT_TYPE       $content_type;
>                 fastcgi_param  CONTENT_LENGTH     $content_length;
>                 fastcgi_param  SCRIPT_FILENAME
> $document_root$fastcgi_script_name;
>                 fastcgi_param  PATH_TRANSLATED
> $document_root$fastcgi_script_name;
>                 fastcgi_param  REQUEST_URI        $request_uri;
>                 fastcgi_param  DOCUMENT_URI       $document_uri;
>                 fastcgi_param  DOCUMENT_ROOT      $document_root;
>                 fastcgi_param  SERVER_PROTOCOL    $server_protocol;
>                 fastcgi_param  REMOTE_ADDR        $remote_addr;
>                 fastcgi_param  REMOTE_PORT        $remote_port;
>                 fastcgi_param  SERVER_ADDR        $server_addr;
>                 fastcgi_param  SERVER_PORT        $server_port;
>                 fastcgi_param  SERVER_NAME        $server_name;
>                 fastcgi_pass   127.0.0.1:9001;
>                 fastcgi_index  index.php;
>         }
> 
> This allows me to directly refer a php file in any location and get it
> executed by fastcgi, and at the same time any non-existing file (like
> /galleries/1/2/3 in your example) is matched by "if (!-f
> $request_filename)" and gets passed to fastcgi as
> "/index.php/galleries/1/2/3". Static content is handled directly by
> nginx. I think you could use a similar setup with several location
> entries that reference a different index.(shtml|php) in the second
> "if".
> 
> On Sun, Mar 9, 2008 at 8:58 AM, Ian M. Evans <ianevans at digitalhit.com> wrote:
> > Philip Ratzsch wrote:
> >  > [Caveat - in my limited experience, the rewrite engine in Nginx uses a very similar syntax to Apache's mod_rewrite module, so I'm hoping this is close enough that someone with more knowledge than I can correct any mistakes.  This does not take proxying into account, and simply serves as a logic example.
> >   > These are not the droids you're looking for.]
> >
> >  Killed myself on the droids bit...also daylight saving kicked in and 2AM
> >  just became 3AM, so more coffee.
> >
> >  If I get what you're saying, you're suggesting creating a new .php file
> >  that, rather than looking for a PATH_INFO that may or may not be mangled
> >  through the FCGI process instead gets translated into ?variable=whatever
> >  in a rewrite from the old extensionless URI. Visitor still sees
> >  /galleries/123 but nginx translates it into galleries.php?event=123
> >
> >  I wouldn't need numeric length specifics as they can be any lenght and
> >  can be there or not.
> >
> >  e.g. /galleries gives the user a main menu
> >  /galleries/[num] gives them an event (like a film festival)
> >  /galleries/[num]/[num] gives them a subevent listing (like a premiere
> >  photo listing at a film festival)
> >  and /galleries/[num]/[num]/[num] gives them a specific photo.
> >
> >  Fun and games. As I said people, regex is below a weakness for me so if
> >  there are any suggestions, I'm open.
> >
> >  At least the site is, and has been, fully functional in the Apache
> >  backend format...would love to go fully nginx soon though.
> >
> >
> 

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





More information about the nginx mailing list