我正在从apache / passenger迁移到nginx / unicorn。我已成功加载nginix并使用独角兽托管多个网站,但每个域只有一个。
在Passenger中,可以通过子文件夹在单个域下托管多个rails应用程序,并继续在root下托管单个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中做到这一点吗?
在How to make unicorn run a Rails 3.0 app under a path?上提出了类似的问题,但只提供了部分答案。
答案 0 :(得分:0)
您需要做的是在nginx配置中定义locations
。 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最常见的用途之一。