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