2

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

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

4

2 回答 2

5

我目前处理这个问题的方式是让每个 Ring 应用程序在它自己的嵌入式 Jetty 实例中运行,每个都在自己的端口上侦听,例如:8080 和 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;
    }
}
于 2013-03-31T18:22:39.560 回答
2

以下是我如何调整@Michiel Borkentnginx.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 上服务;我有 Trac 在端口 3002 上提供服务,或者我可以有另一个 Ring 应用程序或其他什么。这两个应用程序都可以从 www.myserver.com(端口 80)访问,只是在不同的路径下。

于 2013-04-03T14:13:57.747 回答