代码之家  ›  专栏  ›  技术社区  ›  Bo Jeanes

apache2-使用basicauth针对某个位置授权用户,但仅限于本地子网之外的用户

  •  1
  • Bo Jeanes  · 技术社区  · 15 年前

    在我的Apache2配置中,我有一个 VirtualHost 看起来像这样:

    <VirtualHost *:80>
      ServerName sub.domain.com
    
      # username:password sent on to endpoint
      RequestHeader set Authorization "Basic dXNlcm5hbWU6cGFzc3dvcmQ=="
    
      ProxyPass        /xyz http://192.168.1.253:8080/endpoint
      ProxyPassReverse /xyz http://192.168.1.253:8080/endpoint
    
      <Location /xyz>
        # This needs to let users through under the following circumstances
        #   * They are in 192.168.1.0/24
        #   * They have a valid user in a htpasswd file
    
        # So what goes here?
      </Location>
    </VirtualHost>
    

    我使用虚拟主机作为网络上另一个服务器(我将称之为端点)的反向代理。

    我正试图找出一种配置,允许网络内的用户浏览到 sub.domain.com 自动为端点提供服务。但是,应该提示网络之外的用户提供凭据

    端点需要一个我使用requestheader(我想要)隐藏的密码。外部用户的密码应该由不同的提示,并且需要是basicauth,从 htpasswd 文件。

    3 回复  |  直到 13 年前
        1
  •  6
  •   David Z    15 年前
    <Location /xyz>
      # This needs to let users through under the following circumstances
      #   * They are in 192.168.1.0/24
      #   * They have a valid user in a htpasswd file
    

    右出 http://httpd.apache.org/docs/2.2/mod/core.html#satisfy :

      Require valid-user
      Order allow,deny
      Allow from 192.168.1
      Satisfy any
    

    当然,您还需要包含authuserfile或任何指令

      AuthType basic
      AuthName "yadayadayada"
      AuthUserFile /foo/bar/blah/.htpasswd
    </Location>
    
        2
  •  0
  •   Dana the Sane    15 年前

    您可以创建两个vhost,一个用于监听外部接口,另一个用于本地接口。身份验证设置将在前者中。

        3
  •  0
  •   Steve Moyer    15 年前

    我认为david已经很好地介绍了apache2配置,但是使用split dns为您的内部和外部用户提供不同的服务也是很常见的。实际上,您的内部用户没有理由向您的代理发出请求,因为他们(表面上)可以直接访问“端点”。

    在某些情况下,如果您的内部用户正在连接到您的某个公共IP地址,则可能会导致路由延迟和拥塞。最初,我很喜欢为两个DNS服务器提供单独的硬件,但是最近我转向使用绑定“视图”为我的两个用户类提供不同的区域。