2

我正在从 apache/passenger 迁移到 nginx/unicorn。我已经成功加载了 nginix 并使用 unicorn 托管了多个站点,但每个域只有一个。

在Passenger中,可以通过子文件夹在一个域下托管多个rails应用程序,并继续在根目录下托管一个html文件。例如:

<VirtualHost 10.0.0.2>
    ServerName preview.site.com
    ServerAlias preview.site.com

    DocumentRoot /var/www/com.site.preview

    <Directory /var/www/com.site.preview>
            AllowOverride all
            Options -MultiViews
    </Directory>

    RailsBaseURI /app-one
    RailsBaseURI /app-two
    RailsBaseURI /app-three

</VirtualHost>

所以要去

http://preview.site.com

会给我一个目录。即将 :

http://preview.site.com/app-one
http://preview.site.com/app-two
http://preview.site.com/app-three

而是运行该子文件夹下的每个应用程序。有没有我仍然可以在 nginx/unicorn 中做到这一点?

关于如何让独角兽在路径下运行 Rails 3.0 应用程序,有人提出了类似的问题?,但只提供了部分答案。

4

1 回答 1

0

您需要做的是locations在您的 nginx 配置中定义。该server块定义了 nginx 应用程序在哪个端口上运行,以及它侦听的 URL。在该块内,添加以下内容:

location /app-one/ {
   proxy_set_header X-Real-IP  $remote_addr;
   proxy_set_header X-Forwarded-For $remote_addr;
   proxy_set_header Host $host;
   proxy_pass http://127.0.0.1:3000;
}

location /app-two/ {
   proxy_set_header X-Real-IP  $remote_addr;
   proxy_set_header X-Forwarded-For $remote_addr;
   proxy_set_header Host $host;
   proxy_pass http://127.0.0.1:4000;
}

location /app-three/ {
   proxy_set_header X-Real-IP  $remote_addr;
   proxy_set_header X-Forwarded-For $remote_addr;
   proxy_set_header Host $host;
   proxy_pass http://127.0.0.1:5000;
}

这假设以下情况:

  • 您的应用程序在与 nginx 相同的机器上运行
  • 您的应用程序在上述三个端口上运行:3000、4000、5000

这种方法是一种反向代理,是 Nginx 最常见的用途之一。

于 2016-03-18T10:40:11.290 回答