nginx和unicorn上的多个rails应用程序

mar*_*cks 10 ubuntu ruby-on-rails nginx unicorn

我使用Screencast 335部署到VPS教程成功设置了rails站点.现在我想在新域上添加另一个rails应用程序,但我对所需的步骤感到困惑.

在上面的设置中,site-available或/etc/nginx/nginx.conf没有变化.唯一的配置是在我的apps配置目录中的unicorn.rb,unicorn_init.sh和nginx.conf中.nginx.conf文件如下所示: -

upstream unicorn {
  server unix:/tmp/unicorn.my_app.sock fail_timeout=0;
}
server {
  listen 80 default deferred;
  # server_name my_app.com.au www.my_app.com.au;
  root /var/www/my_app/current/public;
  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }
  try_files $uri/index.html $uri @unicorn;
  location @unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://unicorn;
  }
  error_page 500 502 503 504 /500.html;
  client_max_body_size 4G;
  keepalive_timeout 10;
}
Run Code Online (Sandbox Code Playgroud)

在我的Capistrano配方中,我有这条线

sudo "ln -nfs #{current_path}/config/nginx.conf /etc/nginx/sites-enabled/#{application}"
Run Code Online (Sandbox Code Playgroud)

添加第二个域只是在监听和取消注释server_name部分之后删除默认延迟,然后使用不同的上游套接字名称和第二个应用程序的服务器名称重复此配置文件?这样做还是我需要将此文件传输到可用的站点并创建启用站点的符号链接?

mar*_*cks 21

在unicorn.rb中:

申请1:

root = "/var/www/application_1/current"
working_directory root
pid "#{root}/tmp/pids/unicorn-app1.pid"
listen "/tmp/unicorn.app1.sock"
Run Code Online (Sandbox Code Playgroud)

申请2:

root = "/var/www/application_2/current"
working_directory root
pid "#{root}/tmp/pids/unicorn-app2.pid"
listen "/tmp/unicorn.app2.sock"
Run Code Online (Sandbox Code Playgroud)

在nginx.conf中:

申请1:

upstream app1_server {
  server unix:/tmp/unicorn.app1.sock fail_timeout=0;
}

server {
  listen 80;
  server_name my_app_1.com www.my_app_1.com;
  root /var/www/app1/current/public;

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

  try_files $uri/index.html $uri @app1_server;
  location @app1_server {
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Host $http_host;
  proxy_redirect off;
  proxy_pass http://app1_server;
 }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 4G;
  keepalive_timeout 10;
}
Run Code Online (Sandbox Code Playgroud)

申请2:

upstream app2_server {
  # point to app2 sock
  server unix:/tmp/unicorn.app2.sock fail_timeout=0;
}

server {
  listen 80;
  server_name my_app_2.com www.my_app_2.com;
  root /var/www/app2/current/public;

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

  try_files $uri/index.html $uri @app2_server;
  location @app2_server {
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Host $http_host;
  proxy_redirect off;
  proxy_pass http://app2_server;
 }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 4G;
  keepalive_timeout 10;
}
Run Code Online (Sandbox Code Playgroud)

  • 是不是每个niginx.conf文件中的uniq端口号? (2认同)

R M*_*hev 4

使用 Nginx 和 Unicorn 在一台主机上托管不同的应用程序非常容易。

socket您可以通过为每个应用程序定义不同的文件名称来实现分离。当然,您应该current/public在 .server部分中指向正确的目录nginx.conf

最后一次修改是在文件中unicorn_init.sh:在文件顶部,您应该更改应用程序目录的APP_ROOT完整路径。current/public

如果您的设置与 RailsCast 的设置类似,则所有其他事情都由 capistrano 完成。