如何在同一台服务器上运行多个Ring应用程序?

时间:2013-03-31 17:58:27

标签: clojure jetty middleware ring

我是Ring的新手(以及一般的Clojure服务器端编程)。我有一个基于铃声的应用程序,在“开发模式”下运行良好,即它可以监听localhost:3000并且它会做出适当的响应。作为部署此应用的一部分,我想将应用的基本网址更改为myserver.com/analytics/v1,以便以前转到localhost:3000/foo的请求现在转到myserver.com/analytics/v1/foo }。

我想我在这里有两个密切相关的问题:我如何告诉Ring / Jetty只收听某个不是服务器根URL的URL?我如何设置它以便我可以添加另一个应用程序(例如,myserver.com/analytics/v2)而无需第一个应用程序的停机时间?我是否需要编写另一个将在myserver.com/上收听的响铃应用并将请求路由到我的其他应用中?

2 个答案:

答案 0 :(得分:5)

我目前正在处理的方法是让每个Ring应用程序在其自己的嵌入式Jetty实例中运行,每个应用程序都在自己的端口上进行侦听,例如:8080 en 8085。 在服务器上,我在外部阻止这些端口,因此只有localhost可以访问它们。

然后我设置Nginx以根据子域名选择合适的应用:

有更多高级设置可能,但对我来说这是配置最少的设置。

这是我的nginx.conf。如果您想了解更多配置详情,请告诉我们。

server {    listen     80;
    server_name     twitter.michielborkent.nl;
    access_log     /var/log/twitter-service.log;

    location / {  
        proxy_pass http://localhost:8080;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        Host $http_host;
    }
}

server {    listen     80;
    server_name     tictactoe.michielborkent.nl;
    access_log     /var/log/tictactoe.log;

    location / {
        proxy_pass http://localhost:8085;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        Host $http_host;
    }
}

答案 1 :(得分:2)

以下是我如何调整@Michiel Borkent的nginx.conf以满足我的需求:

server {
    listen 80;
    server_name www.myserver.com;

    location /analytics/v1/ {
        proxy_pass http://localhost:3001/;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
    }

    location /trac/ {
        proxy_pass http://localhost:3002/trac/;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
    }
}

在这种情况下,我可以设置我的Ring应用程序在端口3001上提供服务;我在端口3002上有Trac服务,或者我可以有另一个Ring应用程序或其他任何东西。这两个应用程序都可以从www.myserver.com(端口80)访问,只是在不同的路径下。