下面的情况可能吗?我只理解基本形式的DNS的警告。
我们有一个API (使用玩构建),我们希望通过一个地址(比如http://api.publicname.com )提供这个API。
但是,我们希望将这个API分成两个播放项目(例如myapione和myapitwo)。然后只使用一个域而使用两个单独的“子文件夹”来访问它们。
所以我一直在寻找地图的可能性比如说..。
http://myinternal.domain:9000到http://api.publicname.com/myapione
..。和另一个玩应用程序
http://myinternal.domain:9001到http://api.publicname.com/myapitwo
我们正在寻找的最终结果如下所示。我们的电话看起来就像..。
http://myinternal.domain:9000/products/123也是http://api.publicname.com/myapione/products/123
http://myinternal.domain:9001/orders/456也是http://api.publicname.com/myapitwo/orders/456
发布于 2014-08-12 14:33:00
目标:
Public URL -> maps to -> internal URL
http://api.publicname.com/myapione -> http://localhost:9000
http://api.publicname.com/myapitwo -> http://localhost:9001正如@applicius所说,它是通过一个“前端”或“原始”HTTP服务器来实现的,该服务器将请求代理到较低级别的“应用程序”或“服务”HTTP服务器。不过,这并不是真正的虚拟主机。
Nginx、Apache等是常见的。我觉得nginx很棒。宙斯( Zeus )或ZXTM是一款能够做到这一点并令人惊叹的商业产品。它被买下了,我想,所以我不确定它是否还能单独使用。
上面的nginx配置,如下所示:
server {
listen 80;
server_name api.publicname.com/myapione;
location /myapione {
proxy_pass http://localhost:9000;
proxy_set_header X-Real-IP $remote_addr;
}
location /myapitwo {
proxy_pass http://localhost:9001;
proxy_set_header X-Real-IP $remote_addr;
}
}这种方法可以让您“缝合”在一起的服务,如您喜欢,并显示为一个外部调用者。例如,为static下的静态文件资产提供服务,并为在/下不匹配的所有内容提供面向前端的HTML服务器。
location /static/ {
alias /app/myapp-pages/static;
}
location / {
proxy_pass http://localhost:8000;
proxy_set_header X-Real-IP $remote_addr;
}在此之后:
Public URL -> maps to -> internal URL
http://api.publicname.com/myapione -> http://localhost:9000
http://api.publicname.com/myapitwo -> http://localhost:9001
http://api.publicname.com/static -> local file assets
http://api.publicname.com/... -> http://localhost:8000这不做任何负载平衡,但您可以将其他服务放在某个主机上:用于负载平衡的端口,然后将nginx指向它。
ZXTM产品很有趣,因为它同时完成了上述代理和负载平衡。(我并不是最赞同它,只是我看到它在生产中使用过,而且令人印象深刻。)
请注意,Play虽然优秀,但更适合于呈现页面并提供更高级别的API,该API结合了对较低HTTP服务的调用。较低级别的HTTP服务可以使用像DropWizard这样的工具包编写,它只关注于提供API而不是页面。
发布于 2014-08-08 20:54:10
Play不管理虚拟主机概念。如果需要,您必须使用HTTP前端服务器: Apache、Nginx、Varnish
例如,在Nginx中:
server {
listen: 80
server_name main.virtual.host alias.virtual.host;
proxy_pass http://localhost:3000;
}https://stackoverflow.com/questions/25211452
复制相似问题