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

Apache 2.4 отвечает «403 Forbidden» на сценарий CGI, моя конфигурация выглядит нормально

Я установил сценарий CGI на новую установку Apache 2.4 на сервере Ubuntu 14.04. Apache продолжает отвечать 403 Запрещено также, если для меня файл конфигурации в порядке. CGI - это интерфейс Monitorix, инструмент системного мониторинга, написанный на Perl.

Файл конфигурации /etc/apache2/conf-enabled/monitorix.conf является:

Alias /monitorix /var/lib/monitorix/www
ScriptAlias /monitorix-cgi /var/lib/monitorix/www/cgi

<Directory /var/lib/monitorix/www/cgi/>
        DirectoryIndex monitorix.cgi
        Options ExecCGI
        <IfModule mod_authz_core.c>
                # Apache 2.4
                Require all granted
        </IfModule>
        <IfModule !mod_authz_core.c>
                # Apache 2.2
                Order deny,allow
                Allow from all
        </IfModule>
</Directory>

Все файлы в /var/lib/monitorix/www и /var/lib/monitorix/www/cgi иметь хотя бы разрешение на чтение для всех. Каждый раз, когда я пытаюсь получить доступ с URL /monitorix, в моем журнале Apache я вижу строки:

[Mon Sep 01 06:57:52.995680 2014] [authz_core:error] [pid 17145] [client x.x.x.x:58879] AH01630: client denied by server configuration: /var/lib/monitorix/www
[Mon Sep 01 07:00:10.131166 2014] [authz_core:error] [pid 17145] [client x.x.x.x:58903] AH01630: client denied by server configuration: /var/lib/monitorix/www
[Mon Sep 01 07:00:11.102614 2014] [authz_core:error] [pid 17145] [client x.x.x.x:58903] AH01630: client denied by server configuration: /var/lib/monitorix/www
...

Кроме того, я не могу понять, почему, когда я пытаюсь получить доступ по URL-адресу /monitorix-cgi (Я получил идею из ScriptAlias директива) я получаю 200 ок и Я вижу исходный код Perl из /var/lib/monitorix/www/cgi/monitorix.cgi.

Некоторое время назад я установил этот инструмент на Debian, и у меня не было проблем, /monitorix работал как ожидалось и /monitorix-cgi правильно дал мне 403 Запрещено вместо отображения исходного файла Perl.

Обновить: об этой проблеме было сообщено в Monitorix и, возможно, фиксированный (# 69)

Когда вы открываете / monitorix в браузере, вы получаете доступ к / var / lib / monitorix / www. Блок вашего каталога разрешает доступ к / var / lib / monitorix / www /cgi, а не / var / lib / monitorix / www. Либо измените псевдоним на:

Alias /monitorix /var/lib/monitorix/www/cgi

или добавьте дополнительный блок Справочника:

<Directory /var/lib/monitorix/www/>
    <IfModule mod_authz_core.c>
            # Apache 2.4
            Require all granted
    </IfModule>
    <IfModule !mod_authz_core.c>
            # Apache 2.2
            Order deny,allow
            Allow from all
    </IfModule>
</Directory>

Что касается просмотра источника cgi, вероятно, это конфигурация mod_cgi. Либо он не включен, либо не настроен для обработки файлов * .cgi. Возможно, вам потребуется добавить:

AddHandler cgi-script .cgi

на ваш виртуальный хост или блок каталога. Если это не сработает, попробуйте это в своей оболочке:

sudo a2enmod cgi

и следуйте инструкциям, чтобы перезагрузить apache. Если это по-прежнему не работает, добавьте комментарий ниже и, возможно, обновите свой вопрос. Я еще раз посмотрю и, возможно, настрою тестовую систему.

Я думаю, вам нужна строка Require:

Require all granted

У меня сработала следующая конфигурация (Apache 2.4):

<VirtualHost *:443>                                                                                                                                                                                        
        ServerName your.server.com                                                                                                                                                                      
        DocumentRoot "/var/lib/monitorix/www"                                                                                                                                                              

        AddHandler cgi-script .cgi                                                                                                                                                                         

        Alias /cgi /var/lib/monitorix/www/cgi                                                                                                                                                              

        <Directory "/var/lib/monitorix/www">                                                                                                                                                               
                Require all granted                                                                                                                                                                        
        </Directory>                                                                                                                                                                                       

        <Directory "/var/lib/monitorix/www/cgi">                                                                                                                                                           
                AllowOverride None                                                                                                                                                                         
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch                                                                                                                                         
                Require all granted                                                                                                                                                                        
        </Directory>                                                                                                                                                                                       
</VirtualHost> 

Файл /etc/monitorix/monitorix.conf выглядит так:

    base_url = /                                                                                                                                                                                               
    base_cgi = /cgi

И отключите встроенный сервис httpd:

<httpd_builtin>                                                                                                                                                                                        
            enabled = n