Я пытаюсь перенаправить только корень своего сайта на https. Хотя перезапись происходит, https ничего не дает. Браузер говорит. connecting to thinkingmonkey.me...
и застаивается.
- Слушай 80 & Слушайте 443 присутствуют в файле conf.
- Я перезапустил httpd.
- Я использую правильный файл сертификата и файл закрытого ключа.
- Ошибок нет в журналы httpd, Журналы SSL (У меня есть отдельный журнал для SSl).
- Буквально ничего не записывалось в журнал SSL-доступа, даже если я попытаюсь получить доступ к https://thinkingmonkey.me прямо.
А netstat -pant | grep httpd
имеет это:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 :::443 :::* LISTEN 1334/httpd
tcp 0 0 :::80 :::* LISTEN 1334/httpd
.htaccess:
RewriteEngine on
RewriteBase /
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ https://thinkingmonkey.me [L,R=302]
перезаписать данные журнала:
my-ip - - [24 января 2012 г .: 19: 01: 14 +0000] [Thinkmonkey.me/sid#7fa2335ceb18 visible[rid#7fa2339336d8/initial] (2) механизм перезаписи инициализации с запрошенным uri /
my-ip - - [24 / Янв / 2012: 19: 01: 14 +0000] [Thinkmonkey.me/sid#7fa2335ceb18 impression[rid#7fa2339336d8/initial] (1) пройти через /
my-ip - - [24 / Jan / 2012: 19: 01: 14 +0000] [Thinkmonkey.me/sid#7fa2335ceb18 visible[rid#7fa2339336d8/initial] (3) [perdir / mysite /] удалить префикс для каждого каталога : / mysite / ->
my-ip - - [24 / января / 2012: 19: 01: 14 +0000] [Thinkmonkey.me/sid#7fa2335ceb18 visible[rid#7fa2339336d8/initial] (3) [perdir / mysite /] применение шаблона '^ ( . *) $ 'в uri' '
my-ip - - [24 января 2012 года: 19: 01: 14 +0000] [Thinkmonkey.me/sid#7fa2335ceb18 visible[rid#7fa2339336d8/initial] (4) [perdir / mysite /] RewriteCond: input = ' 80 'pattern = '80' => соответствует
my-ip - - [24 января 2012 года: 19: 01: 14 +0000] [Thinkmonkey.me/sid#7fa2335ceb18 visible[rid#7fa2339336d8/initial] (4) [perdir / mysite /] RewriteCond: input = ' / 'pattern =' ^ / $ '=> соответствует
my-ip - - [24 / Янв / 2012: 19: 01: 14 +0000] [Thinkmonkey.me/sid#7fa2335ceb18 visible[rid#7fa2339336d8/initial] (2) [perdir / mysite /] rewrite '' -> 'https://thinkingmonkey.me'
my-ip - - [24 января 2012 года: 19: 01: 14 +0000] [Thinkmonkey.me/sid#7fa2335ceb18 visible[rid#7fa2339336d8/initial] (2) [perdir / mysite /] явно принудительное перенаправление с https://thinkingmonkey.me
my-ip - - [24 января 2012 г .: 19: 01: 14 +0000] [Thinkmonkey.me/sid#7fa2335ceb18 visible[rid#7fa2339336d8/initial] (1) [perdir / mysite /] экранирование https://thinkingmonkey.me для перенаправления
my-ip - - [24 января 2012 г .: 19: 01: 14 +0000] [Thinkmonkey.me/sid#7fa2335ceb18 visible[rid#7fa2339336d8/initial] (1) [perdir / mysite /] перенаправить на https://thinkingmonkey.me [REDIRECT / 302]
Вот мои виртуальные хосты.
<VirtualHost *:80>
ServerName thinkingmonkey.com
ServerAlias www.thinkingmonkey.com www.thinkingmonkey.me
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?thinkingmonkey\.(com|me)$ [NC]
RewriteRule ^ http://thinkingmonkey.me%{REQUEST_URI} [L,R=301]
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot /mysite/
ServerName thinkingmonkey.me
ErrorLog logs/site-error_log
CustomLog logs/site-access_log common
RewriteEngine On
RewriteLog "/var/log/rewrite.log"
RewriteLogLevel 3
</VirtualHost>
<VirtualHost *:443>
ServerName thinkingmonkey.me
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /path/to/my.crt
SSLCertificateKeyFile /path/to/my.key
SSLCertificateChainFile /path/to/my.ca-bundle
<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>
lsof -i -P | grep 443
httpd 1334 root 6u IPv6 3297 0t0 TCP *:443 (LISTEN)
httpd 1335 apache 6u IPv6 3297 0t0 TCP *:443 (LISTEN)
httpd 1336 apache 6u IPv6 3297 0t0 TCP *:443 (LISTEN)
httpd 1337 apache 6u IPv6 3297 0t0 TCP *:443 (LISTEN)
httpd 1338 apache 6u IPv6 3297 0t0 TCP *:443 (LISTEN)
httpd 1339 apache 6u IPv6 3297 0t0 TCP *:443 (LISTEN)
httpd 1340 apache 6u IPv6 3297 0t0 TCP *:443 (LISTEN)
httpd 1341 apache 6u IPv6 3297 0t0 TCP *:443 (LISTEN)
httpd 1342 apache 6u IPv6 3297 0t0 TCP *:443 (LISTEN)
Что здесь не так?
ОК, попробуйте это:
telnet localhost 443
Это дает ответ или зависает? Если он отвечает, вы должны получить что-то вроде:
$ telnet localhost 443
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
(если telnet не установлен, установите его; вы можете выйти из сеанса telnet, нажав control-]
а затем введите "q", чтобы выйти)
Если вы можете подключиться к веб-серверу через локальный интерфейс (и веб-сервер работает, учитывая ваши журналы), значит, существует проблема с брандмауэром (я знаю, вы сказали, что не установили брандмауэр, но это будет подтвердить). В этом случае запустите:
iptables -L -n
и опубликуйте результаты.
Обновить
Судя по комментариям, это экземпляр EC2, поэтому посмотрите группы безопасности, связанные с этим экземпляром. Убедитесь, что вы разрешаете tcp / 443 в своих группах безопасности.
Что-то вроде этого может помочь:
Аналогичная проблема, apache2 отвечал на 443, ничего в журналах
/etc/apache2# openssl s_client -connect localhost:443 -state -debug
дал мне следующее
SSL_connect:unknown state
read from 0x1182fe0 [0x1189010] (7 bytes => 7 (0x7))
0000 - 48 54 54 50 2f 31 2e HTTP/1.
SSL_connect:error in unknown state
139790287365792:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:795:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 295 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
проблема заключалась в том, что my.domain.com - это другой IP-адрес, чем был настроен на виртуальных хостах. В качестве сервера используется 2 IP. поэтому apache отвечал на 443, но не мог подключить веб-сайт к соединению. сопоставил IP все хорошо
На хостах с двойным стеком прослушивание :: 443 означает, что вы слушаете как IPv4, так и IPv6. Протестируйте согласование TLS самостоятельно:
openssl s_client -connect localhost:443
[lots of negotiation output, to ensure the basics are there]
Тогда вы сможете проверить, отвечает ли HTTP:
GET / HTTP/1.0
Вот как я бы перенаправил:
<VirtualHost *:80>
ServerName mail.example.com
RewriteEngine On
RewriteLog /var/log/apache2/rewrite.log
RewriteLogLevel 4
RewriteRule ^(.*)$ https://secure.example.com/mail$1 [R,L]
</VirtualHost>
Пожалуйста удалите RewriteLog
и RewriteLogLevel
в производстве, или рискуете бессмысленно заполнить диск.
открыто httpd.conf
и посмотрите, присутствует ли строка ниже:
LoadModule ssl_module modules/mod_ssl.so
Если нет, то обновите httpd.conf
с этим и перезапустите Apache.
Стоит дважды проверить, какую политику SSL предлагает ваш провайдер. После тонны отладки я обнаружил, что моя проблема вызвана тем, что мой хостинг-провайдер заблокировал порт 443 извне, пока я не заплатил им за сертификат SSL. Я планировал использовать LetsEncrypt, но мне придется сменить хост, прежде чем я смогу это сделать. В любом случае, если ни одно из других решений не помогает и вы находитесь в среде VPS (или в любой среде, где у вас может быть меньше контроля над своей сетью), возможно, стоит дважды проверить это.
Если ключи SSL не установлены (или были необъяснимо закомментированы гремлинами), Apache 2.2 SSL автоматически завершится ошибкой. В журнале не будет ошибок, и он не будет прослушивать 443. Сайты http: 80 будут работать.