Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache作为反向代理,身份验证从后向前传递_Apache_Authentication_Proxy_Reverse - Fatal编程技术网

Apache作为反向代理,身份验证从后向前传递

Apache作为反向代理,身份验证从后向前传递,apache,authentication,proxy,reverse,Apache,Authentication,Proxy,Reverse,我们有一个运行在Weblogic 10.3上的应用程序,该应用程序本身提供了身份验证。我们想把Weblogic放在Apache服务器后面。我们的想法是,在Apache服务器上有一些公共内容,应用程序将通过反向代理进行访问。这是非常标准的。问题在于,Apache服务器上的某些内容只有在用户登录应用程序后才能访问。因此,基本上Apache服务器将在不同的URI上提供三种类型的内容: /->将包含公共信息,并由Apache服务器提供 /myApp->将被Apache重定向到后面的weblogic /

我们有一个运行在Weblogic 10.3上的应用程序,该应用程序本身提供了身份验证。我们想把Weblogic放在Apache服务器后面。我们的想法是,在Apache服务器上有一些公共内容,应用程序将通过反向代理进行访问。这是非常标准的。问题在于,Apache服务器上的某些内容只有在用户登录应用程序后才能访问。因此,基本上Apache服务器将在不同的URI上提供三种类型的内容:

  • /->将包含公共信息,并由Apache服务器提供
  • /myApp->将被Apache重定向到后面的weblogic
  • /私有->将包含私有静态信息。仅当用户以前成功登录myApp时,才应访问此功能
我的问题(我是Apache的新手)是这是否可能。我的想法是,应用程序可以在响应上放置一个cookie,指示用户是否已登录应用程序,并且当用户尝试访问/private时,Apache将检查该cookie


有什么想法吗?

公共信息没有问题,很简单。使用
ProxyPass
ProxyPassMatch
将代理“/myApp”反向到内部Weblogic服务器也很简单。您可能需要使用几个其他选项来确保正确设置了代理主机名和cookie域。但是在“/private”中设置受静态保护的信息格式将有点棘手

1)您可以使用mod_rewrite检查myApp设置的cookie是否存在,如下所示:

RewriteCond %{HTTP_COOKIE} !the_name_of_the_auth_cookie
RewriteRule ^private - [F,L]
通过类似这样的方式检查cookie的问题在于,无法验证cookie实际上是有效会话。人们可以任意创建一个具有该名称的cookie,并且能够以/私有的方式访问数据


2)您可以对其进行设置,以便访问“/private”中的任何内容,将请求重写为php脚本或可以检查cookie以确保其为有效会话cookie的内容,然后为请求的页面提供服务。比如:

RewriteRule ^private/(.*)$ /cookie_check.php?file=$1  [L]
因此,当有人访问时,例如,“/private/reports.pdf”,它会在内部重定向到“/cookie\u check.php?file=reports.pdf”,并且由这个php脚本访问它需要的任何内容,以验证/myApp设置的cookie。如果cookie是有效会话,则读取“reports.pdf”文件并将其发送到浏览器,否则返回禁止

我认为这是更好的处理方式


3)如果您无法运行php或任何其他脚本,或者cookie无法验证(如使用数据库查找会话id或类似内容),那么您必须从WebLogic内部进行代理。这与通过“cookie_check.php”访问“/private”的基本思想差不多,只是它是WebLogic服务器上的一个应用程序。就像/myApp一样,您需要设置一个反向代理来访问它,然后此应用程序将获得请求(已从“/private/some_文件”内部重写),检查cookie的有效性,读取APACHE服务器上的“some_文件”,然后将其发送到浏览器,或者发送禁止。这是总体思路:

ProxyPass /CheckCookie http://internal_server/check_cookie_app

RewriteCond %{REMOTE_HOST} !internal_server
RewriteRule ^private/(.*)$ /CheckCookie?file=$1 [L]

此条件会通过/CheckCookie应用程序重新路由并非源自“内部_服务器”的所有对“/private”的请求,并且由于该应用程序在“内部_服务器”上运行,因此它可以访问“/private”中的文件。这是一种迂回的方法,但如果只能在WebLogic服务器上检查/myApp发布的会话cookie的有效性,则必须来回重新路由请求或类似的操作。

公共信息没有问题,这很简单。使用
ProxyPass
ProxyPassMatch
将代理“/myApp”反向到内部Weblogic服务器也很简单。您可能需要使用几个其他选项来确保正确设置了代理主机名和cookie域。但是在“/private”中设置受静态保护的信息格式将有点棘手

1)您可以使用mod_rewrite检查myApp设置的cookie是否存在,如下所示:

RewriteCond %{HTTP_COOKIE} !the_name_of_the_auth_cookie
RewriteRule ^private - [F,L]
通过类似这样的方式检查cookie的问题在于,无法验证cookie实际上是有效会话。人们可以任意创建一个具有该名称的cookie,并且能够以/私有的方式访问数据


2)您可以对其进行设置,以便访问“/private”中的任何内容,将请求重写为php脚本或可以检查cookie以确保其为有效会话cookie的内容,然后为请求的页面提供服务。比如:

RewriteRule ^private/(.*)$ /cookie_check.php?file=$1  [L]
因此,当有人访问时,例如,“/private/reports.pdf”,它会在内部重定向到“/cookie\u check.php?file=reports.pdf”,并且由这个php脚本访问它需要的任何内容,以验证/myApp设置的cookie。如果cookie是有效会话,则读取“reports.pdf”文件并将其发送到浏览器,否则返回禁止

我认为这是更好的处理方式


3)如果您无法运行php或任何其他脚本,或者cookie无法验证(如使用数据库查找会话id或类似内容),那么您必须从WebLogic内部进行代理。这与通过“cookie_check.php”访问“/private”的基本思想差不多,只是它是WebLogic服务器上的一个应用程序。就像/myApp一样,您需要设置一个反向代理来访问它,然后此应用程序将获得请求(已从“/private/some_文件”内部重写)检查cookie的va