簡體   English   中英

stream_socket_client 無法連接(連接超時)

[英]stream_socket_client unable to connect (connection timed out)

我正在使用證書和私鑰

$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

錯誤是什么? 我需要更改服務器中的某些設置嗎?

我通過在生產服務器上打開端口 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.

檢查您的個人防火牆設置並確保您沒有阻止它。 嘗試禁用防火牆。

此外,一些 API 喜歡來自實際域而不是桌面的請求。 我沒有理由相信 Apple 是這樣工作的,但這也是需要檢查的。

還要確保 ping gateway.sandbox.push.apple.com 並確保您有良好的連接。

您必須將防火牆設置為允許所有 17.0.0.0/8 塊(它都屬於 Apple!)。 檢查這個答案

根據蘋果公司的說法:

APNs 服務器使用負載平衡,因此您的設備不會總是連接到相同的公共 IP 地址以獲取通知。 最好在分配給 Apple 的整個 17.0.0.0/8 地址塊上允許訪問這些端口。

如果您使用 CSF 防火牆(像我一樣),我建議將此行添加到 csf.allow 文件中:

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

然后重新啟動CSF。 使用上面的而不是“17.0.0.0/8”將只允許外連連接到 Apple,特別是端口 2195。NSA 不會喜歡它,但它更精確和安全! ;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM