在tomcat上修改静态资产的头cookie,并使用apachehttpd代理



我们有一个基于java servlet的应用程序(非常古老的代码库(,它与带有Apache httpd 2.4.43和mod_proxy的tomcat 8一起提供。应用程序有一些静态资产(CSS、CS、IMAGES(与javaweb应用程序捆绑在一起。

我试图通过添加apache规则来修改这些资产的Header cookie,但似乎这不起作用,因为文件不在apache级别内?

<FilesMatch ".(js|css)$">
Header edit Set-Cookie (.*) "$1;HttpOnly;Secure;SameSite=Strict"
</FilesMatch>

我尝试在没有FilesMatch条件的情况下添加规则,它起到了作用,但这不是我需要的。关于如何在Apache级别上完成这项工作的任何想法。以下是httpd.conf 的摘录

<VirtualHost *:443>
DocumentRoot "/apps/httpd/htdocs1"
ServerName www.mydomain.com
ServerAlias mydomain.com
RewriteEngine on
RewriteCond %{REQUEST_URI}    ^/version$
RewriteRule ^/.*$             /version.html  [R=301,L]

RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=302,L]

<Proxy balancer://${HOSTNAME}-http-cluster>
Header add Set-Cookie "MYAPP_SESSION=jacplus.%{BALANCER_WORKER_ROUTE}e;path=/;"
BalancerMember http://myhost-002:31080 min=1 max=1000 loadfactor=1 retry=1 timeout=240 route=myhost-002
BalancerMember http://myhost-003:31080 min=1 max=1000 loadfactor=1 retry=1 timeout=240 route=myhost-003

</Proxy>
ProxyPass / balancer://${HOSTNAME}-http-cluster/ stickysession=MYAPP_SESSION  lbmethod=byrequests
ProxyPassReverse / balancer://${HOSTNAME}-http-cluster/ stickysession=MYAPP_SESSION
<Location /balancer-manager>
SetHandler balancer-manager
Order deny,allow
Deny from all
Allow from 10.25.0.0/16
</Location>
...
</VirtualHost>

来自mod_header:的apache文档

在响应上有条件地发送MyHeader当且仅当标头请求中存在MyRequestHeader。这对响应于一些客户端刺激来构建头。请注意这个例子需要modsetenvif模块的服务。

SetEnvIf MyRequestHeader myvalue HAVE_MyRequestHeader
Header set MyHeader "%D %t mytext" env=HAVE_MyRequestHeader

来自重写标志的文档

使用[E]或[env]标志,可以设置环境的值变量请注意,一些环境变量可能在运行规则,从而取消设置您设置的内容。查看环境有关环境变量如何工作的更多详细信息,请参阅Variables文档。

将两者结合起来,当路径与js或css文件匹配时,您可以有条件地修改头:

RewriteRule ^.*.(js|css)$ - [E=SET_COOKIE:true]
Header edit Set-Cookie (.*) "$1;HttpOnly;Secure;SameSite=Strict" env=SET_COOKIE

最新更新