我有一个单独的Nginx实例与乘客,并希望在不同的路线上提供不同的Rails应用程序。具体来说:/api
应该投放一个应用,/
应该投放不同的应用。
我的Rails应用程序位于文件系统上的/srv/api/
和/srv/ui
。
我的Nginx配置目前是这样的:
user foo;
worker_processes 1;
events { worker_connections 1024; }
http {
passenger_root /usr/lib/ruby/gems/1.8/gems/passenger-4.0.49;
passenger_ruby /home/monolith/.rvm/gems/ruby-2.1.1/wrappers/ruby;
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /srv/ui/public/;
passenger_enabled on;
}
location /api {
root /srv/api/public/;
passenger_enabled on;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
使用此配置,API应用程序正在正确提供,但UI应用程序却没有。它返回500错误,并且Nginx或Rails中的日志下没有错误日志。
尝试解决方案/调试 echo 'test' > /srv/ui/public/index.html
。这导致成功呈现'测试'
访问<hostname>.com/
使用location /
指令更改alias
以提供静态index.html。这也有效。
我在/
位置https://www.chiliproject.org/boards/1/topics/545内看到了这种符号链接文件的解决方案,但如果没有提供 API 应用,这将是相关的。
我怀疑这与乘客实例之间的干扰有关,但我不知道解决方案是什么。
答案 0 :(得分:-1)
我们之前已经实现了这一点(尽管使用了Apache - 也许我们可以为Nginx工作):
#app/apache2/apache2.conf
<VirtualHost *:80>
ServerName *********.co.uk
DocumentRoot /apps/[main_app]/current/public
<Directory /apps/[main_app]/current/public>
Allow from all
Options -MultiViews
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
#Secondry App
Alias /[app_name] /apps/[app_name]/current/public
<Location /[app_name]>
PassengerAppRoot /apps/[app_name]/current
RackEnv production
RackBaseURI /[app_name]
</Location>
</VirtualHost>
就Nginx而言,您可以使用以下内容:
#etc/nginx/nginx.conf
http {
server {
listen 80;
server_name yourdomain.com;
#serve your "main" site here
root /srv/ui/public/;
passenger_enabled on;
#serve your "API" app from the location / Alias
location /api {
root /srv/api/public/;
passenger_enabled on;
}
}
}