Apache HTTPD-Virtualhost中的AliasMatch和ProxyPass

时间:2018-10-04 11:39:18

标签: apache httpd.conf

我有这样的后端API:

http://192.168.65.203:2022/page/index.jsp

并且在后端运行之前,我将Apache httpd服务器作为第一层。我将端口设置为8090。

现在我想要的图像文件只能从httpd服务器获取,而不能从后端服务器获取。所以我的VirtualHost看起来像这样:

<VirtualHost *:8090>
ProxyPreserveHost On
ProxyRequests off
<Directory "/usr/share/myfile">
    Options Indexes FollowSymLinks
    AllowOverride None
    order allow,deny
    Allow from all
    Require all granted
</Directory>
AliasMatch ^/(.*\.gif|.*\.jpg|.*\.jpeg|.*\.png|.*\.css|.*\.swf)$ /usr/share/myfile/$1
ProxyPass / http://192.168.65.203:2022/
ProxyPassReverse / http://192.168.65.203:2022/

问题:图像仍从后端服务器拾取。如果我禁用proxypass和proxypassreserve,它可以正常工作(可以从httpd服务器加载图像)。

期望:我如何控制是否找到图像(按别名规则),它不应该用于proxypass?还是还有其他方法?

2 个答案:

答案 0 :(得分:0)

将[1]替换为[2],然后尝试:

[1] : 
AliasMatch ^/(.*\.gif|.*\.jpg|.*\.jpeg|.*\.png|.*\.css|.*\.swf)$ /usr/share/myfile/$1

[2] :
ProxyPassMatch ^/(*.gif)$   !
ProxyPassMatch ^/(*.jpg)$   !
ProxyPassMatch ^/(*.jpeg)$  !
ProxyPassMatch ^/(*.png)$   !
ProxyPassMatch ^/(*.css)$   !
ProxyPassMatch ^/(*.swf)$   !

答案 1 :(得分:0)

指令!是必需的。下面是我的问题的解决方案。

<VirtualHost *:8090>
ProxyPreserveHost On
ProxyRequests off
<Directory "/usr/share/myfile">
    Options Indexes FollowSymLinks
    AllowOverride None
    order allow,deny
    Allow from all
    Require all granted
</Directory>
DocumentRoot "/usr/share/myfile"
ProxyPassMatch ^/(.*\.gif|.*\.jpg|.*\.jpeg|.*\.png|.*\.css|.*\.swf)$ !
ProxyPass / http://192.168.65.203:2022/
ProxyPassReverse / http://192.168.65.203:2022/
</VirtualHost>

当请求是图像类型时,它将转到本地文件系统“ / usr / share / myfile”和指令!就像停止代理一样。检查here以获得有关该指令的更多详细信息。