Reputation: 4170
What I want to be able to do is take the following:
http://localhost:10000
http://localhost:11000
http://localhost:12000
and route them respectively like follows:
http://my-app (this is port 10000 traffic)
http://my-app/app (this is port 11000 traffic)
http://my-app/blog (this is port 12000 traffic)
Here is my conf.d file -
<VirtualHost *:80>
ServerName my-app.domain.com
ServerAlias my-app
Redirect / https://my-app.domain.com/
</VirtualHost>
<VirtualHost *:443>
ServerName my-app.domain.com
ServerAlias my-app
Include ssl/default/ssl.cfg
RewriteEngine On
ProxyRequests Off
ProxyPreserveHost On
RemoteIPHeader X-Forwarded-For
RequestHeader set X-FORWARDED-SSL on
RequestHeader set X-FORWARDED_PROTO https
ProxyTimeout 900
TimeOut 900
RewriteRule ^$ / [R]
ProxyPass / http://localhost:10000/
ProxyPassReverse / http://localhost:10000/
RewriteRule ^/app/(.*) http://localhost:11000/$1 [P,L]
ProxyPassReverse /app/ http://localhost:11000
</VirtualHost>
The re-direct is working for the initial port, but not for traffic going to port 11000. I'm sure I'm doing something stupid but I don't know what.
Upvotes: 9
Views: 15094
Reputation: 2900
You need to specify the most "specific" paths first when using proxypass, specify /blog/ /app/ first and then /. If you don't do it this way ProxyPAss / will override the others.
RewriteRule ^$ / [R]
<-- is not happening since in virtualhost only ^/$ will match and ^/$ is already /, so it is not working, if it did it would loop.
Aslo, don't use mod_rewrite since there is no need to proxy with it or at least you are not doing anything that proxypass or proxypassmatch wouldn't do alone, and match slashes when using ProxyPass (if there is a ending slash in source add in target, if there is not, dont, otherwise unexpected behaviour can happen with responses from the backend), and as stated first, specify most specific paths first:
So, Remove mod_rewrite directives entirely and:
ProxyPass /app/ http://localhost:11000/
ProxyPassReverse /app/ http://localhost:11000/
ProxyPass /blog/ http://localhost:12000/
ProxyPassReverse /blog/ http://localhost:12000/
ProxyPass / http://localhost:10000/
ProxyPassReverse / http://localhost:10000/
Upvotes: 12