Puma - это сервер приложений, а точнее сервер приложений Rack .(Существует не только Puma: Unicorn, Passenger и т. Д. Также существуют серверы приложений для различных интерфейсов; например, Tomcat и JBoss являются серверами приложений Java.) Сервер приложений принимает HTTP-запрос, анализирует его в структуре приложения.язык передает его приложению и ожидает объект ответа, который затем возвращает клиенту.
Nginx / Apache - веб-серверы общего назначения.Apache не знает, как обслуживать приложения Rack, а Puma не знает, как делать кучу других вещей, которые делает Nginx / Apache (например, CGI-скрипты, перезапись URL, прокси, балансировка, черные списки ...)
Rack - это библиотека для Ruby, которая принимает проанализированные HTTP-запросы от сервера приложений, направляет их через настраиваемый стек промежуточного программного обеспечения (например, для обработки сеансов), передавая объект запроса обработчику и возвращая объект ответа серверу приложений, делаяВеб-разработка в Ruby легко.Вы можете запустить приложение Rack напрямую (точнее, на очень простом сервере, который установлен вместе с Rack), но это не рекомендуется вне разработки, где приходят «правильные» серверы приложений: они знают, как поддерживать ваше приложение живымперезапустите его, если он умирает, убедитесь, что запущено заранее определенное количество потоков, и тому подобное.
Таким образом, как правило, ваш веб-сервер принимает соединения, а затем использует простой обратный прокси передать соответствующие запросы вашему приложению Rack, которое выполняется внутри сервера приложений Rack.Это дает вам преимущества от всех участвующих частей.