我正在开发一个基于 Spring-MVC 的应用程序,该应用程序在具有反向代理的 Apache 实例后面运行。目前,该设置适用于与数据库相关的操作,但有某些 URL,在调用时,我想向两个服务器发送请求。示例:/onlinestatus/*
。如果用户当前在服务器 1 上,那么根据我们当前的设置,他不知道服务器 2 上的用户。但这是不正确的,因为两个用户都在使用同一个平台。我如何指示 apache 将某些 URL 传递给两个平台。谢谢。
站点启用/000-默认:
<VirtualHost *:443>
ServerName www.domain.de
ProxyRequests off
ProxyPreserveHost On
ProxyPass /nagios !
ProxyReceiveBufferSize 4096
ErrorDocument 503 /error/message.html
ProxyPass /error/ !
ProxyPass /error/message.html !
SSLEngine on
SSLProxyEngine on
SSLCertificateFile /etc/letsencrypt/live/www.domain.de-0002/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.domain.de-0002/private.key
SSLCertificateChainFile /etc/letsencrypt/live/www.domain.de-0002/chain.pem
SSLProxyVerify none
SSLProxyCheckPeerCN off
ProxyPass / https://localhost:8443/
ProxyPassReverse / https://localhost:8443/
<Location / >
SetEnvIf Origin ^(https?://.+\.DOMAIN\.de(?::\d{1,5})?)$ CORS_ALLOW_ORIGIN=$1
Header append Access-Control-Allow-Origin %{CORS_ALLOW_ORIGIN}e env=CORS_ALLOW_ORIGIN
Header merge Vary "Origin"
Order allow,deny
Allow from all
</Location>
ProxyPass / balancer://mycluster/ stickysession=JSESSIONID nofailover=On
<Proxy balancer://mycluster>
BalancerMember https://SERVER_1_IP:8443 route=server1
</Proxy>
ProxyPass /balancer-manager !
ProxyPass / balancer://mycluster/
</VirtualHost>
最佳答案
您不能将一个请求代理到两个服务器。你希望得到什么?两个 HTML 文件? (如果您的群集增长:20 个 HTML 文档怎么办?)它们将如何显示?
如果您的应用程序在集群中运行,并且用户知道其他人在集群上工作是至关重要的,那么您需要在业务层上提供该信息(通过在后端跟踪登录用户 -这可能是数据库或集群通信 channel )
如果您“只是”需要此信息用于系统管理目的 - 例如了解何时停止其中一台集群机器是安全的 - 然后只需使用负载均衡器的状态信息页面即可。
关于Apache : Proxy Balancer, 在两个 channel 上发送某些请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54943969/