Перехват html, генерируемого web-сервером перед отправкой

152
16 августа 2017, 20:01

Здравствуйте! Есть сервер на Linux - RubyonRails + Passenger + Nginx. Подскажите, пожалуйста, как можно перехватить html, генерируемый сервером, и модифицировать html? То есть нужно перехватить html перед отправкой, отдать в php скрипт, скрипт выполнит подмену текста и потом выполнить отправку. Спасибо.

Answer 1
  • Обратный прокси: направляйте все запросы, поступающие на nginx, на PHP-скриптик (на отдельном вебсервере или прямо в nginx через php-fpm). Он должен будет отправлять поступивший ему запрос в неизменном* виде к реальному приложению посредством любого HTTP-клиента, например curl. Соответственно, из HTTP-клиента вы получите весь ответ: статус, заголовки и тело. Можете сделать с ними что угодно и отправить их в качестве собственного ответа после доработки.
  • Rack-прослойка (middleware): на уровне Ruby on Rails (а точнее Rack, на котором он построен) можно добавить наружную функцию-прослойку, которая получит исходный запрос к приложению, передаст его глубже и получит ответ от приложения, но для отправки клиенту сможет сформировать собственный ответ (на Ruby, естественно; но из Ruby можно вызывать и другие программы, если нужно; а может, логику замены лучше написать на Ruby?).
    • Пример Rack-прослойки
    • Rack-прослойки в Ruby on Rails
  • Сделать по-нормальному: сделать замену в исходном коде приложения на Ruby on Rails и не городить таких жутких костылей с перерасходом ресурсов.

* Хотя какие-то изменения внести вам всё-таки придётся и/или захочется, например про IP-адрес или наличие SSL. Во вступлении RFC 7239 описан существующий де-факто стандарт общения с обратным прокси. Именно вступлении! Новый подход, предлагаемый этим RFC, я на практике пока не встречал.

READ ALSO
Помогите разобраться с хешом

Помогите разобраться с хешом

Отправляю хеш пароля в бд

164
запрос php к mysql записать строки в базу

запрос php к mysql записать строки в базу

ЗдравствуйтеУ меня имеется код, который выводит два текстовых поля и одно поле для ввода текста

198