whoisearth
whoisearth

Reputation: 4170

httpd - reverse proxy on multiple ports

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

Answers (1)

Daniel Ferradal
Daniel Ferradal

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

Related Questions