web-dev-qa-db-ja.com

stream_socket_clientが接続できません(接続がタイムアウトしました)

証明書と秘密鍵を使用しています

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', $certfile);
stream_context_set_option($ctx, 'ssl', 'passphrase', $pass);
$fp = stream_socket_client('ssl://gateway.xyz.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);

ローカルのXAMPPサーバーで実行されていますが、外部サーバーでは機能していません。

警告:stream_socket_client()[function.stream-socket-client]:/ home/biranchi/public_html/Push.phpのssl://gateway.sandbox.Push.Apple.com:2195(接続がタイムアウトしました)に接続できません42行目

110の接続に失敗しました

エラーは何ですか?サーバーの設定を変更する必要がありますか?

12
Biranchi

本番サーバーでポート2195を開くことで、この問題を修正しました。次のコマンドで確認できます$ telnet Gateway.Push.Apple.com 2195

-bash-3.2# telnet gateway.Push.Apple.com 2195

Trying 17.149.38.141...
Connected to gateway.Push.Apple.com (17.149.38.141).
Escape character is '^]'.
Connection closed by foreign Host.
18
palaniraja

パーソナルファイアウォールの設定を確認し、これをブロックしていないことを確認してください。ファイアウォールを無効にしてみてください。

また、一部のAPIは、デスクトップではなく実際のドメインからのリクエストを好みます。 Appleがこのように機能すると信じる理由はありませんが、それも確認する必要があります。

また、gateway.sandbox.Push.Apple.comにpingを実行し、接続が良好であることを確認してください。

4
Jeremy Morgan

すべての17.0.0.0/8ブロックを許可するようにファイアウォールを設定する必要があります(すべてAppleに属しています!)。チェック この回答

そして Apple によると:

APNサーバーは負荷分散を使用するため、デバイスは通知のために常に同じパブリックIPアドレスに接続するとは限りません。 Appleに割り当てられている17.0.0.0/8アドレスブロック全体でこれらのポートへのアクセスを許可することをお勧めします。

(私のように)CSFファイアウォールを使用している場合は、次の行をcsf.allowファイルに追加することをお勧めします。

tcp|out|d=2195|d=17.0.0.0/8

「17.0.0.0/8」の代わりにこれを使用すると、Apple、特にポート2195へのアウトボンド接続のみが許可されます。NSAは気に入らないが、これははるかに正確で安全です!;)

1
Heitor