Placing SwiperProxy behind an apache2 reverse proxy


You will need to either run SwiperProxy as its own virtual host at the web root, due to how URL rewriting works - or use endpoints in proxy.conf


Required modules

  • mod_proxy
  • mod_proxy_http
  • mod_rewrite
  • mod_ssl

Example apache2 configuration

<VirtualHost *:80>
	# Define our hostname, and with wildcard prefix for oldstyle DNS
	# rewriting.
	ServerName proxy.example.org
	ServerAlias *.proxy.example.org

	# Who to display as contact in case of errors.
	ServerAdmin hostmaster@example.org

	# Logging.
	ErrorLog ${APACHE_LOG_DIR}/proxy.example.org.error.log

	# Proxy to the Proxy.py HTTP listener port.
	ProxyPass / http://127.0.0.1:8080/ \
	connectiontimeout=1 timeout=10 disablereuse=on retry=1
	ProxyPassReverse / http://127.0.0.1:8080/

	# Rewrite old-style DNS rewrites to the new suffixed method.
	RewriteEngine on
	RewriteCond %{HTTP_HOST} ^(.+)\.proxy\.example\.org$
	RewriteRule ^/(.*)$ http://proxy.example.org/%1/$1 [L]
</VirtualHost>

<VirtualHost *:443>
	# Define our hostname, and with wildcard prefix for old-style DNS
	# rewriting.
	ServerName proxy.example.org
	ServerAlias *.proxy.example.org

	# Who to display as contact in case of errors.
	ServerAdmin hostmaster@example.org

	# Logging.
	ErrorLog ${APACHE_LOG_DIR}/proxy.example.org.error.log

	# Initialize the TLS engine.
	SSLEngine on

	# Define the x.509 certificates.
	SSLCertificateFile /etc/ssl/certs/proxy.example.org.pem
	SSLCertificateKeyFile /etc/ssl/private/proxy.example.org.key
	SSLVerifyClient none

	# Set some TLS environment variables.
	SetEnv force-proxy-request-1.0 1
	SetEnv proxy-nokeepalive 1

	# Proxy to the Proxy.py HTTPS listener port.
	SSLProxyEngine on
	ProxyPreserveHost on
	ProxyPass / https://127.0.0.1:40443/ \
	connectiontimeout=3 timeout=10 disablereuse=on retry=1
	ProxyPassReverse / https://127.0.0.1:40443

	# Rewrite old-style DNS rewrites to the new suffixed method.
	RewriteEngine on
	RewriteCond %{HTTP_HOST} ^(.+)\.proxy\.example\.org$
	RewriteRule ^/(.*)$ https://proxy.example.org/%1/$1 [L]
</VirtualHost>