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

Как мне разделить записи журнала сервера Apache для домена, который отличается от домена моего сервера?

Я использую следующую версию Apache ...

httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   Apr 24 2019 13:45:48

В моем файле / var / log / httpd / access_log много записей для доменов, которые не являются моим доменом ...

79.143.191.42 - - [17/Dec/2019:10:36:30 -0500] "GET http://www.guenstiger.de/Produkt/Prada/Infusion_d_Homme_Deodorant_100_ml.html HTTP/1.1" 400 64146 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/536.26.17 (KHTML like Gecko) Version/6.0.2 Safari/536.26.17"

Я не уверен, как эти записи попадают в мой файл журнала, поскольку домен не разрешается на мой сервер, но есть ли способ направить эти запросы в отдельный файл журнала?

Редактировать: Вот моя конфигурация VirtualHost (сделанная после предложения из ответа) ...

<VirtualHost *:80>
    CustomLog /var/log/httpd/garbage_access_log common
</VirtualHost>
<VirtualHost *:80>
    ServerName mydomein.com

    Alias /static /var/www/html/myproject/static
    <Directory /var/www/html/myproject/static>
        Require all granted
    </Directory>

    # Next, add the following directory block
    <Directory /var/www/html/myproject>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    WSGIDaemonProcess myproject python-home=/var/www/html/venv python-path=/var/www/html
    WSGIProcessGroup myproject
    WSGIScriptAlias / /var/www/html/myproject_project/wsgi.py

</VirtualHost>

Редактировать: В ответ на данное предложение я попробовал это

<If "%{HTTP_HOST} == 'mydomein.com'">
    CustomLog /var/log/httpd/access_log common
<Else>
    CustomLog /var/log/httpd/other_access_log common
    ErrorDocument 421 "%{HTTP_HOST} is not available here"
</If>

что привело к ошибке ...

Expected </Else> but saw </If>

и вот я попробовал это ...

<If "%{HTTP_HOST} == 'mydomein.com'">
    CustomLog /var/log/httpd/access_log common    # Error on this line
</If>
<Else>
    CustomLog /var/log/httpd/other_access_log common
    ErrorDocument 421 "%{HTTP_HOST} is not available here"
</Else>

но это привело к ошибке

CustomLog not allowed here

Эти запросы выглядят так, как будто кто-то пытается использовать ваш веб-сервер в качестве прокси. Код ошибки 400 означает, что им не удалось.

Если эти запросы не приходят с Host: ... заголовок, вы можете использовать один VirtualHost по умолчанию чтобы поймать такие запросы и другие среды VirtualHost, используя Название сервера для вашего настоящего сайта.

Затем вы можете использовать разные файлы журналов для разных сред, поместив оператор журнала внутри директивы VirtualHost.

Это должно выглядеть примерно так:

<VirtualHost *:80>
  ...
  CustomLog /var/www/domains/default/apache.access.log common
</VirtualHost>

<VirtualHost *:80>
  ServerName mydomein.com
  ...
  CustomLog /var/www/domains/mydomein.com/apache.access.log common
</VirtualHost>

Что касается синтаксиса директивы CustomLog и настраиваемого ведения журнала:

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

"характеристики запросов" включает заголовок Host

Синтаксис: Файл CustomLog | формат канала | псевдоним [env = [!] Переменная среды | expr = выражение])

Третий аргумент является необязательным и определяет, нужно ли регистрировать конкретный запрос ... Условие может быть выражено как произвольное логическое выражение. Если условие не выполняется, запрос не будет зарегистрирован.

Кажется, что самым простым решением было бы добавить выражение в конец вашего CustomLog, например:

<VirtualHost *:80>
    ServerName mydomein.com
    
    # Use the Host header to determine where to log
    # Use the Host header to determine how to respond. 
    CustomLog /var/log/httpd/access_log common "expr=%{HTTP_HOST} == 'mydomein.com'"
    CustomLog /var/log/httpd/garbage_access_log common "expr=%{HTTP_HOST} != 'mydomein.com'"

    Alias /static /var/www/html/myproject/static
    <Directory /var/www/html/myproject/static>
        Require all granted
    </Directory>

    # Next, add the following directory block
    <Directory /var/www/html/myproject>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    WSGIDaemonProcess myproject python-home=/var/www/html/venv python-path=/var/www/html
    WSGIProcessGroup myproject
    WSGIScriptAlias / /var/www/html/myproject_project/wsgi.py

</VirtualHost>

Подводя итог, это поддерживает вашу текущую функциональность и будет регистрироваться в соответствующем файле.

Удачи, надеюсь, это поможет.