2013-07-25 14 views
5

Mam problem z użyciem mod_rewrite do wymuszania przekierowania żądań HTTP do HTTPS przy użyciu Apache 2.2.22 na Ubuntu Server 12.04.Przekierowanie HTTP do HTTPS z Apache

Kim/etc/apache2/sites-available/default plik jest następujący:

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

Gospodarz HTTPS jest zdefiniowana w default-ssl w tym samym katalogu.

Podczas wizyty na lokalnym adresie IP serwera, przekierowanie wydaje się działać poprawnie. Jednak dostęp do niego za pośrednictwem nazwy FQDN nie jest możliwy. Przy użyciu nazwy FQDN strona jest dostępna w porcie 5443, który jest odwzorowany w zaporze sieciowej na 443 na serwerze, więc być może ma to związek z problemem. Nie mogę po prostu użyć portu 443 bezpośrednio, ponieważ jest on używany na tym adresie IP przez inny serwer.

celu dalszego wyjaśnienia, są następujące ważne linki:

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

Przekierowanie działa tutaj:

http://192.168.200.80 

Ale dodaje daje 400 Bad Request, i to, gdzie jest potrzebne przekierowanie :

http://website:5443/ 

"Twoja przeglądarka wysłała żądanie, którego ten serwer nie mógł zrozumieć.Powód: Mówisz zwykłym HTTP do portu serwera z obsługą SSL. Zamiast tego użyj schematu HTTPS, aby uzyskać dostęp do tego adresu URL. "

+0

To wydaje się długi, aby zrobić prostą rzecz, może masz powód, dla niego jednak. W anycase powinieneś sprawdzić mod_proxy: http://httpd.apache.org/docs/2.0/mod/mod_proxy.html wraz z tym względnym pytaniem SO: http://stackoverflow.com/questions/1162375/apache-port -pełnomocnik. –

Odpowiedz

2

Twoim problemem tutaj jest początkowe żądanie HTTP: To nie zadziała, ponieważ serwer nie zrozumie, że odbiera żądanie na porcie 443 (jako odpowiedź Kod wskazuje).

Jeśli nie podano portu, protokół http domyślne do portu 80, https do portu 443.

jest to również powód, dla lokalnej przekierowanie działa. Założę się, jeśli dostęp do strony przez http://website/ (z odpowiednim portem przekierowania portu 80), to również będzie działało. Pamiętaj też, że twój VirtualHost jest zdefiniowany tylko dla port 80 mimo to nie będzie ważny dla żądań wysłanych pod numer website:5443 (lub website:443).

Ogólnie potrzebny jest serwer akceptujący zarówno żądania HTTP, jak i HTTPS na jednym porcie. Nie jestem pewien, czy jakiś popularny serwer faktycznie obsługuje coś takiego, ponieważ (jak sądzę) zasadniczo narusza specyfikacje.

+0

Zasadniczo nie można tego zrobić w mojej konfiguracji? – dutchgold92

+0

Nie jestem tego świadomy. Prawdopodobnie będziesz potrzebował niestandardowego serwera w jakiś sposób akceptującego oba lub niestandardowe proxy przekierowujące żądania na podstawie ich rzeczywistej zawartości. – Mario

+0

W każdym razie nie jest to warte tej sytuacji. Twoje zdrowie. – dutchgold92

8

Jest to całkowicie możliwe. Następujące przekierowania wszystkie http do adresu URL https.

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

upewnij się, że załadowałeś moduł przeprogramowania mod_rewrite i włączyłeś go.

1

jeśli chcesz przekierować swoją witrynę z http: // anything.example.com na https: //anything.example.com ... Po prostu utwórz dedykowany plik hosta .conf jako/etc/httpd/conf. d/dedicated.conf i inne pliki conf jako virtual.conf ... wpisy dla dedicated.conf są następujące ...

to jest dedykowany serwer hostujący plik conf do przekierowania go na 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

nie koduj jako obrazu. – Jakuje

+0

wprowadziłoby to luki w zabezpieczeniach? – Anthony

+0

Jestem całkiem pewien, że sam Apache zaleca używanie przekierowań, a nie przepisuje teraz? – Anthony

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