2016-12-15 13 views
0

У меня есть ящик Linux под управлением Ubuntu 14.04 с объемом памяти около 50 гб.Неплохая практика иметь несколько серверов приложений Unicorn с одним обратным прокси-сервером Nginx?

У меня есть веб-приложения 5 или 6 Ruby-on-Rails, каждый из которых имеет сервер приложений Unicorn, обслуживаемый обратным прокси-сервером Nginx.

Каждое приложение размещено в подкаталоге. например:

  • www.webserver.com/app1
  • www.webserver.com/app2

Каждое приложение получает, может быть 50-100 запросов в день. Это все небольшие приложения для облегчения бизнес-процессов в моей фирме.

Мой Nginx конфигурационный файл выглядит примерно так:

upstream app1 { 
    #path to Unicorn SOCK file; 
} 

upstream app2 { 
    #path to Unicorn SOCK file; 
} 

upstream app3 { 
    #path to Unicorn SOCK file; 
} 

# ...several more apps 

server { 
    listen 443 ssl; 
    access_log #path; 
    error_log #path; 

    ssl_certificate #path; 
    ssl_certificate_key #path; 

    add_header X-UA-Compatible "IE=Edge,chrome=1"; 

    root /srv/apps/app1/public; 

    location /app1 { 
      proxy_pass http://app1; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_set_header Host $http_host; 
      proxy_redirect off; 
    } 

    location /app2 { 
      proxy_pass http://app2; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_set_header Host $http_host; 
      proxy_redirect off; 
    } 

    location /app3 { 
      proxy_pass http://app3; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_set_header Host $http_host; 
      proxy_redirect off; 
    } 

    # ...several more apps 

} 

Эта установка работала без проблем в течение года или около того, но у меня есть это мучительное чувство, что я делаю это все неправильно ....

Я буду сталкиваться с проблемами, если я буду продолжать добавлять приложения? Есть лучший способ сделать это?

Update:

Под "проблемами", я имею в виду:

  • статических столкновений пути ресурсов?
  • проблемы с памятью? а именно, используя больше, чем мне нужно для достижения такого же поведения?

И «лучший способ сделать это,» я имею в виду:

  • кроме отправки запросов к соответствующему единорога серверу путем разбора из имени поддиректории в URL
  • Должен ли я использовать один обратный прокси Nginx для обслуживания нескольких приложений?

ответ

0

Для такой же конфигурации в разных приложениях вы можете использовать директиву include.

Пример, создать файл с именем /etc/nginx/global_proxy.conf с этим содержанием:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $http_host; 
    proxy_redirect off; 

И в nginx.conf ваш раздел/appX:

location /appX { 
     proxy_pass http://appX; 
     include /etc/nginx/global_proxy.conf; 
} 

И для повышения вашей безопасности я рекомендую добавить dhparam и добавить это в конфигурацию SSL:

# SSL : 
# drop SSLv3 (POODLE vulnerability) 
    ssl_protocols   TLSv1 TLSv1.1 TLSv1.2; 
# Recommanded ciphers 
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; 
    ssl_prefer_server_ciphers on; 
    ssl_session_cache shared:SSL:10m; 
# Diffie–Hellman key exchange (D–H) 
    ssl_dhparam /etc/nginx/ssl/dhparam.pem; 
# config to enable HSTS(HTTP Strict Transport Security) 
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains"; 
# force timeouts if one of backend is died 
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; 

Для создания dhparam.PEM файл:

OpenSSL dhparam -out dhparam.pem 4096

+0

спасибо за совет о том, как конденсировать файлу немного, в том числе прокси-конфигурации в отдельном файле. Тем не менее, я просто обновил свой вопрос, так что это немного яснее ... то, что я действительно ищу, - это хороший подход к нескольким приложениям с единственным прокси-сервером Nginx, а если нет, то почему? – chester