web-dev-qa-db-ja.com

Apache Webサーバーで現在の接続を確認するにはどうすればよいですか?

Webmin/Virtualminの助けを借りてセットアップされた基本的なLAMPで、Apacheを使用して非常に多くの仮想ホストをホストしています。現在の接続を監視できるトップライクなツールを探しています。ここで、仮想ホスティングの部分が問題を引き起こしているようです。私が試したものは次のとおりです。

  • netstat-接続は表示できますが、すべてプライマリドメインを使用しているかのように表示されます。 mydomain.com:www
  • iftop-とても気に入っていますが、netstatと同様の欠点があります:仮想ホストを表示しません。
  • apachetop-すべての仮想ホストの情報が表示されていないようです。個別のカスタムログファイルにログを記録していますが、それが機能しない理由の原因だと考えています。
  • ntopdarkstatMRTGbwm-ngIPTraf-どちらも機能していません。

したがって、基本的に、netstatの現在の出力に似たものを探していますが、要求の対象となる仮想ホストを含​​めるには、たとえば:avirtualsite.com:wwwを探します。

35
Piotr Kula

Andrea Corbelliniの回答 は、使用しているツールで動作しない理由と、仮想ホスティングの仕組みを説明しています。これが、Apacheで実現する最も簡単な方法です...

mod_statusがお手伝いします。

免責事項:これがWebminでどのように行われるかわかりません-裸の構成ファイルを使用してサーバーをセットアップします。手順の基本的な概要を次に示します。

これはtopに似たツールですが、Webページとして表されます。 Apacheから直接クエリされた現在の状態を一覧表示するため、apachetopのようにログファイルの解析に依存しません。

  1. mod_statusを有効にします:

    Sudo a2enmod status
    
  2. 自分にアクセスを許可します。

    • /etc/Apache2/mods-enabled/status.confを開いて編集します。
    • ExtendedStatusOnに設定します(オプションですが、より素晴らしいもので、少し遅いです)
    • <Location /server-status>内で、appendIPアドレスをAllowディレクティブのある行に追加します。例:

      Allow from 127.0.0.1 ::1 66.77.88.99
      
  3. Apacheを再起動します。

    Sudo service Apache2 restart
    
  4. ブラウザでツールをお楽しみください。例:http://1.2.3.4/server-status

    この例のスクリーンショット のようになります。

  5. 押し続ける F5 更新を取得します。または、素晴らしいブラウザプラグインを入手して、更新されるのを見てください!


Webmin

将来の訪問者のためのOPによる補遺

Webminでは、Statusモジュールに関する基本的な手順は次の場所にあります。

  • サーバー->Apache Webserver->Apacheモジュールの構成
  • ステータスモジュールを選択し、クリックして選択したモジュールを有効にする

enter image description here

35
gertvdijk

あなたが試みているすべてのツールがあなたに正しい答えを与えることは決してありません。その理由は、接続が確立されると、要求している情報が失われるためです。

例を使用してみましょう:Webサーバーに1つのIPアドレス(1.2.3.4)と2つのホスト名(a.mydomain.comおよびb.mydomain .com)そのIPアドレスに解決されます。

a.mydomain.comにアクセスしたときに、お気に入りのWebブラウザーを使用するとどうなりますか?

  1. ブラウザは、DNSサーバーにIPアドレスa.mydomain.comに対応するものを尋ねます。
  2. DNSサーバーは、ブラウザーにアドレスが1.2.3.4であることを伝えます。
  3. Webブラウザーは1.2.3.4に接続します。

netstat&co。 1.2.3.4への着信接続があることだけを知っています。 IPアドレスの代わりにホスト名が表示される理由は、IPアドレスにrDNSレコードがあるため、netstatはIPの代わりにそれを表示することを好むからです。 netstat -nを試す(またはrDNSレコードを削除する)と、IPアドレスが表示されます。

しかし、それだけではありません。接続を確立するために使用されたホスト名に関する情報が失われたと言ったとき、私は完全に正しくありませんでした。 TCP/IPスタックの観点から見ると、その文は真実です。しかし、HTTPプロトコルの観点から物事を見ると、物事は異なります。すべてのHTTPリクエストには、ブラウザーがリクエストを行うために使用したホスト名を含むHost:ヘッダーがあります。

したがって、要するに、Webサーバーのログファイルを確認する必要があります。 Webサーバーは、HTTP要求を処理するサービスであるため、「元の」ホスト名を認識する唯一のサービスです。

15

別の方法は、入力することです

tail -f /var/log/Apache2/access.log

あなたの端末で

13
niksmac

このbashを使用して、ポート80に接続されているすべてのIPを確認できます。

netstat -tn 2>/dev/null | grep :80 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head

注:他のポートを表示する場合は、80を変更します

出力:

 19 x.174.143.1
 13 x.175.135.1
  9 x.68.135.1
  8 x.144.87.1
  7 x.68.150.1
  6 x.92.4.1
  6 x.188.23.1
  5 x.190.164.1
  4 x.189.156.1
7
DarckBlezzer

これは次の方法で確認できます。

netstat -na | grep 'ESTA'
2
user1717828

Pid、user、およびcommandが必要な場合:

lsof  -i  tcp:443,80 | egrep 'PID|->' | sort -k9
1
Vextor

GoAccess をインタラクティブに使用して、現在の訪問者を表示することもできます。この目的でApacheアクセスログを解析し、サイトに関する多くの統計を表示します。

0
umar14