I have a node.js application that I had been using to server static assets. In my express server I had the following:
app.use(require('serve-static')(__dirname + '/../client'));
Which would serve files located in client/lib, client/styles, client/js
What I want to do is have Apache host all the static assets and reduce the node server to be exclusively my websocket and API server. What I am looking for are suggestions on how to properly structure my apache virtual host to accomplish something like this????
What I have so far does not work, it will get in to a request storm where once it gets all the files it tries to get all the files again but with a ?_=TIMESTAMP appended to the end of the URL:
127.0.0.1 - - [01/Sep/2015:16:42:45 -0400] "GET /components/angular/angular.min.js HTTP/1.1" 200
<LOAD THE REST OF THE FILES/>
127.0.0.1 - - [01/Sep/2015:16:42:45 -0400] "GET /components/angular/angular.min.js?_=1441140163787 HTTP/1.1" 200
Here is what I currently have:
<VirtualHost *:8080>
DocumentRoot /path/to/static/files/client/
# Ignore these paths as they are paths to static assets
ProxyPass /lib !
Alias /lib /path/to/static/files/client/lib
ProxyPass /js !
Alias /js /path/to/static/files/client/js
ProxyPass /styles !
Alias /styles /path/to/static/files/client/styles
# Don't try to get index.html from the proxy
ProxyPass /index.html !
<Directory /path/to/static/files/client/>
DirectoryIndex index.html
Require all granted
</Directory>
#Options +FollowSymLinks
#IndexIgnore */*
RewriteEngine on
## From http://stackoverflow.com/questions/27526281/websockets-and-apache-proxy-how-to-configure-mod-proxy-wstunnel
RewriteCond %{REQUEST_URI} ^/socket.io [NC]
RewriteCond %{QUERY_STRING} transport=websocket [NC]
RewriteRule /(.*) ws://localhost:3000/$1 [P,L]
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>