【问题标题】:How do I create multiple locations with Nginx, Passenger, Sinatra如何使用 Nginx、Passenger、Sinatra 创建多个位置
【发布时间】:2012-04-14 14:03:18
【问题描述】:

我有一个看起来像这样的服务器部分:

server {
    listen       80;
    server_name  arch;
    root   /data/apps/production/fentonGem2/current/public;
    passenger_enabled on;
}

效果很好。但是,我想将两个或多个应用程序部署到同一个 server_namelisten 端口。所以大概我会使用以下内容:

server {
    listen       80;
    server_name  arch;
    location /app1 {
         root   /data/apps/production/fentonGem2/current/public;
         passenger_enabled on;
    }
    location /app2 {
         root   /data/apps/production/fentonGem3/current/public;
         passenger_enabled on
    }
} 

但这不起作用。有谁知道我如何部署两个单独的应用程序,并通过以下方式联系它们:

http://domain.com/app1/

和:

http://domain.com/app2/

该设置使用 Nginx、Phusion Passenger、Rack 和 Sinatra。


更新:

感谢您的回复,但我发现它们和方法没有帮助,尽管我可能不太了解它。似乎我必须在另一个应用程序中部署一个应用程序,这似乎很不干净。我最终采用的是单独的server 部分,然后更新我的/etc/hosts 文件以具有相同IP 地址的服务器别名。所以现在我有:

http://app1/

和:

http://app2/

和看起来像这样的服务器部分:

server {
    listen       80;
    server_name  app1;
    root /data/apps/production/app1/current/public;        
    passenger_enabled on;        
}               
server {
    listen 80;
    server_name app2;
    root /data/apps/production/app2/current/public;
    passenger_enabled on;
}

在 /etc/hosts 中:

192.168.1.30     app1 app2

【问题讨论】:

    标签: ruby nginx sinatra passenger rack


    【解决方案1】:

    以下工作:

    1. 首先创建的符号链接名为 app1app2 指向“公共”目录,如下所示:

      ln -s /data/apps/production/fentonGem2/current/public /data/apps/production/fentonGem2/current/app1
      ln -s /data/apps/production/fentonGem2/current/public /data/apps/production/fentonGem2/current/app2
      
    2. 将 nginx.conf 修改为 rails_base_uri,应该如下所示:

      ...
      server {
          listen       80;
          server_name  arch;
          location ^~ /app1 {
              root /data/apps/production/fentonGem2/current;
              rails_env production;
              passenger_enabled on;
              passenger_base_uri /app1;
          }
          location ^~ /app2 {
              root /data/apps/production/fentonGem2/current;
              rails_env production;
              passenger_enabled on;
              passenger_base_uri /app2;
          }
      } 
      ...
      

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      不确定,但您可能需要passenger_base_uri /app1;

      关于Passenger和Nginx conf的更多信息: http://www.modrails.com/documentation/Users%20guide%20Nginx.html#PassengerBaseURI

      编辑:

      "允许多次指定此选项。这样做可以在同一虚拟主机下的不同子URI中部署多个应用程序。"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-10
        • 2013-06-13
        • 1970-01-01
        • 2011-03-23
        • 2011-04-21
        • 2015-08-10
        • 1970-01-01
        • 2011-08-17
        相关资源
        最近更新 更多