我是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/
上收听的响铃应用并将请求路由到我的其他应用中?
答案 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)访问,只是在不同的路径下。