Hlavní navigace

nginx a Ruby On Rails

3. 3. 2010 10:11 (aktualizováno) | Martin Popelák

V dnešním příspěvku jsem se rozhodl popsat konfiguraci nginx a Ruby On Rails. Nginx je http/reverzní proxy napsaný Igorem Sysoevem. Proč nginx?

  • Přehlednější konfigurační soubory
  • Nižší paměťová naročnost v porovnání s Apachem

Instalace nginx na debianu:

aptitude install nginx

Spuštění:

/etc/init.d/nginx start

V současné době existují 2 způsoby jak pomocí nginx „obsluhovat“ railsovou aplikaci. První je pomocí mongrel_clusteru a druhý pomocí modulu Phusion Passenger.

Mongrel Cluster

Nejdříve je nutné nainstalovat gem mongrel_cluster:

gem install mongrel_cluster

Poté je potřeba vygenerovat konfigurační soubor příkazem (v rootu aplikace, soubor se vygeneruje do adresáře config):

mongrel_rails cluster::configure -e production -p 8000 -N 3 -a 127.0.0.1

-e znamená prostředí (obvykle production), -p je port na kterém se spustí první instance mongrelu, -N je počet mongrelů a -a znamená, že instance budou přístupné pouze z localhostu.

Cluster se spouští:

mongrel_rails cluster::start

Nyní je již zbývá pouze upravit konfigurační soubor nginx.conf (v debianu ho najdeme v /etc/nginx/). Zjednodušená ukázka:

user www-data; worker_processes 1; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 1024; # multi_accept on; } http { include /etc/nginx/mime.types; access_log /var/log/nginx/access.log; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; tcp_nodelay on; gzip on; gzip_disable "MSIE [1-6]\.(?!.*SV1)"; #mongrel_cluster upstream mongrels { server 127.0.0.1:8000; server 127.0.0.1:8001; server 127.0.0.1:8002; server 127.0.0.1:8003; } server { listen 80; #cesta k aplikaci root /kde/je/rails_aplikace/root/public; } location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; if (-f $request_filename/index.html) { rewrite (.*) $1/index.html break; } if (-f $request_filename.html) { rewrite (.*) $1.html break; } if (!-f $request_filename) { proxy_pass http://mongrels; break; } } } }

Po restartu nginx:

/etc/init.d/nginx restart

by měla aplikace již běžet. Stačí do prohlížeče zadat http://localhost. Případné chyby hledejte ve /var/log/ngin­x/error.log.

Phusion Passenger

je open-source modul do nginx (existuje i verze pro Apache, postup instalace a konfigurace bude velmi podobný, pokud by měl někdo zájem o konkrétní popis, tak ho mohu připojit později).

Instalace:

gem install passenger passenger-install-nginx-module

Po spuštění druhého příkazu na vás vyskočí interaktivní mód, kde po odentrování proběhne kontrola závislostí. Pak nepotřebujete žadnou další konfiguraci nginx zadejte 1 a enter. Následuje stažení a kompilace nginx.

Jestliže jste nezadali cestu do jiného adresáře, tak se nyní nachází instalace nginx v /opt/nginx. /opt/nginx/con­f/nginx.conf by měl vypadat asi takhle:

user www-data; worker_processes 1; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; passenger_root /usr/lib/ruby/gems/1.8/gems/passenger-2.2.10; passenger_ruby /usr/bin/ruby1.8; access_log /var/log/nginx/access.log; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; tcp_nodelay on; gzip on; server { listen 80; root /kde/je/rails_aplikace/root/public; passenger_enabled on; rails_env development; } }

Po lehké úpravě /etc/init.d/nginx, kde je potřeba nastavit cestu pro démona (DAEMON=/opt/ngin­x/sbin/nginx), stačí restartovat nginx a otevřít v prohlížeči localhost.

Závěr

K vyzkoušení kombinace nginx a passenger jsem se dostal teprve nedávno (díky Števo:)) její výhoda je především ve snadné instalaci. Na druhou stranu nginx s mongrel_clusterem je poměrně osvědčená stabilní kombinace.

Zdroje

http://nginx.org/

Phusion Passenger