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


37

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

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

だから、基本的に、私は、現在の出力に似たものを探していますnetstatが、要求は例えば、のためである仮想ホストを含めます:avirtualsite.com:www


私のApache2を使用しています-私はちょうど見つけ- VirtualMin / Webminので使用するデフォルトLAMPのインストールをapachetop...しかし、それは唯一私が提供するファイルを監視します。..すべてのサーバーをないdamnit- -
ピョートル・クラ

回答:


35

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

mod_status あなたを助けます。

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

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

  1. 有効にするmod_status

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

    • 開い/etc/apache2/mods-enabled/status.confて編集:
    • に設定ExtendedStatusしますOn(オプションですが、より素晴らしいと少し遅い)
    • 中で<Location /server-status>追加でラインにあなたのIPアドレスを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モジュールの構成
  • ステータスモジュールを選択し、[選択したモジュールを有効にする ]をクリックします

ここに画像の説明を入力してください


興味深い-しかし、100の仮想Webサイトがある場合-すべてのWebサイトの統計情報が表示されますか?私たちは、既定のWebサイトを使用していないので、/var/log/apache2/access.logでcoonectionログが空であるため、各ウェブサイトは全体で独自の/log/access.logの広がりがある
ピョートル・クラ

2
私は今あなたがとても好きです。キスをしなさい:* +1
ピョートルクラ

天才-それは私が必要としたものです。それは今私に仮想ホストを見せています!百万人に感謝します!あなたの知識の返済方法がわかりません!
ピョートルクラ

まじで!このステータスツールがすっごく大好きです!これにより、非常に多くのスクリプトが検出されました。サイトにパッチを適用し、アップグレードし、修正するのに役立ちました。あなたの助けがとてもありがたいです。
ピョートルクラ

@ppumkin誇張しないでください。これらのタスクのための非常に基本的で一般的なApacheモジュールです。Apacheについての自尊心のある本はそれについて言及します。しかし、私はこれで助けてくれてうれしいです。
gertvdijk

15

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

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

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

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

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

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

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


1
+1重要なネットワーキングの背景ストーリーは過小評価されています。私の答えにリンクされている、これも賛成に値する!
gertvdijk

13

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

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

あなたの端末で


2
素敵でシンプル。とても簡単です、ありがとう!
ジュリアンF.ワイナート14年

cPanelのインストール(CentOSマシン上、ただしUbuntu上のcPanelはおそらく同じだと思います)では、access.logすべてのリクエストが含まれていません。代わりに、/usr/local/apache/domlogs/仮想ホスト(SSL、非SSL、さらにはFTPに分割)ごとにリクエストを確認します。Ubuntu cPanelではパスが異なる場合があります。
バトルビュータス

2
これはGoogleで見つけました。この技術は、あなたが必要とする以外、CentOSの7で動作します/var/log/httpd/access_log
mwfearnley

7

この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


1

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

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

0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.