这是我的环境的样子:
- REST api (django),通过端口上的 WSGI (mod_wsgi) 运行
http://server:8107/api
- API站点的静态文件(我有一些管理页面),在一个目录中,比如说
/opt/wsgi/staticfiles/subdomain
- Web 应用程序(expressjs),在 pm2/nodejs 上运行,on
http://server:3002/
我需要将所有这些分组在端口 80 上的虚拟主机下,如下所示:
- http://subdomain.server/api : 其余 API
- http://subdomain.server/api/static:API站点需要的静态文件
- http://subdomain.server/:网络应用程序
这是配置的相关部分:
<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
以下 conf 是您正在寻找的内容:
它告诉 Apache 在将内容路由到您的代理应用程序时不要考虑此路径,因此可以处理其他类型的访问(这里是您的 Alias 指令)。