Apache
a2enmod proxy a2enmod ssl a2enmod proxy_http a2enmod proxy_ajp a2enmod rewrite a2enmod deflate a2enmod headers a2enmod proxy_balancer a2enmod proxy_connect a2enmod proxy_html sudo a2enmod remoteip sudo service apache2 restart
<VirtualHost *:80> ServerName iterator.ir ProxyRequests Off ProxyPreserveHost On RemoteIPHeader X-Forwarded-For <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://localhost:13602/ ProxyPassReverse / http://localhost:13602/ </VirtualHost>
<VirtualHost *:443> SSLEngine on RewriteEngine on SSLCertificateKeyFile /etc/letsencrypt/live/lastlab.pupli.net/privkey.pem SSLCertificateFile /etc/letsencrypt/live/lastlab.pupli.net/cert.pem SSLCertificateChainFile /etc/letsencrypt/live/lastlab.pupli.net/chain.pem ServerName lastlab.pupli.net ProxyRequests Off ProxyPreserveHost On RemoteIPHeader X-Forwarded-For <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://localhost:14001/ ProxyPassReverse / http://localhost:14001/ </VirtualHost>
Spring Boot
set server.use-forward-headers to server.use-forward-headers in Spring Boot application.properties
Java
String ipAddress = request.getHeader("X-FORWARDED-FOR"); if (ipAddress == null) { ipAddress = request.getRemoteAddr(); }
References
https://docs.spring.io/spring-boot/docs/current/reference/html/howto-embedded-servlet-containers.html#howto-use-tomcat-behind-a-proxy-server
https://www.mkyong.com/java/how-to-get-client-ip-address-in-java/
http://serverfault.com/questions/130925/passing-ip-address-with-mod-proxy
https://www.leaseweb.com/labs/2014/12/tutorial-apache-2-4-transparent-reverse-proxy/
http://www.thegeekstuff.com/2011/07/Apache-Virtual-Host/
https://devops.profitbricks.com/tutorials/configure-apache-as-a-reverse-proxy-using-mod_proxy-on-ubuntu/
https://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-proxy-using-mod_proxy-extension