我有多个Web应用程序在自己的http服务器上运行,例如8080端口上的ruby / rails应用程序和8081上的python / cherrypy应用程序。
是否可以通过单个端口地址使这些透明地可用? 也许通过添加转换所有请求的第三个http服务器(例如http:// localhost / app1 & http:// localhost / app2 )。 我select的平台是Linux
你在找什么叫做“反向代理”。 有许多Web服务器都具有这种function,包括Apache httpd,lighttpd和nginx,以及更多精简的专门用于反向代理的Web服务器。
由于Apache是您最容易获得和/或最容易部署的,因此假设您已经安装了mod_proxy_http,那么将这些代码包含在您的Apacheconfiguration文件的相关部分中,将为您提供所需的最小configuration并启用:
# ... [snip] ... <VirtualHost *:80> # ... [snip] ... # This line prevents mod_proxy from acting as a forward proxy # Yes it looks silly, but it's correct for reverse proxy configurations ProxyRequests Off # Rails app on port 8080 ProxyPass /app1 http://localhost:8080 ProxyPassReverse /app1 http://localhost:8080 # CherryPy app on port 8081 ProxyPass /app2 http://localhost:8081 ProxyPassReverse /app2 http://localhost:8081 # ... [snip] ... </VirtualHost>
更新 :这里有一些链接(有时密集)各种服务器的文档:
给智者的话
还要考虑使用反向代理,后端应用程序将不再接收发起请求的客户端的IP请求。 相反,所有的请求将显示来自本地主机(127.0.0.1)。 因此,任何客户端IP相关的逻辑将停止运作。 如果您的应用程序需要此请求元数据,则需要执行取决于您的反向代理HTTP服务器的过程。
在Apache中,mod_proxy会自动将X-Forwarded-For标头添加到请求中,该请求的值是进入Apache的请求的IP地址(或者已经转发请求的IP列表,如果您有一个反向代理链)。 对于Nginx来说,我相信你可能不得不指示服务器发送这样的头文件(细节在上面的链接中)。
如果您的后端应用程序关心来自原始客户端请求的主机:标头,则需要修改该代码以在(在Apache中)查找X-Forwarded-Host标头。
这就是所谓的反向代理。 您可以使用Apache以及其他Web服务器来执行此操作。 还有专用的代理服务器,你也可以使用。
是的,你可以使用mod_jk在APACHE中做这样的事情
详情在这里: http : //www.ruby-forum.com/topic/211503
基本上会发生什么是APACHE被用于您的rubystream量“路由器/代理”。 你不需要任何新的服务器/ IPS。 请记住,您是依靠Apache来将stream量引导到您的应用程序。