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 и всё ок. спасибо!
 

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Доступны HTML теги: <em> <strong> <blockquote> <p> <br />
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
Вы не робот?
6 + 2 =
Решите простую задачку и введите результат. Например для 1+3 введите 4