Как развернуть приложение Ruby Rack с помощью NGINX
Я хочу развернуть простую службу Ruby Rack с NGINX. Я читал разные вещи в Интернете, ни одна из которых не была достаточно полезна. Допустим, у меня это (на самом деле это немного сложнее, но все еще < 200 строк службы кода):
require 'rack'
class HelloWorld
def call(env)
[200, {"Content-Type" => "text/plain"}, ["Hello world!"]]
end
end
Rack::Handler::Mongrel.run HelloWorld, Port: 9292
Я хотел бы знать, что было бы лучшим способом развернуть это с помощью NGINX. Может быть, FCGI или что-то еще?
Ответы
Ответ 1
вот базовая конфигурация nginx для случая, когда вы идете с решением unicorn
/thin
:
upstream rack_upstream {
server 127.0.0.1:9292;
}
server {
listen 80;
server_name domain.tld;
charset UTF-8;
location / {
proxy_pass http://rack_upstream;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~* ^.+\.(jpg|jpeg|gif|png|css|js)$ {
root /path/to/static/files;
}
}
Если вы запустите nginx как root, вы сможете обслуживать свой сайт на порту 80.
иначе измените listen 80
на listen SOME-AVAILABLE-PORT
замените domain.tld
на название вашего сайта
также вы можете добавить расширения файлов, которые будут обслуживаться nginx в regex (jpg|jpeg|gif|png|css|js)
, разделив их на |
подробнее см.:
http://wiki.nginx.org/DirectiveIndex
http://wiki.nginx.org/ServerBlockExample
http://wiki.nginx.org/FullExample
Ответ 2
Проще всего, вероятно, пассажир, который позволяет nginx обслуживать (помимо всего прочего) любое приложение на стойке. Он довольно прост в настройке, но поскольку у nginx нет загружаемых модулей, вам нужно установить nginx из исходного кода (установщик справляется со всем этим для вас).
Другой популярный способ - иметь nginx-прокси для единорога. Единорог - это рубиновый веб-сервер, который может размещать любое приложение в стойке. Как правило, вы позволяете nginx обрабатывать статические активы и отправлять остальные единорогам. У Единорога есть некоторые приятные функции по сравнению с тонким, mongrel и т.д., Например, он обрабатывает бесшовные перезагрузки в значительной степени из коробки.
Ответ 3
Развертывание nginx + пассажира довольно легко при использовании предварительно скомпилированных бинарных файлов для пассажиров (для Debian/Ubuntu). Важно иметь следующую структуру каталогов вашего проекта:
/var/www/my_app:
\-- public/ <- public root of webserver
\-- config.ru <- that where you place hello world
\-- tmp
\-- restart.txt
nginx config (возможно, например, в /etc/nginx/sites-available/my_site
):
server {
listen 80;
server_name example.com;
root /var/www/my_app/public;
passenger_enabled on;
passenger_ruby /usr/bin/ruby;
}
Если вы хотите перезапустить приложение, просто запустите
touch /var/www/my_app/tmp/restart.txt
Чтобы включить ваш сайт в Debian, создайте symlik
ln -s /etc/nginx/sites-available/my_site /etc/nginx/sites-enabled/my_site
и перезагрузить nginx /etc/init.d/nginx reload