質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • PHP

    20382questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • nginx

    840questions

    nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

ローカルIPからだと高負荷に耐えられるPHPが、グローバルIPからではエラーを吐く

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 291

tajix_japan

score 68

症状は下記のとおりです。

ローカル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)の内容を表示するというもので、ありきたりのソースです。下記のようなものでリバースプロキシサーバーの内容を表示しています。リバースプロキシサーバーは同一サーバー内に設定してており、この接続に問題はありません。

<?php date_default_timezone_set('Asia/Tokyo'); ?>
<?php require_once("./phpQuery/phpQuery-onefile.php"); 
$sv=htmlspecialchars($_GET['s'], ENT_QUOTES, "UTF-8");
?>
<?php
$html_upper = file_get_contents('http://192.168.1.160/1h/proxy1h_title_get.php?sv='.$sv.'');
$doc_upper = phpQuery::newDocument($html_upper);
?>

タイトルGET部分

<?php
$titlename = $doc["#under_title"]->text();
$titlename_trim= trim($titlename);
echo $titlename_trim;
?>

以下、コンテンツ内容のGETも同様

よろしくお願いいたします。

追伸です。
(上記ソースがローカルIPを拾ってくることに対して追伸)

File get contentsだけだとローカルサーバーの内容は表示されませんが、今回はphpQuery-onefile.phpを使い、
ローカル内でスクレイピンクし、その結果を表示するものです。

PHPソースそのものは1年運用済みのもので、いまこの瞬間も問題なくグローバルに対して表示しています。

今回、アクセス過多のためCPU、メモリ、SSDを強化したサーバーを投入したいと考えています。
CentOS6から7に変えた以外は全て設定は従来問題なく使用できていたものに準じています。
リバースプロキシにローカルIPでアクセスすることそのものが原因ではないと思っています。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • coco_bauer

    2018/07/07 14:21

    一般論として、グローバルIPのマシンから、プライベートアドレス(192.168.*.*)にアクセスすることはできません。何故なら、世界中に同じプライベートアドレスを持つマシンが多数存在しているからです。 グローバルIPのマシンから、質問にある192.168.1.150や192.168.1.100への通信の経路と中継する装置や中継するソフトの設定などを明らかにしてください。

    キャンセル

  • tajix_japan

    2018/07/07 14:28

    ありがとうございます。確かに単にFile get contentsだけだとローカルサーバーの内容は表示されませんが、今回はphpQuery-onefile.phpを使い、ローカル内でスクレイピンクし、その結果を表示するものです。PHPソースそのものは1年運用済みのものです。今回、アクセス過多のためCPU、メモリ、SSDを強化したサーバーを投入しました。CentOS6から7に変えた以外は全て設定は従来問題なく使用できていたものに準じています。リバースプロキシにローカルIPでアクセスすることそのものが原因ではないと思っています。

    キャンセル

  • tajix_japan

    2018/07/12 22:29

    大変遅くなりました。 結論から言うと、原因がわかりませんでした。 今回の目的はサーバー増強であり、CPU、メモリの増強はもちろんですが、読み込み速度の向上を 目的にSATA SSD→NVMe SSDに変更するというのが最大の目的でした。 NVMeの場合、SATAからのコピーができないこと、CentOS6のカーネルがNVMeを認識しないこと から、新たにCent OS7をインストールし、それ以外は従来の設定と同じにしたのですがこのエラーが 出てしまいました。 既に3週間を費やしており、これ以上の時間を無駄にできないため、CentOS6サーバーのコピー サイトを拡張し、ロードバランサーで繋ぐことで読み込み速度を維持するようにしたいと思います。 NVMe SSD が思ったほど体感読み込み速度が向上しなかったことも、SATAで十分と思う原因と なりました。 お騒がせしました。お時間をお取りいただき、ありがとうございました。

    キャンセル

回答 2

+2

過去ログを最初のエラーメッセージで検索するとnginxのエラーログで recv() failed (104: Connection reset by peer) が見つかります。これでなかったら、2つ目のエラーメッセージでググってみては?

差支えない範囲で現象を再現できる最低限のコードを提示した方が解決は早そうです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/07 13:50

    ありがとうございます。
    このトラブルになって2週間経過しており、
    110エラー 104エラーでググって出てくることは全て試し、その結果はnginx やPHPの設定に反映させています。
    phpそのものも、ローカルで接続したリバースプロキシサーバー(192.168.1.160)の内容を表示するというもので、ありきたりのソースです。下記のようなものでリバースプロキシサーバーの内容を表示しています。リバースプロキシサーバーは同一サーバー内に設定してており、この接続に問題はありません。


    <?php date_default_timezone_set('Asia/Tokyo'); ?>
    <?php require_once("./phpQuery/phpQuery-onefile.php");
    $sv=htmlspecialchars($_GET['s'], ENT_QUOTES, "UTF-8");
    ?>
    <?php
    $html_upper = file_get_contents('http://192.168.1.160/1h/proxy1h_title_get.php?sv='.$sv.'');
    $doc_upper = phpQuery::newDocument($html_upper);
    ?>

    タイトルGET部分

    <?php
    $titlename = $doc["#under_title"]->text();
    $titlename_trim= trim($titlename);
    echo $titlename_trim;
    ?>

    以下、コンテンツ内容のGETも同様

    よろしくお願いいたします。

    キャンセル

  • 2018/07/07 13:55

    このコメントまで読んでくれる人は少ないので、質問に追記してください。

    キャンセル

  • 2018/07/07 14:02

    ありがとうございます。追記しました。

    キャンセル

  • 2018/07/12 22:29

    大変遅くなりました。
    結論から言うと、原因がわかりませんでした。
    今回の目的はサーバー増強であり、CPU、メモリの増強はもちろんですが、読み込み速度の向上を
    目的にSATA SSD→NVMe SSDに変更するというのが最大の目的でした。
    NVMeの場合、SATAからのコピーができないこと、CentOS6のカーネルがNVMeを認識しないこと
    から、新たにCent OS7をインストールし、それ以外は従来の設定と同じにしたのですがこのエラーが
    出てしまいました。
    既に3週間を費やしており、これ以上の時間を無駄にできないため、CentOS6サーバーのコピー
    サイトを拡張し、ロードバランサーで繋ぐことで読み込み速度を維持するようにしたいと思います。
    NVMe SSD が思ったほど体感読み込み速度が向上しなかったことも、SATAで十分と思う原因と
    なりました。
    お騒がせしました。お時間をお取りいただき、ありがとうございました。

    キャンセル

checkベストアンサー

+1

ローカルマシンでは問題がないものの、インターネットを経由するとアクセスに問題が出る。というのなら通信経路(ネットワーク)に何か問題があるのかもしれませんね。

とはいえ、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で動かしてみる、などをして、切り分けを進めることができます。

切り分けが進むと、具体的なサーバーの設定を伝えなくても質問できるようになりますので、助けも求めやすくなるかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/07 13:53

    ありがとうございます。
    >nginxを可能な限りデフォルトの設定に戻して、そこに高負荷でアクセスしてみる。
    これは気づきませんでした。たしかに1アクセスから問題が生じているためデフォルトから変化させたほうがいいですね。同様にphp-fpmも弄り倒していますのでここもチェックしてみます。

    1は既に実施しており、問題ありませんでした。(htmlは表示されました)

    2,3の方法を試してみます。またご報告させていただきます。
    助かります!

    キャンセル

  • 2018/07/12 22:28

    大変遅くなりました。
    結論から言うと、原因がわかりませんでした。
    今回の目的はサーバー増強であり、CPU、メモリの増強はもちろんですが、読み込み速度の向上を
    目的にSATA SSD→NVMe SSDに変更するというのが最大の目的でした。
    NVMeの場合、SATAからのコピーができないこと、CentOS6のカーネルがNVMeを認識しないこと
    から、新たにCent OS7をインストールし、それ以外は従来の設定と同じにしたのですがこのエラーが
    出てしまいました。
    既に3週間を費やしており、これ以上の時間を無駄にできないため、CentOS6サーバーのコピー
    サイトを拡張し、ロードバランサーで繋ぐことで読み込み速度を維持するようにしたいと思います。
    NVMe SSD が思ったほど体感読み込み速度が向上しなかったことも、SATAで十分と思う原因と
    なりました。
    お騒がせしました。お時間をお取りいただき、ありがとうございました。

    キャンセル

  • 2018/07/13 23:02

    なるほど。
    丁寧にありがとうございます。
    お疲れ様でした。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    20382questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • nginx

    840questions

    nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。