Nginx + Apache - как убрать мусор с 404 и 403 страниц приложений
Ситуация следующая, есть nginx стоящий фронтендом. Есть апач (apache 2.2) бекендом. Nginx проксирует запросы на Apache.
В Apache вертится приложение. В данном случае Drupal.
Возникла проблема следующего плана: на страницах 404 и 403 начал вылезать мусор в виде размера странички в байтах в шустнадцатиричной системе счисления. Как оказалось - это всего лишь навсего способ передачи данных от сервера Apache, когда он не знает точно длины контента(chunked encoding).
Для тех кто хочет знать об кодировании - читать тут: http://en.wikipedia.org/wiki/Chunked_transfer_encoding
Проблема решается исправлением во всех приложениях PHP в функции header() заменой 'HTTP/1.1' на HTTP/1.0
Но понятно что править Drupal, сторонние модули которые надо обновлять и т.д. - не наш путь.
Для сервера Apache проблема решается простым путем. Надо добавить в конфигурацию сервера строчки:
SetEnv force-response-1.0 1
SetEnv downgrade-1.0 1
Таким образом сам Apache будет отдавать данные так как это надо nginx.
Чем эта проблема чревато для тех же сайтов на Drupal: будут проблемы с отдачей страниц 404, 403. Могут вылезти неприятные проблемы при работе с JS, а также проблемы при работе с формами - авторизации и восстановлении пароля.
Спасибо за решение товарищам с канала #nginx на RusNet, а так же непосредственно тем, кто его нашел и указал тут: http://www.lexa.ru/nginx-ru/msg25234.html















Комментарии
Большое спасибо. Была аналогичная проблема. Удалось найти не очень красивое решение, но всё же решение: в коде самого друпаля или модуля custom error находится установка header'а "HTTP/1.1 403 Forbidden" и заменяется версия протокола на 1.0 : "HTTP/1.0 403 Forbidden". В принципе работает, но ваше решение несмоненно лучше. добавил в .htaccess и всё ок. спасибо!
Отправить комментарий