Thanks again Igor. Yesterday I have in fact posted a summary, it is available at this URL:
http://mail-archives.apache.org/mod_mbox/httpd-users/201503.mbox/browser On Mon, Mar 9, 2015 at 10:42 PM, Igor Cicimov <icici...@gmail.com> wrote: > > On 10/03/2015 4:13 AM, "A M" <amm.pr...@gmail.com> wrote: > > > > > > Hello, > > > > thanks to the comments of Igor, I was able to overcome the HTTPS > redirection > > to the initial page of the right backend server, with one modification: > > > > Igor's recipe included advice on how to set up the correct VirtualHost > blocks > > using the wildcard *.example.com key/cert pair. This worked. He also > suggested > > to use the following redirection method: > > > > > > <VirtualHost *:80> > > ServerName apachefrontend.example.com > > ServerAlias appserver1.example.com appserver2.example.com > > RedirectMatch ^/(.*) https://%{HTTP_HOST}/$1 > > </VirtualHost> > > > > This did not work, when trying to reach the server, the request is > > being redirected to https://%25{http_host}/.. > > > > Instead, I have achieved the goal with the help of RewriteEngine: > > > > <VirtualHost *:80> > > RewriteEngine On > > RewriteCond %{HTTPS} off > > RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} > > </VirtualHost> > > > > > > This change, together with the correct VirtualHost blocks had brought > > me finally to the front page of the backend servers via HTTPS. However, > when > > trying to navigate inside them, I am being forwarded to: > > > > http://appserverX.backend/Something > > > > instead of > > > > https://apachefrontend.example.com/Something > > > > That is correct. Now I suggest we stop here and you tell us what exactly > you want to achieve. You need reverse proxy for multiple backend servers > (domains) running different apps or you just need frontend load balancer > for backend servers running same apps? Or you are just testing some > scenarios and learning apache? > > > and the site becomes unusable. I assume that to conclude the rev. proxy > > configuration task I have to add further rewrite rules. Could someone > > comment on this? The current (working) httpd.conf is quoted below. > > > > Thanks ahead! > > > > Andy. > > > > > > .... > > # Proxy-related load pack > > LoadModule headers_module modules/mod_headers.so > > LoadFile /usr/lib64/libxml2.so > > LoadModule proxy_module modules/mod_proxy.so > > LoadModule proxy_http_module modules/mod_proxy_http.so > > LoadModule proxy_html_module modules/mod_proxy_html.so > > LoadModule proxy_balancer_module modules/mod_proxy_balancer.so > > LoadModule proxy_ajp_module modules/mod_proxy_ajp.so > > #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so > > #LoadModule proxy_connect_module modules/mod_proxy_connect.so > > > > # General SSL options transferred from ssl.conf for better viewing > > Listen 443 > > SSLPassPhraseDialog builtin > > SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000) > > SSLSessionCacheTimeout 300 > > SSLMutex default > > SSLRandomSeed startup file:/dev/urandom 256 > > SSLRandomSeed connect builtin > > SSLCryptoDevice builtin > > > > NameVirtualHost *:80 > > NameVirtualHost *:443 > > > > # Decide which virtual host to address and enforce usage of port 443 on > the right proxy host > > <VirtualHost *:80> > > RewriteEngine On > > RewriteCond %{HTTPS} off > > RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} > > </VirtualHost> > > > > > > # Our "Mother host", apachefrontend.example.com, is still available for > hosting of some web site > > <VirtualHost *:443> > > ServerName apachefrontend.example.com > > > > ErrorLog logs/ssl_error_log > > TransferLog logs/ssl_access_log > > LogLevel warn > > SSLEngine on > > SSLProtocol all -SSLv2 -SSLv3 > > SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW > > SSLCertificateFile /etc/pki/tls/certs/localhost.crt > > SSLCertificateKeyFile /etc/pki/tls/private/localhost.key > > <Files ~ "\.(cgi|shtml|phtml|php3?)$"> > > SSLOptions +StdEnvVars > > </Files> > > <Directory "/var/www/cgi-bin"> > > SSLOptions +StdEnvVars > > </Directory> > > SetEnvIf User-Agent ".*MSIE.*" \ > > nokeepalive ssl-unclean-shutdown \ > > downgrade-1.0 force-response-1.0 > > CustomLog logs/ssl_request_log \ > > "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" > > </VirtualHost> > > > > > > # Appserver 1 > > > > <VirtualHost *:443> > > ServerName appserver1.example.com > > ErrorLog logs/ssl_error_log > > TransferLog logs/ssl_access_log > > LogLevel warn > > SSLEngine on > > SSLProtocol all -SSLv2 -SSLv3 > > SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW > > SSLCertificateFile /etc/pki/tls/certs/localhost.crt > > SSLCertificateKeyFile /etc/pki/tls/private/localhost.key > > > > ProxyRequests Off > > ProxyPass / http://appserver1.backend/ > > ProxyPassReverse / http://appserver1.backend/ > > > > </VirtualHost> > > > > > > # Appserver 2 > > > > <VirtualHost *:443> > > ServerName appserver2.example.com > > ErrorLog logs/ssl_error_log > > TransferLog logs/ssl_access_log > > LogLevel warn > > SSLEngine on > > SSLProtocol all -SSLv2 -SSLv3 > > SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW > > SSLCertificateFile /etc/pki/tls/certs/localhost.crt > > SSLCertificateKeyFile /etc/pki/tls/private/localhost.key > > > > ProxyRequests Off > > ProxyPass / http://appserver2.backend/ > > ProxyPassReverse / http://appserver2.backend/ > > > > </VirtualHost> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Mon, Mar 9, 2015 at 10:55 AM, Igor Cicimov <icici...@gmail.com> > wrote: > >> > >> > >> On 09/03/2015 8:01 PM, "A M" <amm.pr...@gmail.com> wrote: > >> > > >> > > >> > Hello Jeff, > >> > > >> > this is what happens: > >> > > >> > [root@www httpd]# service httpd start > >> > Starting httpd: [Mon Mar 09 09:51:53 2015] [warn] module > headers_module is already loaded, skipping > >> > [Mon Mar 09 09:51:53 2015] [warn] module proxy_html_module is already > loaded, skipping > >> > [Mon Mar 09 09:51:53 2015] [warn] module ssl_module is already > loaded, skipping > >> > [Mon Mar 09 09:51:53 2015] [warn] _default_ VirtualHost overlap on > port 443, the first has precedence > >> > [Mon Mar 09 09:51:53 2015] [warn] _default_ VirtualHost overlap on > port 443, the first has precedence > >> > [FAILED] > >> > > >> > >> First looks like you have same configuration included twice somewhere. > >> > >> > And then there is only one line in the error log: > >> > > >> > [Mon Mar 09 09:51:53 2015] [error] Server should be SSL-aware but has > no certificate configured [Hint: SSLCertificateFile] ((null):0) > >> > > >> > "apachectl configtest" gives me the same infos as "apachectl -S". > >> > > >> > Following the last advice of Igor, I assume that I'll have to > generate two other certificates, > >> > one for appserver1.example.com, and another - for > appserver2.example.com, and then > >> > >> Or use the same certificate if you were clever enough to generate a > wild card one ie *.example.com since you need to front multiple > subdomains of the same domain ;-) > >> > >> > add a reference to them in the VirtualHost *443 definition for these > two aliased servers. > >> > >> Correct, also please refer to the ssl vhost section on the apache web > site so you fully understand the subject. It's also recommended you make > your self familiar with SNI. > >> > >> > Will try it later in the day.. > >> > > >> > Greetings - Andy. > >> > > >> > > >> > > >> > > >> > > >> > > >> > On Mon, Mar 9, 2015 at 5:22 AM, jeffmonte101 . < > jeffmonte...@gmail.com> wrote: > >> >> > >> >> Andy, > >> >> > >> >> What do you see in error logs and proxy logs when you try to bring > up the web server? > >> >> > >> >> > >> >> > >> >> On Sun, Mar 8, 2015 at 5:11 PM, A M <amm.pr...@gmail.com> wrote: > >> >>> > >> >>> > >> >>> Hello Igor, and many thanks for your comment! > >> >>> > >> >>> I have followed your advice, but now the server refuses to start at > all. > >> >>> > >> >>> So now I have in httpd.conf: > >> >>> > >> >>> ------------------------------------------------ > >> >>> NameVirtualHost *:80 > >> >>> > >> >>> <VirtualHost *:80> > >> >>> ServerName apachefrontend.example.com > >> >>> ServerAlias appserver1.example.com appserver2.example.com > >> >>> RedirectMatch ^/(.*) https://%{HTTP_HOST}/$1 > >> >>> </VirtualHost> > >> >>> > >> >>> <VirtualHost *:443> > >> >>> ServerName appserver1.example.com > >> >>> ProxyRequests Off > >> >>> ProxyPass / http://appserver1.backend > >> >>> ProxyPassReverse / http://appserver1.backend > >> >>> </VirtualHost> > >> >>> > >> >>> <VirtualHost *:443> > >> >>> ServerName appserver2.example.com > >> >>> ProxyRequests Off > >> >>> ProxyPass / http://appserver2.backend > >> >>> ProxyPassReverse / http://appserver2.backend > >> >>> </VirtualHost> > >> >>> > >> >>> > ------------------------------------------------------------------------ > >> >>> > >> >>> And these uncommented lines in ssl.conf: > >> >>> > >> >>> > ----------------------------------------------------------------------- > >> >>> > >> >>> LoadModule ssl_module modules/mod_ssl.so > >> >>> Listen 443 > >> >>> SSLPassPhraseDialog builtin > >> >>> SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000) > >> >>> SSLSessionCacheTimeout 300 > >> >>> SSLMutex default > >> >>> SSLRandomSeed startup file:/dev/urandom 256 > >> >>> SSLRandomSeed connect builtin > >> >>> SSLCryptoDevice builtin > >> >>> > >> >>> <VirtualHost _default_:443> > >> >>> ServerName apachefrontend.example.com:443 > >> >>> > >> >>> ErrorLog logs/ssl_error_log > >> >>> TransferLog logs/ssl_access_log > >> >>> LogLevel warn > >> >>> > >> >>> SSLEngine on > >> >>> SSLProtocol all -SSLv2 -SSLv3 > >> >>> SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW > >> >>> SSLCertificateFile /etc/pki/tls/certs/localhost.crt > >> >>> SSLCertificateKeyFile /etc/pki/tls/private/localhost.key > >> >>> > >> >>> <Files ~ "\.(cgi|shtml|phtml|php3?)$"> > >> >>> SSLOptions +StdEnvVars > >> >>> </Files> > >> >>> > >> >>> <Directory "/var/www/cgi-bin"> > >> >>> SSLOptions +StdEnvVars > >> >>> </Directory> > >> >>> > >> >>> SetEnvIf User-Agent ".*MSIE.*" \ > >> >>> nokeepalive ssl-unclean-shutdown \ > >> >>> downgrade-1.0 force-response-1.0 > >> >>> > >> >>> CustomLog logs/ssl_request_log \ > >> >>> "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" > >> >>> > >> >>> </VirtualHost> > >> >>> > >> >>> > ----------------------------------------------------------------------------------- > >> >>> > >> >>> [root@www conf]# apachectl -S > >> >>> > >> >>> [Sun Mar 08 12:28:37 2015] [warn] module headers_module is already > loaded, skipping > >> >>> [Sun Mar 08 12:28:37 2015] [warn] module proxy_html_module is > already loaded, skipping > >> >>> [Sun Mar 08 12:28:37 2015] [warn] module ssl_module is already > loaded, skipping > >> >>> [Sun Mar 08 12:28:37 2015] [warn] _default_ VirtualHost overlap on > port 443, the first has precedence > >> >>> [Sun Mar 08 12:28:37 2015] [warn] _default_ VirtualHost overlap on > port 443, the first has precedence > >> >>> VirtualHost configuration: > >> >>> wildcard NameVirtualHosts and _default_ servers: > >> >>> _default_:8443 apachefrontend.example.com > (/etc/httpd/conf.d/nss.conf:84) > >> >>> _default_:443 apachefrontend.example.com > (/etc/httpd/conf.d/ssl.conf:74) > >> >>> *:443 appserver1.backend > (/etc/httpd/conf/httpd.conf:1034) > >> >>> *:443 appserver2.backend > (/etc/httpd/conf/httpd.conf:1041) > >> >>> *:80 is a NameVirtualHost > >> >>> default server apachefrontend.example.com > (/etc/httpd/conf/httpd.conf:1028) > >> >>> port 80 namevhost apachefrontend.example.com > (/etc/httpd/conf/httpd.conf:1028) > >> >>> alias appserver1.example.com > >> >>> alias appserver2.example.com > >> >>> Syntax OK > >> >>> > >> >>> .. and the server refuses to start at all.. > >> >>> > >> >>> Playing with NameVirtualHost: *.443 and/or specifying explicitly > server names > >> >>> with ServerName does not help me tp get rid of the overlap on 443. > At most, I > >> >>> am receiving the missing SSL support errors for the backend servers > (and I > >> >>> cannot add SSL support for them, they have to remain plain HTTP).. > >> >>> > >> >>> If you have any further ideas on what to try, please let me know. > >> >>> > >> >>> Thanks again and best regards - Andy. > >> >>> > >> >>> > >> >>> > >> >>> On Sun, Mar 8, 2015 at 2:05 AM, Igor Cicimov <icici...@gmail.com> > wrote: > >> >>>> > >> >>>> > >> >>>> On 08/03/2015 10:01 AM, "A M" <amm.pr...@gmail.com> wrote: > >> >>>> > > >> >>>> > > >> >>>> > Hello experts, > >> >>>> > > >> >>>> > I am trying to set up a classical frontend HTTPS Apache Reverse > Proxy > >> >>>> > for a couple of plain backend HTTP servers sitting on a backend > private > >> >>>> > network. The plaform is Centos 6, the Apache rpm is > httpd-2.2.15-39.el6.centos. > >> >>>> > > >> >>>> > I first created three DNS entries, all pointing to the same > public IP: > >> >>>> > > >> >>>> > apachefrontend.example.com > >> >>>> > appserver1.example.com > >> >>>> > appserver2.example.com > >> >>>> > > >> >>>> > I then generated the SSL cert and key for the frontend host and > verified that > >> >>>> > SSL config was correct (all settings and key/cert were defined > inside the file > >> >>>> > /etc/httpd/conf.d/ssl.conf). The URL " > https://apachefrontend.example.com" > >> >>>> > replied OK. > >> >>>> > > >> >>>> > I have then set up a forced redirection to port 443 on the mother > >> >>>> > server and defined two virtual hosts, in this manner: > >> >>>> > > >> >>>> > .. > >> >>>> > NameVirtualHost *:80 > >> >>>> > > >> >>>> > >> >>>> First change this: > >> >>>> > >> >>>> > <VirtualHost *:80> > >> >>>> > ServerName apachefrontend.example.com > >> >>>> > RedirectMatch ^/(.*) > https://apachefrontend.example.com/$1 > >> >>>> > </VirtualHost> > >> >>>> > > >> >>>> > >> >>>> to: > >> >>>> > >> >>>> <VirtualHost *:80> > >> >>>> ServerName apachefrontend.example.com > >> >>>> ServerAlias appserver1.example.com appserver2.example.com > >> >>>> > >> >>>> RedirectMatch ^/(.*) https://%{HTTP_HOST}/$1 > >> >>>> </VirtualHost> > >> >>>> > >> >>>> Then get rid of these two: > >> >>>> > >> >>>> > <VirtualHost *:80> > >> >>>> > ServerName appserver1.example.com > >> >>>> > ProxyRequests Off > >> >>>> > ProxyPass / http://appserver1.backend/ > >> >>>> > ProxyPassReverse / http://appserver1.backend/ > >> >>>> > </VirtualHost> > >> >>>> > > >> >>>> > <VirtualHost *:80> > >> >>>> > ServerName appserver2.example.com > >> >>>> > ProxyRequests Off > >> >>>> > ProxyPass / http://appserver2.backend/ > >> >>>> > ProxyPassReverse / http://appserver2.backend/ > >> >>>> > </VirtualHost> > >> >>>> > .. > >> >>>> > >> >>>> More specific convert them to ssl vhosts: > >> >>>> > >> >>>> <VirtualHost *:443> > >> >>>> ServerName appserver1.example.com > >> >>>> ProxyRequests Off > >> >>>> ProxyPass / http://appserver1.backend/ > >> >>>> ProxyPassReverse / http://appserver1.backend/ > >> >>>> </VirtualHost> > >> >>>> > >> >>>> <VirtualHost *:443> > >> >>>> ServerName appserver2.example.com > >> >>>> ProxyRequests Off > >> >>>> ProxyPass / http://appserver2.backend/ > >> >>>> ProxyPassReverse / http://appserver2.backend/ > >> >>>> </VirtualHost> > >> >>>> > >> >>>> which will effectively do what you want which is terminate ssl on > the frontend. > >> >>>> > >> >>>> > Now, > >> >>>> > > >> >>>> > - If I go to "http://apachefrontend.example.com", I am > >> >>>> > correctly ending up at "https://apachefrontend.example.com"; > >> >>>> > > >> >>>> > - If I go to "http://appserver1[2].example.com", I arrive to > >> >>>> > the backend servers allright, but only via the port 80. > >> >>>> > > >> >>>> > This behaviour is apparently correct, but so far I have not found > >> >>>> > the right configuration options needed to enforce the secure > >> >>>> > connection to the backend servers via the reverse proxy (I may > >> >>>> > not enable SSL on the backend servers as they are running some > >> >>>> > privately managed applications and cannot be tweaked). > >> >>>> > > >> >>>> > Could someone kindly post an example of working configuration > >> >>>> > of the same type? > >> >>>> > > >> >>>> > Thanks ahead for any advice! > >> >>>> > > >> >>>> > Andy. > >> >>>> > > >> >>>> > > >> >>>> > > >> >>> > >> >>> > >> >> > >> > > > > > >