Apache HTTPD:具有代理和目录别名的虚拟主机的 URL 解析

Apache HTTPD:具有代理和目录别名的虚拟主机的 URL 解析

我的环境如下:

  • REST API(django),在端口上运行 WSGI (mod_wsgi)http://server:8107/api
  • 静态文件对于 API 站点(我有一些管理页面),在目录中,例如/opt/wsgi/staticfiles/subdomain
  • Web应用程序(expressjs),在 pm2/nodejs 上运行,http://server:3002/

我需要将所有这些分组到端口 80 上的虚拟主机下,如下所示:

以下是配置的相关部分:

<VirtualHost *:80>

    ServerName subdomain.server
    ServerAlias subdomain.server.local

    Alias /api/static/ /opt/wsgi/staticfiles/subdomain/
    <Directory /opt/wsgi/staticfiles/subdomain/ >
        Order Allow,Deny
        Allow from All
        Options -Indexes
        IndexOptions Charset=UTF-8
    </Directory>

    ProxyPass /api http://127.0.0.1:8107/api
    ProxyPassReverse /api http://127.0.0.1:8107/api

    ProxyPass / http://127.0.0.1:3002/
    ProxyPassReverse / http://127.0.0.1:3002/

</VirtualHost>

现在,当我尝试访问静态资源(比如说/api/static/js/jquery.js)时,我发现 URL 不是首先由 Alias 指令解析的,而是传递给 WSGI 应用程序(/api),然后显然会触发 404 错误。

重新排序指令似乎没有任何效果。

我应该进行哪些更改才能确保 HTTPD 能够/api/static先于其他任何事物提供服务?

*编辑*:我在 CentOS 6.5 发行版下运行 Apache HTTPD 2.2.15

答案1

以下配置正是您正在寻找的:

ProxyPass /api/static !

它告诉 Apache 在将内容路由到你的代理应用程序时不要考虑这条路径,这样就可以处理其他类型的访问(这里是你的 Alias 指令)。

相关内容