所以我有两个应用程序我想运行在服务器上。 一个应用程序,我想成为“默认”的应用程序 – 也就是说,所有的URL应该默认发送这个应用程序, 除了一个特定的path,让我们调用它/foo :
http://mydomain.com/ -> app1 http://mydomain.com/apples -> app1 http://mydomain.com/foo -> app2
我的两个机架应用程序安装如下所示:
/var /www /apps /app1 app.rb config.ru /public /app2 app.rb config.ru /public app1 -> apps/app1/public app2 -> apps/app2/public
( app1和app2是符号链接到他们各自的应用程序的公共目录)。 这是这里描述的子URI的Passenger设置: http : //www.modrails.com/documentation/Users%20guide%20Nginx.html#deploying_rack_to_sub_uri
用下面的configuration我有/foo去app2:
server { listen 80; server_name mydomain.com; root /var/www; passenger_enabled on; passenger_base_uri /app1; passenger_base_uri /app2; location /foo { rewrite ^.*$ /app2 last; } }
现在,我如何获得app1来接收一切? 我已经尝试了以下(放在location /foo指令之后),但是在error.log我得到了一个具有无限内部redirect的500:
location / { rewrite ^(.*)$ /app1$1 last; }
我希望last指令可以防止无限的redirect,但我想不是。 /foo得到相同的错误。
有任何想法吗? 谢谢!
我设法得到以下工作。 为你的例子你想要的目录和符号链接结构是这样的。
/var /www /apps /app1 app.rb config.ru /public /foo -> /var/www/apps/app2/public /app2 app.rb config.ru /public
然后你的nginx服务器块将如下所示:
server { listen 80; server_name mydomain.com; root /var/www/apps/app1/public; passenger_enabled on; passenger_base_uri /foo; }
干杯,麦克D.
如果应用程序没有密切关联,则应该使用子域名。
server { listen 80; server_name app1.mydomain.com; root /var/www/apps/app1; passenger_enabled on; passenger_base_uri /app1; }
如果子域名不是一个选项,那么alias指令可能会被使用。
你是怎么设法用nginX来解决的。 我试过了,比我试过乘客。 双方都没有运气。
我有一个类似的问题。 我解决这个问题的方法是在nginx.conf文件的服务器部分插入以下内容(虽然有点破解,但它确实有效):
error_page 403 / app1 / homepage;
希望这可以帮助
改为使用nginx,你可以在使用机架的Sinatra本身的MMVC(Multi MVC)中完成
run Rack::Cascade.new [ IndexApp, BlogApp, TestApp, ThisApp, ThatApp]
使用这个你可以使用nginx乘客运行多个应用程序。 由于乘客需要公共文件夹,我创build了一个虚拟的公共文件夹,在公共场合我创build了pipe理个人资产的文件夹,如public / blog / public / index public / test等。