Есть ли у Puma что-то вроде тега Apache "Location"?
Я использую Puma (версия 3.11.0) в качестве веб-сервера для приложения Rails (Rails версия 5.1.4). Мне нужно, чтобы все приложение было зашифровано SSL, но мне нужен один конкретный маршрут, чтобы SSL "verify_mode" был установлен равным равноправному. В Apache я обычно использовал бы блок "Location" или "LocationMatch" для настройки параметров SSL в отличие от остальной части сайта.
Как я могу сделать то же самое с Puma?
2 ответа
Я полностью согласен с @user3309314.
Открытое подключение Puma к Интернету (или, если на то пошло, любой сервер приложений) - не очень хорошая идея.
Веб-серверы (в отличие от серверов приложений) предназначены для того, чтобы быть впереди, защищая серверы приложений от жестокого мира...
... и по ходу дела они должны обрабатывать SSL/TLS (наряду с DoS-атаками и другими раздражающими проблемами).
Поэтому используйте nginx или apache для пересылки запросов в ваши приложения Ruby, и если вам нужно специальное правило TLS/SSL для определенного пути, сделайте это с nginx или apache.
Puma не поддерживает (и IMHO не поддерживает) функцию, о которой вы спрашиваете.
РЕДАКТИРОВАТЬ (часть информации, приведенной в комментариях + пояснения)
Лучше всего рассматривать серверы приложений как "мост" между уровнем маршрутизации хост-машины (nginx/apache) и приложениями.
Это слой маршрутизации хоста (nginx/apache), который фильтрует и направляет определенные имена хостов и пути к определенным приложениям (или одному и тому же приложению с разными заголовками / переменными / требованиями).
Работа сервера приложений состоит в том, чтобы просто "связать" между уровнем маршрутизации хоста и реальным приложением, переводя между различными форматами данных (данные HTTP в объекты Ruby и обратно).
Для поддержки запрашиваемой вами функции сервер приложений должен выполнять те же функции, что и уровень маршрутизации хоста (направляя правильное имя хоста / путь к правильному приложению с правильными изменениями)
Это нарушит любое "разделение задач", а также добавит избыточность в систему, что приведет к снижению производительности (не говоря уже о большей базе кода, которая дублирует одну и ту же задачу в разных модулях).
По этой причине, IMHO, эти функции не должны кодироваться на серверах приложений Ruby.
Вряд ли Puma это поддерживает.
Но вы можете настроить Nginx или Apache в качестве обратного прокси-сервера, поэтому запросы перенаправляются на сервер приложений Puma, и вы можете настроить параметры SSL по своему усмотрению.