error_page and named locations

Igor Sysoev is at
Thu Dec 11 22:55:36 MSK 2008

On Thu, Dec 11, 2008 at 10:51:59AM -0800, mike wrote:

>  Thu, Dec 11, 2008 at 4:31 AM, Igor Sysoev <is at> wrote:
> >      location / {
> >          file_match  $uri  @drupal;
> >          # the same as
> >          #    error_page  404 = @drupal; log_not_found off;
> >      }
> This is a very common example - almost anything with "nice names" will
> pass the non-existent file requests to a single file handler. That's
> how we're designing our own application too (and how I design mine
> nowadays)
> Is there a reason that a new parameter would need to be invented? Why
> is error_page not capable of this? (Note that I was using error_page
> in my 0.7.21 or so and the POST data was not coming through to my
> PHP/fastcgi scripts, which I thought was fixed a long while back) so
> I've been using if (-f $request_filename) for the time being (I don't
> want to test for dirs, only exact filenames, otherwise index files get
> factored in and I don't want those to be used actually, and I can't
> rename them right now)

I will look your POST/body issue.

> If this new parameter is affecting only fastcgi-based requests I would
> request it be prefixed with fastcgi_ at least for consistency (maybe
> fastcgi_fallback_pass or something?). If it is general purpose,
> file_try_match maybe. This is hard :)

No, the new directive is general purpose.

The most demonstrably usage is mongrel configuration, where you need
to test several static files existence:

      location / {
          use_file  $uri  $uri/index.html  $uri.html  @mongrel;

      location @mongrel {

Second usage is testing a script existence before passing it to backend:

      location ~ \.php$ {
          use_file  $uri  @drupal;

          fastcgi_pass   ...
          fastcgi_param  SCRIPT_FILENAME /path/to$script_filename;

And finally, it can be used as simple replacement of

      location / {
          error_page  404 = @drupal; log_not_found off;


      location / {
          use_file  $uri  @drupal;

although I have no plan to drop "error_page" support.
The last "use_file" usage is just syntax sugar.

As to names, now I have three variants: use_file, test_file, try_file.

Igor Sysoev

More information about the nginx mailing list