Updated on 28 Dec 2018
Many of the applications that I install are accessed via the web thru a port other than port 80. It means accessing it might look something like this:
What would be nice is if I could have some sort of redirect like this:
- http://localhost/jenkins -> http://localhost:8080
So that I can navigate to the web-application in a way that makes sense for me, and apache somehow transforms it into what the application needs.
There are several modules that need to be enabled.
sudo a2enmod proxy sudo a2enmod proxy_http sudo a2enmod headers
And once they have been enabled, we will need to restart apache.
sudo systemctl restart apache2
Modify site config file
Towards the end of the
<VirtualHost *:80> tag, add the following lines.
ProxyRequests Off ProxyPreserveHost On AllowEncodedSlashes NoDecode # if I have :8080/jenkins/ (forward slash after jenkins) then I get a 403 error # about not valid breadcrumb. ProxyPass /jenkins http://localhost:8080/jenkins nocanon ProxyPassReverse /jenkins http://localhost:8080/jenkins
Being careful not to add trailing spaces otherwise you’ll get the errors described above.
This means that when you navigate to
https://servername/jenkins Apache will forward the request to
http://localhost:8080/jenkins where you guessed it, it will be picked up by the Jenkins service.
Important: In order for this to work, the prefix must be the same on Apache and Jenkins. I.e.
- ProxyPass /jenkins http://localhost:8080/jenkins (works)
- ProxyPass /jenkins http://localhost:8080 (will not work)
- ProxyPass / http://localhost:8080/jenkins (will not work)
- ProxyPass / http://localhost:8080 (works)
Since we are using the jenkins prefix, we must add that to the jenkins configuration file.
The default jenkins setup will already have this predefined in the file
NAME=jenkins ... PREFIX=/$NAME
All we need to do is add the prefix to
JENKINS_ARGS as shown below.
JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --prefix=$PREFIX"
Restart the services
Modifications to Jenkins and Apache2 require that they both need to be restarted.
sudo systemctl restart jenkins sudo systemctl restart apache2
Now we can navigate to the following url
And we will see that we can access Jenkins using port forwarding.