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?
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.
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/nginx/error.log.
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/conf/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/nginx/sbin/nginx), stačí restartovat nginx a otevřít v prohlížeči localhost.
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.
Test
Přečteno 19 773×
Přečteno 16 032×
Přečteno 9 300×
Přečteno 7 128×
Přečteno 6 881×