it-swarm-pt.tech

Como faço para forçar o Apache a usar HTTPS em conjunto com AJP?

Temos um site Apache, com certas partes fornecidas por JBoss. A questão é: como podemos fazer com que o Apache force todas as solicitações HTTP a serem redirecionadas para o equivalente HTTPS?

Em nosso servidor antigo (CentOS 4, Apache 2.0, mod_jk), temos a seguinte configuração:

<VirtualHost 1.2.3.4:80>
Redirect / https://www.foo.com/
</VirtualHost>

Isso funciona muito bem - todas as solicitações para uma página da web com PHP, Vanilla HTML ou JBoss são redirecionadas. No entanto, em nosso novo servidor (CentOS 5, Apache 2.2, mod_proxy_ajp), a mesma configuração apenas funciona para páginas Vanilla - não para nada sendo enviado para JBoss usando AJP.

Também tentei o seguinte, que encontrei em http://www.webmasterworld.com/Apache/3050511.htm :

<Proxy *>
    RewriteEngine on
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
</Proxy>

Mas ainda sem sorte. Eu sinto que estou perdendo algo óbvio. Qualquer ajuda?

P.S. Não sou de forma alguma um especialista em Apache. Peço desculpas se esta for uma pergunta para iniciantes :-P.

5
Matt Solnit

Esta sintaxe redirecionará para HTTPS mantendo o host e o URL iguais:

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

Às vezes, você só deseja redirecionar um diretório, ou seja, uma área de administração:

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

Seja como for que você resolva, sugiro colocar a diretiva SSLRequireSSL nos locais que você deseja que sejam SSL apenas. Dessa forma, se houver um erro de configuração posteriormente no processo, nada será exposto em uma conexão não SSL.

2
CK.

A sintaxe mais eficiente para o redirecionamento SSL é usar o Apache env var HTTPS

Você gosta disso:

Reescrever host

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

Sem reescrever o host

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

Em relação ao proxy mod_jk vs Apache2.2 ajp, eu uso o mod_jk apenas porque considero JkMount e JkUnMount úteis quando você precisa separar conteúdo estático e dinâmico, eu diria que é mais direto. A forma como eu estruturo minhas configurações é com condicionais, incluindo para SSL. Portanto, tenho um httpd.conf para cada Host, tenho um dir para cada conf, incluindo a seguinte forma:

/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>
2
feniix