我的环境如下:
- REST API(django),在端口上运行 WSGI (mod_wsgi)
http://server:8107/api
- 静态文件对于 API 站点(我有一些管理页面),在目录中,例如
/opt/wsgi/staticfiles/subdomain
- Web应用程序(expressjs),在 pm2/nodejs 上运行,
http://server:3002/
我需要将所有这些分组到端口 80 上的虚拟主机下,如下所示:
- http://subdomain.server/api:其余 API
- http://subdomain.server/api/static:API站点所需的静态文件
- http://子域名.服务器/:Web 应用程序
以下是配置的相关部分:
<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 指令)。