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

Устранение ошибок шлюза 403

У нас есть промежуточная машина, которая недавно возвращала статус 403. Это машина с CentOS, на которой работает nginx. Nginx передает некоторый трафик приложению scala Play и Apache, которое запускает приложение PHP (Drupal). Сервер защищен базовой аутентификацией htaccess.

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

Если я запрашиваю файл robots.txt, он появляется сразу же, и журнал nginx access.log показывает, что запрос был 200 OK, и записывает мое имя пользователя htaccess.

XX.XXX.XXX.XXX - MYUSER [31/Dec/2015:16:16:02 +0000] "GET /robots.txt HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36" "-"

Но затем, когда я запрашиваю домашнюю страницу сайта (домашнюю страницу drupal), я получаю ошибку 403 в браузере. Когда я просматриваю журналы ошибок nginx, я вижу, что это сообщение регистрируется через несколько секунд после моего запроса:

XX.XXX.XXX.XXX - MYUSER [31/Dec/2015:16:18:02 +0000] "GET /index.php HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36" "-"

По-видимому 499 - это код, специфичный для nginx для соединения, закрытого клиентом во время обработки запроса. Однако мой браузер все еще ждет ответа. Более чем через минуту я получаю сообщение об ошибке 503 в браузере, и это записывается в журнал доступа nginx:

XX.XXX.XXX.XXX - MYUSER [31/Dec/2015:16:20:32 +0000] "GET /index.php HTTP/1.1" 504 584 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36" "-"

Когда я смотрю журнал ошибок nginx, я вижу следующее:

2015/12/31 16:20:32 [error] 11645#0: *78933 upstream timed out (110: Connection timed out) while reading response header from upstream, client: XX.XXX.XXX.XXX, server: staging.mysite.com, request: "GET /index.php HTTP/1.1", upstream: "http://127.0.0.1:8080/index.php", host: "staging.mysite.com"

Поэтому мне было интересно, была ли проблема в Apache или Drupal. Apache access_log не записывает мой пользовательский запрос на index.php, а error_log ничего не показывает на эту дату. Я перезапустил apache - без изменений.

Чтобы проверить drupal, я сделал простую тестовую страницу php, которая загружает drupal. Мне удалось загрузить эту страницу, несмотря на долгую задержку. Это привело к записи в nginx access.log, но не в apache access_log.

Я не очень знаком с устранением этих проблем или работой с nginx, поэтому здесь я зашел в тупик. Кто-нибудь видит разумный следующий шаг?