通过PHP的Apache反向代理身份验证

通过PHP的Apache反向代理身份验证,php,apache,authentication,reverse-proxy,Php,Apache,Authentication,Reverse Proxy,我安装了两台apache服务器。一个面向公众,另一个在防火墙后面。防火墙后面的一个用于提供内容(视频、图片等)。我已经设置了一个反向代理,这样任何请求都可以进入防火墙内的服务器。看我的错 我的网站使用PHP和MySQL对用户进行身份验证。身份验证对/content目录中的任何内容都不起作用,因为apache会立即将请求发送到内部服务器。理想情况下,我希望在面向公众的服务器上对用户进行身份验证,并从防火墙内的内容服务器向他们提供内容 有没有办法只允许经过身份验证的用户访问/content目录?虽然

我安装了两台apache服务器。一个面向公众,另一个在防火墙后面。防火墙后面的一个用于提供内容(视频、图片等)。我已经设置了一个反向代理,这样任何请求都可以进入防火墙内的服务器。看我的错

我的网站使用PHP和MySQL对用户进行身份验证。身份验证对/content目录中的任何内容都不起作用,因为apache会立即将请求发送到内部服务器。理想情况下,我希望在面向公众的服务器上对用户进行身份验证,并从防火墙内的内容服务器向他们提供内容

有没有办法只允许经过身份验证的用户访问/content目录?

虽然这个答案可能不代表“最佳实践”,但它确实很有效

我们使用带有apache的后端服务器作为某种“文件服务器”——为用户上传到其帐户的私有文件和图像提供服务。以下是它的工作原理:

设置mod_rewrite以按照您的意愿处理URL。例如:

RewriteRule /content/(.*)   /ServeContent.php?FileName=$1
脚本ServeContent.php将执行以下操作:

1. Validate input

2. Authenticate user based on cookie or session data

3. Make a URL with $_GET['FileName'] and the IP of the backend server
   http://192.168.1.30/content/somefile.jpg

4. Set appropriate headers for the file type
   header('Content-type: image/jpeg')

5. readfile($URL)    
这种方法要求在PHP中启用fopen包装器
readfile
不会将内容存储在内存中,因此实际上不会占用太多内存。主要缺点之一是,在请求期间(可能需要很长时间),您将暂停apache/php进程。但实际上,除非您运行的是高流量站点,否则您可能不会有问题


如果你是,很可能有更好的解决方案。但这对于我们在各种应用程序上处理大型文件非常有效。

唉,我希望这能奏效。我的content server上的某些“内容”是HTML页面的文件夹,其中包含指向其他页面和图像的相对链接。是否确实存在问题?在发回文件时,您不能检测或确定正确的内容类型吗?再次查看您的答案,看起来这会起作用。与使用.htaccess和cookie相比,这种方法有什么优势吗?使用上面提到的cookie方法,您依赖于一个共享秘密。一旦任何人拥有cookie名称,他们就可以访问。通过上述方法,您可以很好地控制谁可以访问什么。这真的取决于你--你想要安全的还是不显眼的?