HTTP reverse proxying
The ultimate goal is to reverse proxy SSL secured web site over Apache installed on Ubuntu server. This means that we are using Apache to serve content from a remote web site in a way that browser thinks its getting the data from our Apache and the remote web site thinks our Apache is a browser accessing the site data.
Let's start with reverse proxying without SSL. These instructions work on a fresh Ubuntu 10.04 installation (I'm using an image from Amazon Web Services). First install Apache.
$ sudo apt-get install apache2
Install mod_proxy_html on Apache.
$ sudo apt-get install libapache2-mod-proxy-html
It seems that this command also enables the mod_proxy_html automatically:
$ ls /etc/apache2/mods-enabled/proxy_html.* /etc/apache2/mods-enabled/proxy_html.conf /etc/apache2/mods-enabled/proxy_html.load
Enable the modules needed by proxying.
$ sudo a2enmod proxy_http $ sudo a2enmod headers
Disable default site that comes with Apache installation.
sudo a2dissite 000-default
Create reverse proxy configuration. Add the following to file /etc/apache2/sites-available/reverseproxy
<VirtualHost *:80> ServerAdmin webmaster@localhost ErrorLog /var/log/apache2/reverseproxy_error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel info CustomLog /var/log/apache2/access.log combined # We're not an open proxy ProxyRequests off # Proxying is available for anyone <Proxy *> Order deny,allow Allow from all </Proxy> # The site we're proxying through http://oursite.fi/proxytest/ ProxyPass /proxytest/ http://www.iltalehti.fi/ ProxyPassReverse /proxytest/ http://www.iltalehti.fi/ # Use mod_proxy_html to rewrite URLs SetOutputFilter proxy-html ProxyHTMLURLMap http://www.iltalehti.fi /proxytest ProxyHTMLURLMap / /proxytest/ # Disable compressed communication between Apache and target server RequestHeader unset Accept-Encoding </VirtualHost>Enable our reverse proxy site and restart Apache
$ sudo a2ensite reverseproxy $ sudo service apache2 restartNow you should be able to see Iltalehti (http://www.iltalehti.fi) through your site under /proxytest.
Securing proxied connection with SSL (HTTPS reverse proxying)
Create self signed certificates. These commands are explained on page https://help.ubuntu.com/10.04/serverguide/C/certificates-and-security.html
$ openssl genrsa -des3 -out server.key 1024 $ openssl rsa -in server.key -out server.key.insecure $ mv server.key server.key.secure $ mv server.key.insecure server.key $ openssl req -new -key server.key -out server.csr $ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt $ sudo cp server.crt /etc/ssl/certs $ sudo cp server.key /etc/ssl/private
Disable plain HTTP based reverse proxy.
$ sudo a2dissite reverseproxy
Add the following to file /etc/apache2/sites-available/reverseproxy-ssl.
<VirtualHost *:443> ServerAdmin webmaster@localhost ErrorLog /var/log/apache2/reverseproxy-ssl_error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel info CustomLog /var/log/apache2/access-ssl.log combined # We're not an open proxy ProxyRequests off # Proxying is available for anyone <Proxy *> Order deny,allow Allow from all </Proxy> # The site we're proxying through http://oursite.fi/proxytest/ ProxyPass /proxytest/ https://www.veikkaus.fi/ ProxyPassReverse /proxytest/ https://www.veikkaus.fi/ # Use mod_proxy_html to rewrite URLs SetOutputFilter proxy-html ProxyHTMLURLMap https://www.veikkaus.fi:443 /proxytest ProxyHTMLURLMap https://www.veikkaus.fi /proxytest ProxyHTMLURLMap / /proxytest/ # Disable compressed communication between Apache and target server RequestHeader unset Accept-Encoding # SSL Engine Switch: # Enable/Disable SSL for this virtual host. SSLEngine on # Allows the proxying of an SSL connection SSLProxyEngine On # A self-signed certificate SSLCertificateFile /etc/ssl/certs/server.crt SSLCertificateKeyFile /etc/ssl/private/server.key </VirtualHost>Enable HTTPS based reverse proxy.
$ sudo a2enmod ssl $ sudo a2ensite reverseproxy-ssl $ sudo service apache2 restart
Now you should be able to see Veikkaus (https://www.veikkaus.fi) through your site under path /proxytest.
Hi. Thank you very much for the guidelines to setup Apache reverse proxy SSL. I followed your guidelines step-by-step without any problems. But when i do the testing for my Zimbra and xwiki web applications, they open with without an expected structured layout. But when i test it using the sites you had used in your guidelines, the layout is website layouts are okay as expected. What would be causing this? And how can i go about fixing this problem?
VastaaPoistaSorry man, forgot to reply. Check what HTML your site is replying. I guess the problem is with the URL rewriting. Look for lines with www.veikkaus.fi string and change them according to your setup.
VastaaPoistaYour nice work is very attractive and impressive.
VastaaPoistaFileCrop UK proxy
Thank you, it works on my server. Great tutorial!
VastaaPoista