Назад | Перейти на главную страницу

Как запретить apache запускать PHP в заданном каталоге?

Я использую и нуждаюсь php_fpm7.0 на debian 9 (stretch) apache 2.4.25. DocumentRoot - это / var / www / html и работает хорошо. Php включен, скрипты выполняются и т. Д. Теперь я также хочу использовать ту же древовидность, что и файловую систему, через модуль apache dav_fs.

Сделать это :

  1. / var / www / webdav символическая ссылка на / var / www / html поэтому я могу назвать один и тот же каталог с двумя разными именами в файле конфигурации apache и поэтому создать 2 отдельные конфигурации на основе имени доступа
  2. Я получаю доступ к webdav с /webdav URL. Внутри конфигурации apache, /webdav это псевдоним, указывающий на / var / www / webdav. Теперь мне нужно только настроить <Directory /var/www/webdav> раздел и все должно быть хорошо.

Пока что это почти работает: я могу получать и помещать файлы, создавать каталоги, переименовывать файлы и т. Д. С помощью webdav, но файлы PHP продолжают выполняться, когда я ПОЛУЧАЮ их через псевдоним webdav. Поэтому, если я хочу отредактировать файл .php, я действительно получаю результат скрипта в моем редакторе, что бесполезно.

Моя настройка на данный момент:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory /var/www/html>
        AllowOverride All
        require all granted
        Options Indexes FollowSymLinks MultiViews
    </Directory>

    Alias /webdav /var/www/webdav
    <Directory /var/www/webdav>
        SetHandler none
        Options -ExecCGI -FollowSymLinks -Includes -Indexes -MultiViews
        AddType text/plain php php3 php4 php5 php7 php8 pht phptml phps
        AllowOverride None
        DAV On
        <ifmodule mod_dir.c>
            DirectoryIndex disabled
        </ifmodule>
        <ifmodule mod_rewrite.c>
            RewriteEngine Off
        </ifmodule>
        <Files ~ "^\.ht"> # need to be able to edit .htaccess files.
            require all granted
        </Files>
    </Directory>
</VirtualHost>

Как правильно предотвратить выполнение php в каталоге / var / www / webdav?

Правка и решение

Поскольку Debian использует SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost" /etc/apache2/conf-available/php7.0-fpm.conf, Я должен использовать SetHandler none. Но в <Directory> раздел, это слишком поздно. это должно быть использовано в <Location>, это интерпретируется достаточно рано. Я также включил ProxyPass ! как предлагает @exussum (следует поместить в <Location> ?). В данном случае это useles, но в любом случае прокси здесь, безусловно, нежелателен.

Также обратите внимание, что мне пришлось поместить аутентификацию / авторизацию в <Directory>. Это сработало в <Location>, но только клиент трупа CLI мог получить доступ к коллекции webdav. Когда аутентификация / авторизация находится в <Directory>, файловый менеджер nautilus может получить доступ к файлам.

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory /var/www/html>
        AllowOverride All
        require all granted
        Options Indexes FollowSymLinks MultiViews
    </Directory>

    Alias /webdav /var/www/webdav
    <Location /webdav>
        <IfModule mod_proxy.c>
            ProxyPass !
        </IfModule>
        SetHandler none
        AddType text/plain php php3 php4 php5 php7 php8 pht phptml phps
    </Location>
    <Directory /var/www/webdav>
        AuthName "Restricted Area"
        AuthType Basic
        AuthUserFile    "/etc/apache2/user-password"
        require valid-user
        Options -ExecCGI -FollowSymLinks -Includes -Indexes -MultiViews
        AllowOverride None
        DAV On
        <ifmodule mod_dir.c>
            DirectoryIndex disabled
        </ifmodule>
        <ifmodule mod_rewrite.c>
            RewriteEngine Off
        </ifmodule>
        <Files ~ "^\.ht"> # need to be able to edit .htaccess files.
            require all granted
        </Files>
    </Directory>
</VirtualHost>

как вы используете fpm, вам нужно отправить запрос в FPM в какой-то момент

Обычно это так

ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/path/to/socket.sock

или похожие. (видеть https://wiki.apache.org/httpd/PHP-FPM для других вариантов)

Вам нужно, чтобы файлы не попадали в этот блок, используя ваш каталог ProxyPass ! чтобы не дать им пройти мимо