mariotepro
mariotepro

Reputation: 139

Two reverse proxies on the same domain, diferent path

I'm trying to configure two different reverse proxies on the same machine with diferent paths. They are set to proxy SonarQube (localhost:9000/sonar) and Jenkins (localhost:8080/jenkins).

I'm trying to achive that calling to http://server.name/sonar, proxifys to http://localhost:9000/sonar.

I have two issues:

What I'm doing wrong?

ProxyRequests Off
ProxyPreserveHost On
<VirtualHost *:80>
  ServerName server.name/sonar
  ProxyPass /sonar http://localhost:9000/sonar
  ProxyPassReverse /sonar http://localhost:9000/sonar
  ErrorLog logs/sonar/error.log
  CustomLog logs/sonar/access.log common
</VirtualHost>

# VIRTUAL HOSTS
####################
<VirtualHost *:80>
  ServerName server.name/jenkins
  ProxyPass /jenkins http://localhost:8080/jenkins
  ProxyPassReverse /jenkins http://localhost:8080/jenkins
  ErrorLog logs/jenkins/error.log
  CustomLog logs/jenkins/access.log common
</VirtualHost>

Upvotes: 0

Views: 406

Answers (1)

Nic3500
Nic3500

Reputation: 8591

The problem is in the way you define your Virtual Hosts. ServerName does not understand /something, only domain names.

Option 1 define domain prefixes.

<VirtualHost *:80>
    ServerName sonar.server.name
    
    ProxyPass /sonar http://localhost:9000/sonar/
    ProxyPassReverse /sonar http://localhost:9000/sonar/
    
    ErrorLog logs/sonar/error.log
    CustomLog logs/sonar/access.log common
</VirtualHost>

<VirtualHost *:80>
    ServerName jenkins.server.name
    
    ProxyPass /jenkins http://localhost:8080/jenkins/
    ProxyPassReverse /jenkins http://localhost:8080/jenkins/
    
    ErrorLog logs/jenkins/error.log
    CustomLog logs/jenkins/access.log common
</VirtualHost>

You would then have to use http://jenkins.server.name/jenkins/ or http://sonar.server.name/sonar/.


Option 2 like option 1, but without the /sonar or /jenkins which are not required anymore.

<VirtualHost *:80>
    ServerName sonar.server.name
    
    ProxyPass / http://localhost:9000/sonar/
    ProxyPassReverse / http://localhost:9000/sonar/
    
    ErrorLog logs/sonar/error.log
    CustomLog logs/sonar/access.log common
</VirtualHost>

<VirtualHost *:80>
    ServerName jenkins.server.name
    
    ProxyPass / http://localhost:8080/jenkins/
    ProxyPassReverse / http://localhost:8080/jenkins/
    
    ErrorLog logs/jenkins/error.log
    CustomLog logs/jenkins/access.log common
</VirtualHost>

Here, use http://jenkins.server.name/ or http://sonar.server.name/.


Option 3 Keep one domain, no prefix and split on the /something

All in one Virtual Host. Like this:

<VirtualHost *:80>
    ServerName server.name
    
    ProxyPass /sonar http://localhost:9000/sonar/
    ProxyPassReverse /sonar http://localhost:9000/sonar/

    ProxyPass /jenkins http://localhost:8080/jenkins/
    ProxyPassReverse /jenkins http://localhost:8080/jenkins/
    
    ErrorLog logs/error.log
    CustomLog logs/access.log common
</VirtualHost>

Sadly doing it this way you loose the separate log files. CustomLog is only applicable in the global server configuration or inside a VirtualHost.

Use http://server.name/jenkins/ or http://server.name/sonar/.


Finally ensure you load module mod_proxy_html along with the other proxy modules.

Upvotes: 2

Related Questions