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

Запрещено (403) при доступе к статусу сервера в apache 2.2.22

Я получаю сообщение об ошибке "Запрещено" при попытке доступа к www.website.com/server-status

mod_status включен

VirtualHost:

<VirtualHost *:8080>
   ServerName  website.com
   ServerAlias www.website.com
   DocumentRoot /var/www/wordpress/
   DirectoryIndex index.php
   <Directory /var/www/wordpress/>
      AllowOverride All
      Order Deny,Allow
      Allow from all
      Options +Indexes
   </Directory>

<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from .website.com
</Location>

   ErrorLog /var/www/wordpress/logs/error.log
   CustomLog /var/www/wordpress/logs/access.log combined
</VirtualHost>

Я попытался изменить Allow с .website.com на IP-адрес веб-сайта, и возникла такая же проблема. Когда я пытаюсь изменить его на Разрешить из всех, я получаю 404.

Еще одна попытка, которую я сделал, заключалась в настройке разрешения с 127.0.0.1 и доступе через lynx изнутри сервера, в значительной степени та же проблема.

Вот ошибка, полученная в error.log:

[error] [client 127.0.0.1] client denied by server configuration: /var/www/wordpress/server-status

Кроме того, я отключил переопределение местоположения в status.conf, чтобы убедиться, что единственное определение статуса сервера будет в VirtualHost. Установка местоположения статуса сервера в apache.conf дает те же результаты.

Есть идеи, что мне не хватает?

Я пробовал помогать следующим ресурсам, но ни один из них не дал мне решения:

  1. Модуль Apache mod_status
  2. Состояние сервера Apache 403 на нестандартном порту
  3. Сообщение Apachelounge

Спасибо

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

<VirtualHost *:80>
    ServerAdmin superadmin@somemail.com
    ServerName 127.0.0.1
    DocumentRoot /var/www
    <Directory />
            Options FollowSymLinks
            AllowOverride All
    </Directory>
    <Directory /var/www>
      Options +FollowSymLinks
      AllowOverride None
      order allow,deny
      allow from all

    </Directory>

</VirtualHost>

Нашел это Вот

Строка Разрешить от не имеет отношения к вашему сайту. Allow from позволяет людям с указанным IP-адресом (или доменным именем, которое разрешается в IP) получить доступ к вашему сайту.

Итак, если у вашего дома IP-адрес 2.2.2.2, вы должны указать allow from 2.2.2.2 и НЕ allow from yourownwebsite.com.

Это должно исправить ваш 403 (запрещено), хотя я понимаю, что вы сказали, что пытались изменить его на 127.0.0.1 и получить к нему доступ непосредственно с сервера. Вы пробовали изменить 127.0.0.1 на localhost?

Теперь по поводу 404. Это совсем другой вопрос. Это ошибка «Не найдено», а не «запрещенная» ошибка.

Контейнеры VirtualHost по умолчанию не предназначены для использования с mod_status. Это просто не сработает. В соответствии с этот сайт, у вас есть 2 варианта:

  1. Заставить сервер прослушивать альтернативный порт (например, 8080)
  2. Замените звездочку на публичный IP-адрес вашего сервера - тогда вы сможете получить доступ к статусу сервера. только из localhost / 127.0.0.1

Я мало что знаю о WordPress, но если это что-то вроде Laravel, Magento или любого другого веб-программного обеспечения, которое работает на Apache, есть .htaccess файл, расположенный в корневом каталоге, простой пример из https://codex.wordpress.org/htaccess прямо здесь:

 # BEGIN WordPress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Я бы поставил реальные деньги, что если вы измените

AllowOverrides All

к

AllowOverrides None

страница появляется, однако мне кажется, что это слияние файла .htaccess и httpd.conf, а также ужасный беспорядок, которым являются все файлы conf Apache, я решил заняться этим другим способом.

Я предпочитаю изменить файл .htaccess из того, что показано выше, например, на:

 # BEGIN WordPress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} /server-status
    RewriteRule ".?" "-" [S=1]
    RewriteRule . /index.php [L]
</IfModule>
# END WordPress

это приведет к тому, что RewriteCond будет соответствовать uri конечной точки, а затем RewriteRule пропустит правило управления, которое перезаписывает все конечные точки в index.php, чтобы механизм wordpress мог работать с динамическими URL-адресами.

Может быть, есть более простой способ, но у меня был бы http.conf так:

<VirtualHost *:8080>
    ServerName  website.com
    ServerAlias www.website.com
    DocumentRoot /var/www/wordpress/
    DirectoryIndex index.php
    <Directory /var/www/wordpress/>
        AllowOverride All
        Order Deny,Allow
        Allow from all
        Options +Indexes
    </Directory>
    <Location /server-status>
        SetHandler server-status
        Order deny,allow
        Deny from all
        Allow from 10.0.0.0/24
    </Location>
    ErrorLog /var/www/wordpress/logs/error.log
    CustomLog /var/www/wordpress/logs/access.log combined
</VirtualHost>

какое-нибудь дополнительное чтение?

https://httpd.apache.org/docs/2.2/en/mod/mod_rewrite.html

https://httpd.apache.org/docs/2.2/howto/htaccess.html