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

nginx: контроль доступа к журналу с сохранением внутреннего перенаправления на WordPress

Я создал страницу WordPress с постоянной ссылкой http://domain.tld/health_status для мониторинга работоспособности WordPress. К нему часто обращаются, поэтому я не хочу, чтобы эти запросы отображались в моем журнале доступа.

Основное «правило перезаписи» для всех страниц WordPress:

location / {
    try_files $uri $uri/ /index.php?q=$args;
}

Теперь на том же уровне я попробовал

location /health_status {
    access_log off;
    #try_files $uri $uri/ /index.php?q=$args;
    }

Из nginx документация по местонахождению:

Литеральные строки соответствуют начальной части запроса - будет использоваться наиболее точное совпадение

/health_status более конкретен, чем /, поэтому этот блок действует, когда я запрашиваю http://domain.tld/health_status.

С try_files закомментированная строка (как указано выше), запрос не отображается в журнале доступа, ура, но, очевидно, я просто получаю ошибку 404, потому что nginx не перенаправляет этот запрос в WordPress.

С try_files активная линия, внутреннее перенаправление на WordPress ' index.php происходит и /health_status Страница WordPress отображается в браузере. Однако после внутреннего перенаправления location /health_status блок больше не действует, и запрос попадает в журнал доступа.

Как решить эту проблему чисто? Должен ли я теперь добавить еще один блок, соответствующий фактическому /index.php?q=healthstatuswhatever запрос, который происходит после внутреннего перенаправления?

Спасибо!

Вы должны использовать именованное местоположение для запросов, предназначенных для WordPress. Пример этого:

location ~ \.php$ {
    try_files $uri =404;

    fastcgi_ ### fastcgi params and other config for PHP go here
}

location @wordpress {
    try_files $uri /index.php;

    fastcgi_ ### fastcgi params and other config for WP go here
}

location / {
    try_files $uri $uri/ @wordpress;
}

location /health_status {
    access_log off;
    try_files $uri $uri/ @wordpress;
}

Этот пример неполный и может быть небезопасным; он только демонстрирует, как можно решить вашу проблему. Убедитесь, что ваш веб-сервер надежно защищен.