Can fastcgi_index be used with multiple filenames?

Igor Sysoev is at rambler-co.ru
Sat Mar 8 23:26:31 MSK 2008


On Sat, Mar 08, 2008 at 05:01:58AM -0500, Ian M. Evans wrote:

> Igor Sysoev wrote:
> >If php root and static root are the same, then you can use following:
> >
> >    location / {
> >        index   index.shtml   index.php;
> >        # static
> >    }
> >
> >    location \.(php|shtml)$ {
> >        fastcgi_pass  ...
> >        # fastcgi_index is not needed here at all
> >    }
> 
> I guess I should never do config changes at 4:42 AM! Luckily, I can just 
> "cp oldconfig nginx.conf" and -HUP and the site's back and running while 
> I tweak some more.
> 
> Currently anything that's not a static file gets passed to an Apache 
> backend and run as a PHP file.
> 
> So index.php, index.shtml and even extensionless files are PHP files. 
> For example, /galleries/123/1 is a php file called galleries that works 
> with the /123/1 path info.
> 
> I'm moving to fastcgi so I can drop Apache. Right now my test config 
> file for fastcgi is doing fine serving the extensionless PHP files but 
> giving me "No input file specified on the .php and .shtml files. I added 
> your suggestions above but I must have broken something somewhere else. 
> Here's a snippet of my fastcgi config test:

Probably, you need

- location \.(php|shtml)$ {
+ location ~ \.(php|shtml)$ {

but the .php and .shtml files should be anyway handled by "location /".

> server {
> listen 80;
> root /usr/local/apache/htdocs;
> server_name www.example.com;
> index index.shtml index.php;
> error_page 404 /dhe404.shtml;
> 
> location /stub_status {
> stub_status on;
> access_log off;
> allow 127.0.0.1;
> deny all;
> }
> 
> location / {
> root /usr/local/apache/htdocs;
> index index.shtml index.php;
> include /usr/local/nginx/conf/fastcgi.conf;
> fastcgi_pass 127.0.0.1:10004;
> }
> 
> location \.(php|shtml)$ {
> include /usr/local/nginx/conf/fastcgi.conf;
> fastcgi_pass 127.0.0.1:10004;
> }
> 		
> location ~* 
> ^.+\.(jpg|jpeg|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|mov)$ 
> {
> root /usr/local/apache/htdocs;
> error_page 403 /dhe403.shtml;
> valid_referers none blocked *.example.com example.com ;
> if ($invalid_referer) {
> return 403;
> }
> }
> 
> location ~* ^.+\.(gif|js)$ {
> root /usr/local/apache/htdocs;
> }
> }
> 
> The included fastcgi.conf contains:
> #fastcgi.conf
> 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  SCRIPT_NAME        $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_param PATH_INFO       $fastcgi_script_name;
> # PHP only, required if PHP was built with --enable-force-cgi-redirect
> fastcgi_param  REDIRECT_STATUS    200;
> 
> As I said, the extensionless files are being run through fastcgi just 
> fine, so I'm assuming I just put something in the wrong order.

It's surprise for me that PHP sees

SCRIPT_FILENAME    /usr/local/apache/htdocs/galleries/123/1
SCRIPT_NAME        /galleries/123/1
PATH_INFO          /galleries/123/1

and understands that it needs to look script in /galleries, but not
in /galleries/123/1.


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





More information about the nginx mailing list