Apache proxypass 无法解析 url 等资源,例如图像和 css
Apache proxypass does not resolve url for resources like images and css
我需要将路径映射到我的 tomcat Web 应用程序。我为此使用了proxypass。
这是 apache2 中的当前配置
<VirtualHost *:80>
ServerName localhost:80
ProxyPass /app http://localhost:8088/ui/
ProxyPassReverse /app http://localhost:8088/ui/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
这是从tomcat得到的HTML但是cssurl形成的是错误的。 http://localhost/app/css/style.css
而不是 url 被映射为 http://localhost/ui/css/style.css
.
我试过使用 rewrite,但没用。
RewriteEngine on
RewriteRule ^/ui/ /app/
我需要找到正确的方法来纠正 URL。
任何帮助将不胜感激!提前致谢。
这取决于您希望显示的 URL 是什么。如果你想让它成为
那么您需要将您的静态内容移动到您的 WAR.ui/ 下。
如果你愿意
那么您应该从 ProxyPass 行中删除尾随 /ui
作为第三种选择,您可以在 tomcat webapp 目录中创建指向 'ui' 的 'ROOT' 符号链接(并从代理中删除 /ui),这将允许您从 tomcat 路径
的根目录提供您的应用程序
经过反复试验,我找到了两种不同的解决方案。
使用 mod_rewrite 并对 proxypass 进行一些更改:
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass /app http://localhost:8080/ui/
ProxyPassReverse /app http://localhost:8080/ui/
#since in java web app the context started with /ui the js src had /ui in the beginning
#this resulted in 404 so I had to rewrite all request to /ui to forward to /app
RewriteEngine on
RewriteRule "^/ui(.+)" "/app" [R,L]
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
在 webapp 文件夹中创建一个 link/shorcut 部署应用程序并将快捷方式命名为 app
在 linux 中,命令是(来自 webapp 文件夹内)ln -s ui app
现在的 apache 配置是:
<VirtualHost *:80>
ProxyPreserveHost On
<Location /app>
ProxyPass ajp://localhost:8019/app/
ProxyPassReverse ajp://localhost:8019/app/
SetOutputFilter proxy-html
ProxyHTMLExtended On
ProxyHTMLURLMap /app /app
RequestHeader unset Accept-Encoding
</Location>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
在第一个解决方案中,重写 mod 导致请求 return 304,然后重定向到更正 url。这就是默认情况下的工作方式。
在第二种解决方案中,由于两个处理程序相同 (/app),因此没有理由进行重定向,并且 URL 已正确映射。
我需要将路径映射到我的 tomcat Web 应用程序。我为此使用了proxypass。 这是 apache2 中的当前配置
<VirtualHost *:80>
ServerName localhost:80
ProxyPass /app http://localhost:8088/ui/
ProxyPassReverse /app http://localhost:8088/ui/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
这是从tomcat得到的HTML但是cssurl形成的是错误的。 http://localhost/app/css/style.css
而不是 url 被映射为 http://localhost/ui/css/style.css
.
我试过使用 rewrite,但没用。
RewriteEngine on
RewriteRule ^/ui/ /app/
我需要找到正确的方法来纠正 URL。 任何帮助将不胜感激!提前致谢。
这取决于您希望显示的 URL 是什么。如果你想让它成为
那么您需要将您的静态内容移动到您的 WAR.ui/ 下。
如果你愿意
那么您应该从 ProxyPass 行中删除尾随 /ui
作为第三种选择,您可以在 tomcat webapp 目录中创建指向 'ui' 的 'ROOT' 符号链接(并从代理中删除 /ui),这将允许您从 tomcat 路径
的根目录提供您的应用程序经过反复试验,我找到了两种不同的解决方案。
使用 mod_rewrite 并对 proxypass 进行一些更改:
<VirtualHost *:80> ProxyPreserveHost On ProxyPass /app http://localhost:8080/ui/ ProxyPassReverse /app http://localhost:8080/ui/ #since in java web app the context started with /ui the js src had /ui in the beginning #this resulted in 404 so I had to rewrite all request to /ui to forward to /app RewriteEngine on RewriteRule "^/ui(.+)" "/app" [R,L] ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
在 webapp 文件夹中创建一个 link/shorcut 部署应用程序并将快捷方式命名为 app 在 linux 中,命令是(来自 webapp 文件夹内)
ln -s ui app
现在的 apache 配置是:
<VirtualHost *:80>
ProxyPreserveHost On
<Location /app>
ProxyPass ajp://localhost:8019/app/
ProxyPassReverse ajp://localhost:8019/app/
SetOutputFilter proxy-html
ProxyHTMLExtended On
ProxyHTMLURLMap /app /app
RequestHeader unset Accept-Encoding
</Location>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
在第一个解决方案中,重写 mod 导致请求 return 304,然后重定向到更正 url。这就是默认情况下的工作方式。
在第二种解决方案中,由于两个处理程序相同 (/app),因此没有理由进行重定向,并且 URL 已正确映射。