2013-07-25 17 views
5

Ho un problema utilizzando mod_rewrite per forzare il reindirizzamento delle richieste HTTP a HTTPS utilizzando Apache 2.2.22 su Ubuntu Server 12.04.Reindirizzamento da HTTP a HTTPS con Apache

mio/etc/apache2/sites-available/file di default è la seguente:

<VirtualHost *:80> 
     RewriteEngine On 
     RewriteCond %{SERVER_PORT} !^443$ 
     RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L] 
    </VirtualHost> 

L'host HTTPS è definito in default-ssl nella stessa directory.

Visitare l'indirizzo IP locale del server, il reindirizzamento sembra funzionare correttamente. Tuttavia, accedendo tramite il FQDN, non è così. Usando il FQDN, il sito è disponibile sulla porta 5443, che è mappata nel firewall su 443 sul server, quindi forse questo ha qualcosa a che fare con il problema. Non posso usare direttamente la porta 443, poiché è in uso su questo indirizzo IP da un altro server.

Per chiarire ulteriormente, i seguenti sono collegamenti validi:

https://website:5443 
    https://192.168.200.80:443 

Il reindirizzamento lavora qui:

http://192.168.200.80 

ma la seguente dà una 400 Bad Request, ed è qui che è necessario il reindirizzamento :

http://website:5443/ 

"Il tuo browser ha inviato una richiesta che questo server non è riuscito a capire. Motivo: si sta parlando semplicemente di HTTP a una porta del server abilitata per SSL. Utilizzare lo schema HTTPS per accedere a questo URL, per favore. "

+0

Questo mi sembra la strada più lunga per fare una cosa semplice, forse hai una ragione per questo però. In ogni caso, dovresti controllare mod_proxy: http://httpd.apache.org/docs/2.0/mod/mod_proxy.html insieme a questa relativa domanda SO: http://stackoverflow.com/questions/1162375/apache-port -proxy. –

risposta

2

Il tuo problema qui è la richiesta HTTP iniziale: Questo non funzionerà in quanto il server non capirà che riceve la richiesta sulla porta 443 (come risposta codice suggerisce).

Se non porta viene dato, il protocollo http default alla porta 80, https alla porta 443.

Questo è anche il motivo per cui il reindirizzamento locale funziona. Scommetto che, se si accede alla pagina tramite http://website/ (con corretto port forwarding della porta 80), funzionerà pure. Si noti inoltre che il tuo VirtualHost è definito solo per porta 80 comunque, quindi non sarà valido per le richieste inviate a website:5443 (o website:443).

In generale, è necessario un server che accetta le richieste HTTP e HTTPS su una singola porta. Non sono sicuro che nessun server popolare in realtà supporti qualcosa del genere, perché (penso) in sostanza viola le specifiche.

+0

Quindi, in pratica, questo non può essere fatto nel mio setup? – dutchgold92

+0

Non che io sappia. Probabilmente avrai bisogno di un server personalizzato che accetta in qualche modo entrambi o un proxy personalizzato che reindirizza le richieste in base al loro contenuto effettivo. – Mario

+0

Beh, in entrambi i casi non ne vale la pena in questa situazione. Saluti. – dutchgold92

8

Questo è totalmente possibile. Il seguente reindirizza tutto l'http all'URL https.

<VirtualHost *:80> 
    ServerName mydomainname.com 
    RewriteEngine On 
    RewriteCond %{HTTPS} off 
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 
</VirtualHost> 

assicurarsi di caricare il modulo di riscrittura mod_rewrite e abilitarlo.

1

se si desidera reindirizzare il proprio sito da http: // anything.example.com a https: //anything.example.com ... Basta creare un file .conf di hosting dedicato come/etc/httpd/conf. d/dedicated.conf e altri file di conf come virtual.conf ... le voci per dedicated.conf sono le seguenti ....

questo è dedicato al file di hosting per conf per reindirizzare a https ... th[][1]

<virtualhost *:80> 
servername host.example.com 
documentroot /var/www/html 
rewriteengine on 
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L] 
sslcertificatefile /etc/pki/tls/certs/name.crt 
sslcertificatekeyfile /etc/pki/tls/private/name.key 
</virtualhost> 
<directory /var/www/html> 
allowoverride all 
require all granted 
</directory> 
+1

non pubblicare codice come immagini. – Jakuje

+0

introdurrebbe vulnerabilità di sicurezza ?? – Anthony

+0

sono abbastanza sicuro che l'apache stesso consiglia di utilizzare i reindirizzamenti e non riscrive ora ?? – Anthony

0
RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 
Problemi correlati