Java >> Java tutorial >  >> Tag >> Tomcat

Hvordan tvinger jeg Apache til at bruge HTTPS i forbindelse med AJP?

Løsning 1:

Hvis jeg forstår dig rigtigt, vil du opgradere alle http-anmodninger til https. Hvis dette er korrekt, prøv dette

<VirtualHost ip:80>
   ServerName www.company.com

   RedirectMatch permanent ^(.*)$ https://www.company.com$1
</VirtualHost>

<VirtualHost ip:443>
   ServerName www.company.com

   Include vhosts.d/includes/ssl.conf

   # assumes you want to proxy everything on this vhost to jboss:8009
   <Location / >
       ProxyPass ajp://jboss:8009/
   </Location>
</VirtualHost>

Løsning 2:

Denne syntaks omdirigerer til HTTPS og holder værten og URL-adressen den samme:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Nogle gange vil du kun omdirigere en mappe, dvs. et administrationsområde:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^/admin(|/.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Løsning 3:

Uanset hvordan du løser det, kan jeg foreslå at placere direktivet SSLRequireSSL på de steder, du kun ønsker at være SSL. På den måde, hvis der er en konfigurationsfejl senere i processen, bliver intet afsløret over en ikke-SSL-forbindelse.

Løsning 4:

Den mere effektive syntaks til ssl-omdirigering er at bruge apache env var HTTPS

Du gør sådan her:

Værtsomskrivning

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule .* https://yourhost.com%{REQUEST_URI} [R,L]

Uden værtsomskrivning

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

Med hensyn til mod_jk vs apache2.2 ajp proxy bruger jeg mod_jk, bare fordi jeg finder JkMount og JkUnMount nyttige, når du skal adskille statisk og dynamisk indhold, vil jeg sige er mere ligetil. Måden jeg strukturerer mine konfigurationer på er med betingede inklusive for ssl.Så jeg har en httpd.conf for hver vært, jeg har en dir for hver conf include på følgende måde:

/etc/httpd/test_conf.httdp.conf:

SeverName test.com
ServerRoot /etc/httpd
LoadModule jk_module modules/mod_jk.so
LoadModule ssl_module/mod_ssl.so
(snip)
Include conf/test_com/*.conf

/etc/httpd/test_conf/mod_jk.conf

<IfModule jk_module>
JkWorkersFile conf/test_conf/workers.properties

JkLogFile logs/test_conf/mod_jk.log 

JkLogLevel error

JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"

JkRequestLogFormat "%w %V %T"

RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(PUT|DELETE|TRACK|OPTIONS|TRACE)
RewriteRule .* - [F] 

JkMount /* loadbalancer
JkUnMount /error* loadbalancer

JkShmFile run/jk.shm

<Location /jkstatus/>
JkMount status
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>

</IfModule>

/etc/httpd/conf/test_conf/workers.properties

worker.list=loadbalancer,status

worker.node1.port=8009
worker.node1.host=192.168.1.100
worker.node1.type=ajp13
worker.node1.lbfactor=2
worker.node1.ping_mode=A
worker.node1.connect_timeout=10000
worker.node1.prepost_timeout=10000
worker.node1.socket_timeout=90
worker.node1.connection_pool_timeout=600
worker.node1.method=R
worker.node1.fail_on_status=500,501,502,503

worker.node2.reference=worker.node1
worker.node2.host=192.168.1.200

worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=node1,node2
worker.loadbalancer.sticky_session=true
worker.status.type=status

/etc/httpd/conf/test_conf/httpd-ssl.conf

<IfModule ssl_module>
Listen 192.200.10.100:443

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

(snip)
<VirtualHost 192.200.10.100:443>

DocumentRoot "/var/www/test.com/htdocs"
ServerName test.com
(snip)
SSLEngine on
SSLProtocol all -SSLv2 
SSLCipherSuite DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:EDH-RSA-DES-CBC3-SHA:AES256-SHA:DES-CBC3-SHA:AES128-SHA:RC4-SHA

SSLCertificateFile "conf/test_conf/ssl/test_com.crt"
SSLCertificateKeyFile "conf/test_conf/ssl/test_com.key"
SSLCACertificateFile "conf/test_conf/ssl/VerisignIntermediate.crt"


BrowserMatch ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

JkMount /* loadbalancer
JkUnMount /error* loadbalancer

JkStripSession On

</VirtualHost>
</IfModule>

Java tag