[英]Modify header cookies for static assets on tomcat and proxied with apache httpd
我们有一个基于 java servlet 的应用程序(非常旧的代码库),它与带有 Apache httpd 2.4.43 和 mod_proxy 的 tomcat 8 一起提供。 应用程序有一些与 Java Web 应用程序捆绑在一起的静态资产(CSS、CS、IMAGES)。
我正在尝试通过添加 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 文档:
当且仅当请求中存在头 MyRequestHeader 时,有条件地在响应上发送 MyHeader。 这对于构建响应某些客户端刺激的标头很有用。 请注意,此示例需要 mod_setenvif 模块的服务。
SetEnvIf MyRequestHeader myvalue HAVE_MyRequestHeader Header set MyHeader "%D %t mytext" env=HAVE_MyRequestHeader
来自重写标志的文档
使用 [E] 或 [env] 标志,您可以设置环境变量的值。 请注意,某些环境变量可能会在规则运行后设置,从而取消您设置的设置。 有关环境变量如何工作的更多详细信息,请参阅环境变量文档。
结合两者,您可以在路径匹配 js 或 css 文件时有条件地修改标题:
RewriteRule ^.*\.(js|css)$ - [E=SET_COOKIE:true]
Header edit Set-Cookie (.*) "$1;HttpOnly;Secure;SameSite=Strict" env=SET_COOKIE
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.