Apache дает 403 Запрещенные ошибки

Ok, поэтому я ранее настроил два виртуальных хоста, и они работают круто. они оба дома простые веб-проекты и отлично работают с http://project1 и http://project2 в браузере.

В любом случае, я пришел добавить еще один vhost. Я отредактировал файл/etc / hosts с помощью 127.0.0.1 project3, а также обновил httpd-vhosts.conf файл путем копирования и вставки предыдущих записей для project2 и редактирования пути к файлу.

Я проверил все права доступа к файлам и папкам (на самом деле я скопировано и вставлено из project2) и просто поместите сообщение "hello world" в индекс.PHP-файл.

Я получаю 403 запрещено доступ запрещен сообщение при доступе к http://project3

почему это, я просто могу понять, какой шаг я пропустил, поскольку все, кажется, настроено правильно.

спасибо заранее.

5 ответов


проверяем, что :

  • Apache может физически получить доступ к файлу (пользователь, который запускает apache, вероятно, www-data или apache, может получить доступ к файлу в файловой системе)
  • Apache может перечислить содержимое папки (разрешение на чтение)
  • Apache имеет директиву "Allow" для этой папки. Должен быть один для /var/ www/, вы можете проверить, например, vhost по умолчанию.

дополнительно, вы можете посмотреть на ошибку.файл журнала (обычно находится по адресу /var/log / apache2 / ошибка.log), который будет описывать, почему вы получаете ошибку 403 точно.

наконец, вы можете перезапустить apache, чтобы убедиться, что вся эта конфигурация применена. Обычно это можно сделать с помощью /etc/init.d/apache2 restart. В некоторой системе скрипт будет называться httpd. Просто выяснить.


restorecon команда работает следующим образом:

restorecon -v -R /var/www/html/

я просто исправила эту проблему после борьбы в течение нескольких дней. Вот что сработало для меня:

во-первых, проверьте свой Apache error_log file и посмотрите на последнее сообщение об ошибке.

  • если он говорит что-то вроде:

    access to /mySite denied (filesystem path
    '/Users/myusername/Sites/mySite') because search permissions
    are missing on a component of the path
    

    тогда есть проблема с вашими правами доступа к файлам. Вы можете исправить их, выполнив следующие команды из терминала:

    $ cd /Users/myusername/Sites/mySite
    $ find . -type f -exec chmod 644 {} \;
    $ find . -type d -exec chmod 755 {} \;
    

    затем обновите URL-адрес, где должен быть ваш сайт (например, http://localhost/mySite). Если вы все еще получаете ошибку 403, и если ваш Apache error_log по-прежнему говорит то же самое, а затем постепенно двигаться вверх по дереву каталогов, регулируя разрешения для каталогов, как вы идете. Вы можете сделать это из терминала:

    $ cd ..
    $ chmod 755 mySite
    

    при необходимости продолжайте:

    $ cd ..
    $ chmod Sites 
    

    и, если необходимо,

    $ cd ..
    $ chmod myusername
    

    НЕ идти дальше. Ты можешь по-королевски испортить свою систему. Если вы все еще получаете сообщение об ошибке search permissions are missing on a component of the path, я не знаю, что вам делать. Тем не менее, я столкнулся с другой ошибкой (ниже), которую я исправил следующим образом:

  • если error_log говорит что-то вроде:

    client denied by server configuration:
    /Users/myusername/Sites/mySite
    

    тогда ваша проблема не в ваших разрешениях файлов, а вместо этого с вашей конфигурацией Apache.

    обратите внимание, что в своем httpd.conf файл, вы увидите конфигурацию по умолчанию, как это (Apache 2.4+):

    <Directory />
        AllowOverride none
        Require all denied
    </Directory>
    

    или вот так (Apache 2.2):

    <Directory />
      Order deny,allow
      Deny from all
    </Directory>
    

    НЕ изменить это! Мы не будем переопределять эти разрешения глобально, а вместо этого в вашем . Прежде, однако, убедитесь, что ваш хост Include в строке httpd.conf is комментарии. Это должно выглядеть так. (Ваш путь может быть разным.)

    # Virtual hosts
    Include etc/extra/httpd-vhosts.conf
    
    открыть httpd-vhosts.conf файл, который вы просто Include d. Добавьте запись для своей веб-страницы, если у вас ее еще нет. Это должно выглядеть примерно так этот. The DocumentRoot и Directory пути должны быть идентичными и должны указывать на то, где ваш index.html или есть. Для меня это в пределах public поддиректории.

    Для Apache 2.2:

    <VirtualHost *:80>
    #     ServerAdmin webmaster@dummy-host2.example.com
        DocumentRoot "/Users/myusername/Sites/mySite/public"
        ServerName mysite
    #     ErrorLog "logs/dummy-host2.example.com-error_log"
    #     CustomLog "logs/dummy-host2.example.com-access_log" common
        <Directory "/Users/myusername/Sites/mySite/public">
            Options Indexes FollowSymLinks Includes ExecCGI
            AllowOverride All
            Order allow,deny
            Allow from all
            Require all granted
        </Directory>
    </VirtualHost>
    

    строки говорят

    AllowOverride All
    Require all granted
    

    имеют решающее значение для Apache 2.4+. Без них вы не будете переопределять настройки Apache по умолчанию, указанные в httpd.conf. Обратите внимание, что если вы используете Apache 2.2, эти строки должны скажи

    Order allow,deny
    Allow from all
    

    это изменение было основным источником путаницы для гуглеров этой проблемы, таких как я, потому что копирование-вставка этих строк Apache 2.2 не будет работать в Apache 2.4+, а строки Apache 2.2 по-прежнему часто встречаются в старых потоках справки.

    после того как вы сохранили ваши изменения, перезапустить Apache. Команда для этого будет зависеть от вашей ОС и установки, поэтому google отдельно, если вам нужна помощь он.

надеюсь, это поможет кому-то еще!


PS: Если у вас возникли проблемы с поиском этих .conf файлы, попробуйте запустить , например:

$ find / -name httpd.conf

серверу может потребоваться разрешение на чтение для вашего домашнего каталога и .htaccess в нем


вы можете попробовать отключить SELinux и попробовать еще раз, используя следующую команду

setenforce 0