8

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.

whoisearth
  • 4,080
  • 13
  • 62
  • 130

1 Answers1

11

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/
Daniel Ferradal
  • 2,727
  • 1
  • 13
  • 19
  • 1
    +1 I changed the position of ProxyPass for the most specific paths to appear before "ProxyPass / ...". This solved my problem after hours of browsing through documentation – mwangi Jun 07 '18 at 12:16
  • For those visiting this by any chance, Location interprets paths the opposite way ProxyPass does, so try not to mix them. :) – Daniel Ferradal Apr 18 '23 at 13:14