質問: 症状は下記のとおりです。 ローカルIPからアクセスすると高負荷に耐えられるPHPが、グローバルIPからのアクセスに対しては(104: Connection reset by peer) または(110: Connection timed out)になってしまいます。 環境は下記のとおりです。 サーバー CenOS7.5 WEBサーバー nginx 1.14 https認証 Lets Encrypt 【1 サーバーの構築環境】 【1】 正規のドキュメント 192.168.1.100 ドキュメント設置先 /home/example/index.php サーバーアクセス https://example.com/index.php 【2】 テストドキュメント(正規ドキュメントの場所を見に行くローカルIP) 192.168.1.150 ドキュメント設置先 /home/example/index.php サーバーアクセス https://192.168.1.150/index.php 【2 テストしたこと】 1 上記を設定し、まずはテスト環境でApache Jmeter を使いテストしました。 https://192.168.1.150/index.php に高負荷(30秒間に960アクセス)をかけたところ、問題なく表示されました。 エラーも出ていません。 PHPおよび PHP-fpm、nginxの設定は問題ないと解釈しました。 【3 実戦設置】 2のテストで問題なかったため、正規のドキュメントルートで公開しました。 結果 recv() failed (104: Connection reset by peer) while reading response header from upstream または upstream timed out (110: Connection timed out) while connecting to upstream のエラーが連発し、 https://example.com/index.php はおろか テスト環境では、高負荷でも見れたはずの https://192.168.1.150/index.php すら見れなくなりました。 エラーが出るのは nginx_log/error.log のみであり php-fpm/error.log php-fpm/www-error.log にはエラーは出ません。 一方、同時に設置しているhtmlは問題なく見れます。 https://example.com/test.html https://192.168.1.150/test.html グローバルIPからのアクセスはせいぜい秒間数アクセスであり、テスト環境よりはるかに低負荷のものです。 また、PHPがエラーを吐くこと、htmlは見れることから、すくなくともサーバーまでのアクセスは到達しているようです。 ローカルIPからだと高負荷に耐えられるPHPが、グローバルIPからの接続ではエラーを吐くということです。 https認証のLets Encryptは何度も設置しており、どんな高負荷でも今までこのようなことはありませんでした。 何が問題かわかりますでしょうか? よろしくお願いいたします。 追記します。 このトラブルになって2週間経過しており、 110エラー 104エラーでググって出てくることは全て試し、その結果はnginx やPHPの設定に反映させています。 phpそのものも、ローカルで接続したリバースプロキシサーバー(192.168.1.160)の内容を表示するというもので、ありきたりのソースです。下記のようなものでリバースプロキシサーバーの内容を表示しています。リバースプロキシサーバーは同一サーバー内に設定してており、この接続に問題はありません。 タイトルGET部分 text(); $titlename_trim= trim($titlename); echo $titlename_trim; ?> 以下、コンテンツ内容のGETも同様 よろしくお願いいたします。 追伸です。 (上記ソースがローカルIPを拾ってくることに対して追伸) File get contentsだけだとローカルサーバーの内容は表示されませんが、今回はphpQuery-onefile.phpを使い、 ローカル内でスクレイピンクし、その結果を表示するものです。 PHPソースそのものは1年運用済みのもので、いまこの瞬間も問題なくグローバルに対して表示しています。 今回、アクセス過多のためCPU、メモリ、SSDを強化したサーバーを投入したいと考えています。 CentOS6から7に変えた以外は全て設定は従来問題なく使用できていたものに準じています。 リバースプロキシにローカルIPでアクセスすることそのものが原因ではないと思っています。
回答: ローカルマシンでは問題がないものの、インターネットを経由するとアクセスに問題が出る。というのなら通信経路(ネットワーク)に何か問題があるのかもしれませんね。 とはいえ、PHPに問題があったり、nginxの設定や、OSの設定に問題がある可能性もあります。 以下のような切り分けができると思うので、試してみると良いかと思います。 1. PHPの問題かどうかを確かめるために、nginxにhtmlファイルを配置して、そこに高負荷でアクセスしてみる。 1 同じエラーがでたら、PHPの問題ではない。 2 同じエラーがでなかったら、PHPの問題である可能性が高い 2. nginxで設定を変更した箇所に問題があるか切り分けるために、nginxを可能な限りデフォルトの設定に戻して、そこに高負荷でアクセスしてみる。 1 同じエラーがでたら、nginxの設定で変更した箇所が影響している可能性が高い 2 同じエラーがでなかったら、nginxのチューニングが足りないか、OSやネットワークに問題があるか 3. SSLなしでhtmlに高負荷をかけてみる。 1 同じエラーがでたら、SSLが関係している可能性が高い 2 同じエラーがでなかったら、SSLは関係ない この後に、別のサーバーで動かしてみたり、ローカルのVMで動かしてみる、などをして、切り分けを進めることができます。 切り分けが進むと、具体的なサーバーの設定を伝えなくても質問できるようになりますので、助けも求めやすくなるかと思います。