gpt4 book ai didi

ruby - nginx + passenger 上的多个 Rack 应用程序,一个作为 root,另一个不是...配置帮助

转载 作者:太空宇宙 更新时间:2023-11-03 16:39:23 25 4
gpt4 key购买 nike

所以我有两个应用程序要在服务器上运行。一个应用程序我想成为“默认”应用程序——也就是说,默认情况下所有 URL 都应该发送给这个应用程序,除了特定路径,我们称之为 /foo:

http://mydomain.com/        -> app1
http://mydomain.com/apples -> app1
http://mydomain.com/foo -> app2

我的两个 Rack 应用程序是这样安装的:

/var
/www
/apps
/app1
app.rb
config.ru
/public
/app2
app.rb
config.ru
/public
app1 -> apps/app1/public
app2 -> apps/app2/public

(app1app2 是各自应用程序公共(public)目录的符号链接(symbolic link))。这是此处描述的子 URI 的乘客设置:http://www.modrails.com/documentation/Users%20guide%20Nginx.html#deploying_rack_to_sub_uri

通过以下配置,我将 /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 指令之后),但我得到了一个 500 和一个无限的内部重定向:

location / {
rewrite ^(.*)$ /app1$1 last;
}

我希望 last 指令可以阻止无限重定向,但我想不会。我的 /foo 重写仍然有效。我仍然可以访问 http://mydomain.com/app1

有什么想法吗?谢谢!

最佳答案

一种方法是创建一个新的 config.ru 文件,将请求分派(dispatch)到正确的应用程序。

# /var/www/apps/config.ru
require './app1/app1'
require './app2/app2'

map ('/') { run App1 }
map ('/foo') { run App2 }

当然,这意味着您的应用必须以能够在同一执行空间中运行的方式制作。

关于ruby - nginx + passenger 上的多个 Rack 应用程序,一个作为 root,另一个不是...配置帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2321314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com