Search code examples
phpmod-proxyapache2.4mod-autoindex

ProxyPassMatch and Options +Indexes (mod_autoindex)


I have a simple setup with Apache2.4 and PHP-FPM and I am trying to enable +Indexes option but I get 404 "File not found." when trying to access a folder that doesn't have an index file even when autoindex is enabled.

Here's part of my vhost:

#php
ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/var/run/fpm/fatal.sock|fcgi://

#super public directory with Indexes!
<Location /pub>
    Options +Indexes
    IndexOptions +FancyIndexing
</Location>

When I try to access http://domain.com/pub/ I expected to see a list of files I put there but instead I get error 404 Not Found.

I wonder where this comes from since ProxyPassMatch shouldn't forward the request because there is no .php in the query so next is directory index which looks for index.php which doesn't exists (404) but why then mod_autoindex doesn't work?

When I remove the ProxyPassMatch line the autoindex works just fine and I see the folder content listed. Any ideas?


Solution

  • I found the answer here http://blog.famillecollet.com/post/2014/03/28/PHP-FPM-and-HTTPD-2.4-improvement

    As the ProxyPassMatch directive is evaluated at the very beginning of each request:

    • AddType (for MultiView) or DirectoryIndex directives are not usable

    • right management per directory is not available

    • each Alias directive needs another proxy rule

    The SetHandler directive, evaluated later, is much more flexible / usable.

    So I changed my vhost to look like this and got rid of the ProxyPassMatch directive.

    <FilesMatch \.php$>
      SetHandler "proxy:unix:/var/run/fpm/fatal.sock|fcgi://"
    </FilesMatch>
    

    Note: this solution applies to Apache 2.4.9+

    (I do wonder if there are any performance difference and in what direction?)