サイトのルートのみをhttpsにリダイレクトしようとしています。書き換えは行われますが、httpsでは何も起こりません。ブラウザは言う。 connecting to thinkingmonkey.me...
と停滞。
- Listen 80&Listen 443がconfファイルに存在します。
- Httpdを再起動しました。
- 適切な証明書ファイルと秘密鍵ファイルを使用しています。
- httpdログ、SSLログにはエラーはありません(SSlには別のログがあります)。
- 文字通り、 https://thinkingmonkey.me に直接アクセスしようとしても、SSLアクセスログには何も記録されていません。
A 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]
rewritelogデータ:
my-ip--[24/Jan/2012:19:01:14 +0000] [thinkingmonkey.me/sid#7fa2335ceb18][rid#7fa2339336d8/initial](2)init rewrite engine with requested uri /
my-ip--[24/Jan/2012:19:01:14 +0000] [thinkingmonkey.me/sid#7fa2335ceb18][rid#7fa2339336d8/initial](1)パススルー/
my-ip--[24/Jan/2012:19:01:14 +0000] [thinkingmonkey.me/sid#7fa2335ceb18][rid#7fa2339336d8/initial](3)[perdir/mysite /]ディレクトリごとのプレフィックスを取り除く:/ mysite /->
my-ip--[24/Jan/2012:19:01:14 +0000] [thinkingmonkey.me/sid#7fa2335ceb18][rid#7fa2339336d8/initial](3)[perdir/mysite /]パターン '^(。*)$'をuriに適用しています ''
my-ip--[24/Jan/2012:19:01:14 +0000] [thinkingmonkey.me/sid#7fa2335ceb18][rid#7fa2339336d8/initial](4)[perdir/mysite /] RewriteCond:input = '80 'pattern = '80' =>一致
my-ip--[24/Jan/2012:19:01:14 +0000] [thinkingmonkey.me/sid#7fa2335ceb18][rid#7fa2339336d8/initial](4)[perdir/mysite /] RewriteCond:input = '/' pattern = '^/$' =>一致
my-ip--[24/Jan/2012:19:01:14 +0000] [thinkingmonkey.me/sid#7fa2335ceb18][rid#7fa2339336d8/initial](2)[perdir/mysite /]書き直す ''-> ' https://thinkingmonkey.me '
my-ip--[24/Jan/2012:19:01:14 +0000] [thinkingmonkey.me/sid#7fa2335ceb18][rid#7fa2339336d8/initial](2)[perdir/mysite /] https://thinkingmonkey.me で明示的にリダイレクトを強制する
my-ip--[24/Jan/2012:19:01:14 +0000] [thinkingmonkey.me/sid#7fa2335ceb18][rid#7fa2339336d8/initial](1)[perdir/mysite /]エスケープ https://thinkingmonkey.me リダイレクト用
my-ip--[24/Jan/2012:19:01:14 +0000] [thinkingmonkey.me/sid#7fa2335ceb18][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 [email protected]
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)
ここで何が問題になっていますか?
OK、これを試してください:
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で応答していましたが、Webサイトを接続に接続できませんでした。 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キーが設定されていない場合(またはgremlinsによって不可解にコメント化されている場合)、Apache 2.2 SSLは警告なしに失敗します。ログにはエラーがなく、443をリッスンしていません。http:80サイトは機能します。
プロバイダーが提供しているSSLポリシーの種類を再確認する価値があります。大量のデバッグを行った後、SSL証明書の支払いを行うまで、ホスティングプロバイダーがポート443を外部でロックしたことが原因であることがわかりました。 LetsEncryptを使用することを計画していましたが、その前にホストを切り替える必要があります。とにかく、他のソリューションがどれも役に立たず、VPS環境(またはネットワークを制御できない可能性がある環境)にいる場合は、これを再確認する価値があります。