kob*_*ame 6 apache perl reverse-proxy plack psgi
这是我的情景:
所以,
https://server1/MyPerlApp
https://server1/MyPerlApp
到http://server2:5000
问题1:这可能吗?(问,因为我不太了解Apache,这不是一个简单的:
ProxyPass /MyPerlApp http://server2:5000/
Run Code Online (Sandbox Code Playgroud)
因为我需要在server1上验证用户身份,并ProxyPass
在验证时设置Only.由于Apache非常灵活,我认为上面的答案是肯定的(但确认和细节非常受欢迎) - 所以这是我的主要具体问题:
perl
服务器2上的应用程序的简单方法?例如,使用Apache 为每个查询mod_rewrite
附加一个user=username
参数,perl
应用应该读取的一些HTTP标头吗?我正在寻找如何避免我的starman/perl应用程序中的身份验证例程,因为:
已经有类似的问题,但是:
[我想你在这里问了四个问题.其中一些重叠.我将尝试尽可能多地回答,然后编辑您的问题以使其更清晰一些.发布您当前的Apache可能会有所帮助,httpd.conf
以便人们可以看到您当前如何处理访问和身份验证.这样,您可以获得有关如何将代理应用程序与Apache实例集成的更好建议.
设置可以处理"网站单点登录"的前端需要一些规划和配置,但值得付出努力.为了使这更容易,您将需要使用Apache-2.4.你可能正在使用这个版本,但Apache已经成为一种主力,因此有些网站比过去更频繁地更新它.Apache 2.4包含mod_session
并且mod_auth_form
可以使用Apache为具有多个后端应用程序服务器(通常在不同的机器端口或插槽上运行)的站点设置基于表单的"Web门户单点登录"类型的工具一组URL/URI.这种使用模式在Apache中非常普遍,2.4版本增加了一些功能,使其更容易实现.
您询问了一种"简单推荐"的方式来执行您所描述的操作.那么,你走在正确的轨道上.Apache httpd
对于这种身份验证/授权和"用户登录"类型的应用程序非常有用 - 以至于它已成为您尝试执行的操作的主要工具.
您询问了如何"将用户信息"传递给后端服务器.您可以像在任何Web应用程序中处理状态一样执行此操作:使用会话和cookie.会话信息包含编码为application/x-www-form-urlencoded
字符串的键/值对.您还可以创建HTTP_SESSION
后端应用程序可以读取的环境值.如果你想在那里使用它们,你的Plack/Starman应用程序必须能够处理会话和cookie(即它必须是"会话感知").看看Plack::Middleware::Session
如何处理这个问题的想法.
当然,设置身份验证mod_auth_form
比Basic
身份验证更复杂.但是使用基于表单的登录可以使用javascript(明智地),客户端应用程序可以在本地存储表单信息以便快速登录; 同样,表单是灵活的,可以收集更多数据并将更多信息传递给用户,Apache可以处理一些复杂性(身份验证后重定向).由于它们只是一个HTML <form>
,因此您可以简单地开始,并在网站增长时使它们更精细.这就是说你可以让Apache Reverse Proxy只Basic Auth
为你的后端提供.
没有看到有关安装的详细信息,我不能说如何/为什么需要mod_rewrite
本身,而是Rewrite
指令可以发挥很好ProxyPass
.当然,在整个站点中,您需要检查身份验证和会话信息,并在必要时将用户重定向到登录表单.使用mod_auth_form
使得这更容易实现,代价是更复杂的配置.至于反面的prosy本身,你会ProxyPass
以正常的方式将请求传递给你的后端:
ProxyPass /app http://[starmanhost]:3000/
Run Code Online (Sandbox Code Playgroud)
然后,您需要配置或调整当前的Apache系统,以便以标准Apache方式Session On
对所涉及的URL进行身份验证(除非整个/
需要身份验证):
<Location /app>
AuthType Basic
Session On
SessionCookieName session path=/
...
require valid-user
</Location>
Run Code Online (Sandbox Code Playgroud)
等作为Apache文档指出,(你会想读mod_session
,mod_proxy
等等),你可以通过周围的会话信息由后端应用.
如果该
SessionHeader
指令用于定义HTTP请求标头,则编码为application/x-www-form-urlencoded字符串的会话将可供应用程序使用.
- 从
mod_session
文档集成会话与外部应用程序.
对于隐私/安全,您可以使用mod_session_crypto
SSL和SSL(如果可能).正如您所指出的,您不需要加密即"端到端"(即从客户端到面向外端的HTTPS 以及反向代理和后端应用程序之间的HTTPS ),但如果外部连接是https://
并且您在服务器上保留会话信息(使用mod_session_dbd
加密存储作为另一个响应),您可以避免在服务器之间共享用户会话信息时固有的明显威胁.最好的部分是您可以逐个添加这些层,而无需广泛修改后端应用程序.这是创建一个可靠的"WebSSO服务器"前端来处理登录的优势.
请注意,我在这里使用WebSSO一词有点松散.严格地说,WebSSO(和SSO)具有更广泛和更具包容性的概念,具有自己的标准轨道和技术(有一些Apache项目专注于此).这就是为什么我倾向于称你正在尝试"网站SSO"的方法.支持各种身份验证,编程语言模块,代理和重写,使得Apache httpd
成为以这种方式处理登录和会话的首选"瑞士军刀/胶带".
这样做的理由是合理的,因为您可以避免额外的登录和混淆用户(及其浏览器).同样,通过将身份验证步骤与应用程序分离并将该任务专用于Apache,您可以使开发人员更轻松地编写后端应用程序.你的问题很普遍.我认为您可以开始尝试一些开始出现在这里的建议,如果遇到问题,您可以跟进针对您的实施的更具体的问题.
获得第一个正常工作的阿帕奇位(Session On
,ProxyPass
,<Location /app>
),并确保正确的信息是越来越创建,存储和前端传递.这对于未来的许多事情都非常有用.Apache大师可以在这里提供帮助.一旦你有被传递到后端的正确会话信息,您可以询问有关如何访问和你的Perl代码使用它的问题starman
和plack
.工具和文档中可能存在缺失或粗略的位,但许多网站希望执行您所描述的内容,因此这些内容将会出现并继续改进.祝好运.
参考
归档时间: |
|
查看次数: |
4352 次 |
最近记录: |