ฉันจะดูการเชื่อมต่อปัจจุบันบนเว็บเซิร์ฟเวอร์ Apache ได้อย่างไร


37

ฉันกำลังโฮสต์โฮสต์เสมือนจำนวนมากโดยใช้ Apache ในการตั้งค่า LAMP ขั้นพื้นฐานด้วยความช่วยเหลือของ Webmin / Virtualmin ฉันกำลังมองหาเครื่องมือยอดนิยมที่ฉันสามารถตรวจสอบการเชื่อมต่อปัจจุบัน ดูเหมือนว่าส่วนโฮสติ้งเสมือนจะทำให้ฉันมีปัญหาที่นี่ นี่คือสิ่งที่ฉันได้ลอง:

  • netstat- ฉันสามารถเห็นการเชื่อมต่อ mydomain.com:wwwแต่พวกเขาแสดงให้ฉันราวกับว่าพวกเขากำลังทั้งหมดที่ใช้โดเมนหลักของฉันเช่น
  • iftop- ฉันชอบมันมาก แต่ข้อเสียที่คล้ายกันเป็นnetstat: ไม่แสดงโฮสต์เสมือน
  • apachetop- ดูเหมือนว่าจะไม่แสดงข้อมูลสำหรับโฮสต์เสมือนทั้งหมดของฉัน ฉันเข้าสู่ระบบเพื่อแยกไฟล์บันทึกที่กำหนดเองซึ่งฉันสงสัยว่าเป็นสาเหตุที่ทำให้ใช้งานไม่ได้
  • ntop, darkstat, MRTG, bwm-ng, IPTraf- ไม่ทำงานอย่างใดอย่างหนึ่ง

ดังนั้นโดยทั่วไปฉันกำลังมองหาสิ่งที่คล้ายกับการส่งออกในปัจจุบันของแต่จะรวมถึงโฮสต์เสมือนคำขอสำหรับเช่น:netstatavirtualsite.com:www


ฉันใช้ Apache2 - การติดตั้ง LAMP เริ่มต้นที่จะใช้กับ VirtualMin / Webmin - ฉันเพิ่งพบapachetop- แต่ตรวจสอบเฉพาะไฟล์ที่ฉันให้ .. damnit- ไม่ใช่เซิร์ฟเวอร์ทั้งหมด ...
Piotr Kula

คำตอบ:


35

คำตอบของ Andrea Corbelliniอธิบายว่าทำไมมันไม่ทำงานกับเครื่องมือที่คุณใช้และการทำงานของ Virtual Hosting นี่เป็นวิธีที่ง่ายที่สุดที่ฉันสามารถนึกได้ใน Apache ...

mod_status จะช่วยคุณออก

ข้อจำกัดความรับผิดชอบ: ฉันไม่สามารถบอกได้ว่าวิธีนี้ทำได้ใน Webmin - ฉันใช้ไฟล์กำหนดค่าเปลือยเพื่อตั้งค่าเซิร์ฟเวอร์ นี่เป็นเพียงภาพรวมพื้นฐานของขั้นตอน

มันเป็นtopเครื่องมือที่คล้ายกัน แต่แสดงเป็นหน้าเว็บ มันแสดงสถานะปัจจุบันที่สอบถามโดยตรงจาก 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 ขั้นตอนพื้นฐานเกี่ยวกับโมดูลสถานะสามารถพบได้ที่นี่:

  • เซิร์ฟเวอร์ -> Apache เว็บเซิร์ฟเวอร์ -> กำหนดค่าโมดูล Apache
  • เลือกโมดูลสถานะและคลิกคลิกเปิดใช้งานโมดูลที่เลือก

ป้อนคำอธิบายรูปภาพที่นี่


ที่น่าสนใจ - แต่ถ้าฉันมี 100 เว็บไซต์เสมือนจริง - มันจะแสดงสถิติให้ฉันเห็นสำหรับเว็บไซต์ทั้งหมดหรือไม่ เนื่องจากบันทึก coonection ใน /var/log/apache2/access.log ว่างเปล่าเพราะเราไม่ได้ใช้เว็บไซต์เริ่มต้นแต่ละเว็บไซต์มี /log/access.log ของตัวเองกระจายไปทั่ว
Piotr Kula

2
ฉันชอบคุณมากตอนนี้ รับจูบ: * +1
Piotr Kula

อัจฉริยะ - นั่นคือสิ่งที่ฉันต้องการ มันแสดงให้ฉันเห็น vhost ทันที! ขอบคุณล้านคน! ฉันไม่ทราบวิธีการตอบแทนความรู้ของคุณ!
Piotr Kula

อย่างจริงจัง! ฉันชอบเครื่องมือสถานะนี้มาก ๆ ! ฉันตรวจพบสคริปต์จำนวนมากด้วยเหตุนี้ มันช่วยให้ฉันได้รับเว็บไซต์ที่ปรับปรุงและแก้ไข ความช่วยเหลือของคุณเป็นที่นิยมมากฉันหวังว่าฉันจะให้ตัวแทนทั้งหมดของฉัน!
Piotr Kula

@ppumkin อย่าพูดเกินจริง มันเป็นโมดูล Apache ที่ธรรมดาและพื้นฐานมากสำหรับงานเหล่านี้ หนังสือที่เคารพตนเองเกี่ยวกับ Apache จะพูดถึงมัน ฉันดีใจที่ฉันมีประโยชน์ในเรื่องนี้แม้ว่า
gertvdijk

15

เครื่องมือทั้งหมดที่คุณพยายามจะไม่ให้คำตอบที่ถูกต้องแก่คุณ เหตุผลคือข้อมูลที่คุณร้องขอนั้นหายไปเมื่อทำการเชื่อมต่อ

ลองใช้ตัวอย่าง: สมมติว่าเว็บเซิร์ฟเวอร์ของคุณมีหนึ่งที่อยู่ IP ( 1.2.3.4 ) และชื่อโฮสต์สองรายการ ( a.mydomain.comและb.mydomain.com ) ที่แก้ไขไปยังที่อยู่ IP นั้น

จะเกิดอะไรขึ้นเมื่อคุณใช้เว็บเบราเซอร์ที่คุณชื่นชอบเมื่อคุณเยี่ยมชมa.mydomain.com ?

  1. เบราว์เซอร์จะถามเซิร์ฟเวอร์ DNS ของคุณถึงที่อยู่ IP a.mydomain.com ที่สอดคล้องกับ
  2. เซิร์ฟเวอร์ DNS บอกเบราว์เซอร์ที่อยู่1.2.3.4
  3. เว็บเบราเซอร์จะเชื่อมต่อกับ1.2.3.4

ดังนั้นnetstat& เพียง แต่รู้ว่ามีการเชื่อมต่อเข้ามาทำเพื่อ1.2.3.4 สาเหตุที่คุณเห็นชื่อโฮสต์แทนที่อยู่ IP คือที่อยู่ IP มีเรคคอร์ด rDNS ดังนั้นจึงnetstatชอบที่จะแสดงแทน IP เพราะมันดีกว่า ลองnetstat -n(หรือลบบันทึก rDNS) และคุณจะเห็นที่อยู่ IP

แต่นั่นไม่ใช่ทั้งหมด: เมื่อฉันบอกว่าข้อมูลเกี่ยวกับชื่อโฮสต์ที่ใช้เพื่อทำให้การเชื่อมต่อขาดหายไปฉันไม่ถูกต้อง จากมุมมองของสแต็ก TCP / IP ประโยคนั้นเป็นจริง แต่ถ้าเราเห็นสิ่งต่าง ๆ จากมุมมองของโปรโตคอล HTTP สิ่งต่าง ๆ ในทุกคำขอ HTTP มีHost:ส่วนหัวที่มีชื่อโฮสต์ที่ใช้โดยเบราว์เซอร์เพื่อทำการร้องขอ

ดังนั้นในระยะสั้นคุณควรดูไฟล์บันทึกของเว็บเซิร์ฟเวอร์ของคุณ เว็บเซิร์ฟเวอร์เป็นบริการที่จัดการการร้องขอ HTTP ดังนั้นบริการเดียวที่รู้เกี่ยวกับชื่อโฮสต์ "ดั้งเดิม"


1
+1 เรื่องราวพื้นหลังเครือข่ายที่สำคัญอยู่ภายใต้ เชื่อมโยงในคำตอบของฉันนี้สมควรได้รับ upvotes ด้วย!
gertvdijk

13

อีกวิธีคือพิมพ์

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

ใน terminal ของคุณ


2
นิสัยดีและเรียบง่าย ตรงไปตรงมาขอบคุณ!
Julian F. Weinert

ฉันสังเกตเห็นว่าในการติดตั้ง cPanel ของฉัน (บนเครื่อง CentOS แต่ฉันคิดว่า cPanel บน Ubuntu น่าจะเหมือนกัน) นั่นaccess.logไม่ได้มีการร้องขอทั้งหมด แต่ฉันมอง/usr/local/apache/domlogs/เข้าไปในเพื่อดูคำขอโดย virtualhost (แยกระหว่าง SSL ไม่ใช่ SSL และแม้กระทั่ง FTP) เส้นทางอาจแตกต่างกันใน Ubuntu cPanel
Buttle Butkus

2
ฉันพบสิ่งนี้จาก Google เทคนิคนี้ใช้งานได้ใน CentOS 7 ยกเว้นคุณต้องการ/var/log/httpd/access_log
mwfearnley

7

คุณสามารถตรวจสอบ ips ทั้งหมดที่เชื่อมต่อกับพอร์ต 80 ด้วย bash นี้

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



0

คุณยังสามารถใช้GoAccessแบบโต้ตอบเพื่อดูผู้เยี่ยมชมปัจจุบันของคุณ แยกวิเคราะห์บันทึกการเข้าถึง Apache ของคุณเพื่อจุดประสงค์นี้และแสดงสถิติเกี่ยวกับเว็บไซต์ของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.