Настраиваем NGINX под наше Rails приложение, часть 3

  • написал: MpaK
  • 123


В первых двух частях мы настроили наш небольшой vds сервер под удобное развертывание Rails приложений ufacode.ru/blog/linux/1100.html
Во второй части настроили уже само Rails приложение и развернули с помощью Capistrano и запустили веб-сервер приложения Unicorn ufacode.ru/blog/linux/1101.html

Теперь дело за малым и простым, настроить установленный уже NGINX, чтобы он удобно пропускал запросы из внешнего мира к нашим приложениям на базе Unicorn сервера.

Основной конфиг /etc/nginx/nginx.conf вот мой например
user deployer staff; # указываем от кого worker'ы будут запускаться это наш парень
worker_processes  2; # кол-во работничков, у меня всего 2 ядра, я не грубил, но можно и больше

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;
    keepalive_timeout  65;
    tcp_nodelay        on;
    gzip  on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}


Теперь нам надо в папке /etc/nginx/sites-available создавать свой конфиг на каждое приложение и делать симлинк в папке /etc/nginx/sites-enables на этот файл, после чего нужно перезапускать NGINX чтобы он обновил свою кофигурацию в памяти.
И так пример файла для project_name тоже очень простой и без тюнинга /etc/nginx/sites-available/project_name.conf

# путь к сокету нашего поднятого unicorn'а
upstream project_name_rails{
    server unix://home/deployer/project_name/shared/tmp/unicorn.socket;
}

server {
    listen 80;
    server_name www.project_doman_name.ru;
    return 301 $scheme://project_domain_name$request_uri;
}

# в других проектах уберите default но слушаем 80-ый порт
server{
    listen 80 default;
    server_name project_domain_name.ru;
    root /home/deployer/project_name/current/public;

    access_log  /home/deployer/project_name/shared/log/nginx.access.log;
    error_log  /home/deployer/project_name/shared/log/nginx.error.log;

    location ^/assets/ {
        gzip_static on;
        expires max;
        add_header Cache-Control public;
    }

    location /{
        include proxy_params;        
        if (!-f $request_filename){
	    proxy_pass http://project_name_rails;
	    break;
	}
    }
}

и все, теперь делаем линк (если ubuntu то с sudo)
ln -s /etc/nginx/sites-available/project_name.conf /etc/nginx/sites-enabled/project_name.conf


И теперь делаем рестарт NGINX сервера:
service nginx restart


Все, теперь или ищем ошибки в логах или с удовольствием открываем ваше Rails приложение из внешнего мира по адресу связанного домена.

Теперь когда у вас все настроено, при заведении нового проекта например project2_name вам нужно только создавать 2-ой конфиг nginx виртуального хоста, линковать и перегружать. И приложение будет отлично подниматься для внешнего мира.

p.s. поправки, замечания и комментарии только приветствуются

1 комментарий

avatar
  • MpaK
  • 0
ну и подключение ключиков для дебиана

wget nginx.org/keys/nginx_signing.key
cat nginx_signing.key | sudo apt-key add -
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.