linux – 透明地在一个地址上提供多个Web应用程序

前端之家收集整理的这篇文章主要介绍了linux – 透明地在一个地址上提供多个Web应用程序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有多个Web应用程序在自己的http服务器上运行,例如端口8080上的 ruby / rails应用程序和8081上的 python / cherrypy应用程序.

是否可以通过单端口地址透明地提供这些?也许通过添加第三个http服务器来转换所有请求(例如http://localhost/app1& http://localhost/app2).我选择的平台是Linux

解决方法

您正在寻找的是“反向代理”.有许多具有此功能的Web服务器,包括Apache httpd,lighttpd和Nginx,以及专为反向代理设计的更多精简Web服务器.

由于Apache最有可能为您提供和/或最容易部署,因此,如果安装了mod_proxy_http,那么包含在Apache配置文件相关部分中的这段代码应该为您提供所需的最小配置.并启用:

# ... [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>

更新:以下是各种服务器的一些链接(有时是密集的):

> Apache mod_proxy
> Nginx HttpProxyModule
> Lighttpd mod_proxy_core

说到智者

还要考虑使用反向代理,后端应用程序将不再接收来自发起请求的客户端的IP的请求.相反,所有请求似乎都来自localhost(127.0.0.1).因此任何与客户端IP相关的逻辑都将停止运行.如果您的应用程序需要此请求元数据,则需要遵循依赖于反向代理HTTP服务器的过程.

在Apache中,mod_proxy自动向请求添加X-Forwarded-For标头,其值是进入Apache的请求的IP地址(或者已转发请求的IP列表,如果您有多个反向代理的链) ).对于Nginx,我相信您可能必须指示服务器发送此类标头(详细信息在上面的链接中).

如果您的后端应用程序关注原始客户端请求中的Host:头,则您需要修改代码以查找(在Apache中)X-Forwarded-Host头.

猜你在找的Linux相关文章