Apache HTTPD: URL resolution for a virtual host with proxies and directory alias
Here's what my environment looks like:
-
REST api (django), running over WSGI (mod_wsgi) on port
http://server:8107/api
-
static files for the API site (i have some admin pages), in a directory, say
/opt/wsgi/staticfiles/subdomain
-
Web application (expressjs), running over pm2/nodejs, on
http://server:3002/
I need to group all this under a virtualhost on port 80 as follows:
- http://subdomain.server/api : the rest API
- http://subdomain.server/api/static : the static files needed by the API site
- http://subdomain.server/ : the web application
Here is the relevant part of the configuration:
<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>
Now, when I try to access a static resource (let's say for example /api/static/js/jquery.js
) i find that the url is not resolved first by the Alias directive, but rather passed to the WSGI app (/api
), which then obviously fires a 404 error.
Re-ordering the directives does not seem to have any effect.
What should I change to ensure HTTPD will serve /api/static
before anything else?
*EDIT*: I run Apache HTTPD 2.2.15 under a CentOS 6.5 distro
Solution 1:
The following conf is what you are looking for :
ProxyPass /api/static !
It tells Apache to not take this path into account when routing stuff to your proxied application, so it can be dealt with other kind of access (here your Alias directive).