【问题标题】:Apache reverse proxy authentication via PHP通过 PHP 进行 Apache 反向代理身份验证
【发布时间】:2010-12-11 10:00:29
【问题描述】:

我设置了两台 apache 服务器。一个面向公众,另一个位于防火墙后面。防火墙后面的一个用于提供内容(视频、图片等)。我已经设置了一个反向代理,以便对http://mysite.com/content/ 的任何请求实际上都会发送到我的防火墙内的服务器。查看我的服务器故障question

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

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

【问题讨论】:

    标签: php apache authentication reverse-proxy


    【解决方案1】:

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

    我们使用带有 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-wrappers。 readfile 不会将内容存储在内存中,所以这确实不会占用太多内存。主要缺点之一是您将在请求期间(可能很长时间)阻止 apache/php 进程。但实际上,除非您运行的是高流量网站,否则您可能不会遇到问题。

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

    【讨论】:

    • 叹息,我希望这会奏效。我的内容服务器上的一些“内容”是 HTML 页面的文件夹,其中包含指向其他页面和图像的相对链接。
    • 你确定有问题吗?发回文件时不能只检测或确定正确的内容类型吗?
    • 再次查看您的答案,看起来这可行。这种方法比使用 .htaccess 和 cookie 有什么优势吗? willmaster.com/blog/contentprotection/htaccess-cookie.php
    • 使用提到的 cookie 方法,您依赖于共享密钥。一旦任何人有了 cookie 名称,他们就可以访问。通过上述方法,您可以精细控制谁可以访问什么。这完全取决于您——您想要它安全还是仅仅晦涩
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 2011-09-09
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    相关资源
    最近更新 更多