Làm cách nào tôi có thể xem các kết nối hiện tại trên máy chủ web Apache của mình?


37

Tôi đang lưu trữ khá nhiều máy chủ ảo sử dụng Apache trong LAMP cơ bản được thiết lập với sự trợ giúp của Webmin / Virtualmin. Tôi đang tìm kiếm một công cụ giống như hàng đầu trong đó tôi có thể theo dõi các kết nối hiện tại. Phần lưu trữ ảo dường như đang gây rắc rối cho tôi ở đây. Đây là những gì tôi đã thử:

  • netstat- Tôi có thể thấy các kết nối, nhưng chúng hiển thị cho tôi như thể tất cả chúng đều sử dụng tên miền chính của tôi, vd mydomain.com:www.
  • iftop- Tôi thích nó rất nhiều, nhưng nhược điểm tương tự như netstat: không hiển thị máy chủ ảo.
  • apachetop- dường như không hiển thị thông tin cho tất cả các máy chủ ảo của tôi. Tôi đang đăng nhập để tách các tệp nhật ký tùy chỉnh, điều mà tôi nghi ngờ là nguyên nhân khiến nó không hoạt động.
  • ntop, darkstat, MRTG, bwm-ng, IPTraf- không làm việc một trong hai.

Vì vậy, về cơ bản, tôi đang tìm kiếm một cái gì đó tương tự như đầu ra hiện tại của netstat, nhưng để bao gồm máy chủ ảo mà yêu cầu là, ví dụ : avirtualsite.com:www.


Tôi đang sử dụng Apache2 - Cài đặt LAMP mặc định để sử dụng với VirtualMin / Webmin - tôi vừa tìm thấy apachetop- nhưng nó chỉ giám sát tệp tôi cung cấp .. chết tiệt - không phải tất cả các máy chủ ...
Piotr Kula

Câu trả lời:


35

Câu trả lời của Andrea Corbellini giải thích cho bạn lý do tại sao nó không hoạt động với các công cụ bạn đang sử dụng và cách Virtual Hosting hoạt động. Đây là cách đơn giản nhất mà tôi có thể nghĩ ra để hoàn thành nó trong Apache ...

mod_status sẽ giúp bạn ra ngoài.

Tuyên bố miễn trừ trách nhiệm: Tôi không thể biết cách thực hiện trong Webmin - Tôi sử dụng các tệp cấu hình trần để thiết lập máy chủ. Đây chỉ là một tổng quan cơ bản của các bước.

Đây là một topcông cụ giống như, nhưng được trình bày dưới dạng một trang web. Nó liệt kê trạng thái hiện tại được truy vấn trực tiếp từ Apache, vì vậy nó không phụ thuộc vào phân tích tệp nhật ký như thế apachetopnào.

  1. Cho phép mod_status:

    sudo a2enmod status
    
  2. Cấp cho mình quyền truy cập.

    • Mở /etc/apache2/mods-enabled/status.confvà chỉnh sửa:
    • Đặt ExtendedStatusthành On(tùy chọn, nhưng tuyệt vời hơn và chậm hơn một chút)
    • Trong <Location /server-status>, nối địa chỉ IP của bạn vào dòng với Allowchỉ thị. Thí dụ:

      Allow from 127.0.0.1 ::1 66.77.88.99
      
  3. Khởi động lại Apache:

    sudo service apache2 restart
    
  4. Thưởng thức công cụ trong trình duyệt của bạn, ví dụ: http://1.2.3.4/server-status

    Nó sẽ trông giống như ảnh chụp màn hình ví dụ này .

  5. Tiếp tục nhấn F5để nhận thông tin cập nhật. Hoặc có được một plugin trình duyệt tuyệt vời và xem nó đang được cập nhật!


Webmin

phụ lục của OP cho khách truy cập trong tương lai

Trong Webmin, các bước cơ bản về mô-đun Trạng thái có thể được tìm thấy ở đây:

  • Máy chủ -> Máy chủ web Apache -> Cấu hình các mô-đun Apache
  • Chọn mô-đun Trạng thái và nhấp vào Kích hoạt Mô-đun đã chọn

nhập mô tả hình ảnh ở đây


thú vị - nhưng nếu tôi có 100 trang web ảo - nó sẽ hiển thị cho tôi số liệu thống kê cho TẤT CẢ các trang web chứ? bởi vì nhật ký cộng tác trong /var/log/apache2/access.log trống vì chúng tôi không sử dụng trang web mặc định, mỗi trang web có /log/access.log trải đều
Piotr Kula

2
Tôi thích bạn rất nhiều bây giờ. Đưa tôi một nụ hôn: * +1
Piotr Kula

Thiên tài- Đó là những gì tôi cần. nó đang hiển thị cho tôi vhost ngay bây giờ! Cảm ơn một triệu người đàn ông! Tôi không biết làm thế nào để trả ơn cho kiến ​​thức của bạn!
Piotr Kula

Nghiêm túc! Tôi yêu công cụ trạng thái này rất nhiều! Tôi đã phát hiện rất nhiều kịch bản nhờ điều này. Nó giúp tôi có được các trang web được vá, nâng cấp và sửa chữa. Sự giúp đỡ của bạn rất được đánh giá cao Tôi ước tôi có thể cung cấp cho bạn tất cả các đại diện của tôi!
Piotr Kula

@ppumkin Đừng phóng đại. Đây là một mô-đun Apache rất cơ bản và phổ biến cho các tác vụ này. Bất kỳ cuốn sách tự tôn trọng nào về Apache sẽ đề cập đến nó. Tôi rất vui vì tôi đã giúp đỡ trong việc này.
gertvdijk

15

Tất cả các công cụ bạn đang cố gắng sẽ không bao giờ cung cấp cho bạn câu trả lời đúng. Lý do là thông tin bạn yêu cầu bị mất khi kết nối được thực hiện.

Hãy sử dụng một ví dụ: giả sử máy chủ web của bạn có một địa chỉ IP ( 1.2.3.4 ) và hai tên máy chủ ( a.mydomain.comb.mydomain.com ) phân giải địa chỉ IP đó.

Điều gì xảy ra khi bạn sử dụng trình duyệt web yêu thích của mình khi bạn truy cập a.mydomain.com ?

  1. Trình duyệt hỏi máy chủ DNS của bạn địa chỉ IP a.mydomain.com tương ứng.
  2. Máy chủ DNS cho trình duyệt biết địa chỉ là 1.2.3.4 .
  3. Trình duyệt web kết nối với 1.2.3.4 .

Vì vậy netstat& hợp tác. chỉ biết rằng có một kết nối đến được thực hiện đến 1.2.3.4 . Lý do tại sao bạn thấy tên máy chủ thay vì địa chỉ IP là địa chỉ IP có bản ghi rDNS, vì vậy netstatthích hiển thị tên đó thay vì IP, vì nó đẹp hơn. Hãy thử netstat -n(hoặc xóa bản ghi rDNS) và bạn sẽ thấy địa chỉ IP.

Nhưng đó không phải là tất cả: khi tôi nói rằng thông tin về tên máy chủ được sử dụng để tạo kết nối bị mất, tôi không hoàn toàn đúng. Từ quan điểm của ngăn xếp TCP / IP, câu đó là đúng. Nhưng nếu chúng ta nhìn mọi thứ từ quan điểm của giao thức HTTP, mọi thứ sẽ khác. Trong mọi yêu cầu HTTP, có một Host:tiêu đề chứa tên máy chủ được trình duyệt sử dụng để thực hiện yêu cầu.

Vì vậy, trong ngắn hạn, bạn nên xem các tệp nhật ký của máy chủ web của bạn. Máy chủ web là dịch vụ xử lý các yêu cầu HTTP và do đó là dịch vụ duy nhất biết về tên máy chủ "gốc".


1
+1 Câu chuyện nền tảng mạng quan trọng được đánh giá thấp. Liên kết trong câu trả lời của tôi, điều này cũng xứng đáng được nâng cấp!
gertvdijk

13

Một cách khác là gõ

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

trong thiết bị đầu cuối của bạn


2
Đẹp và đơn giản; Khá thẳng về phía trước, cảm ơn!
Julian F. Weinert

Tôi nhận thấy rằng trong các bản cài đặt cPanel của mình (trên các máy CentOS, nhưng tôi nghĩ cPanel trên Ubuntu có thể giống nhau), access.logkhông chứa tất cả các yêu cầu. Thay vào đó, tôi nhìn vào /usr/local/apache/domlogs/để xem các yêu cầu của virtualhost (được phân chia giữa SSL, không phải SSL và thậm chí FTP). Đường dẫn có thể khác trên Ubuntu cPanel.
Butussy Butkus

2
Tôi tìm thấy điều này từ Google. Kỹ thuật này hoạt động trong CentOS 7, ngoại trừ bạn cần/var/log/httpd/access_log
mwfearnley

7

Bạn có thể kiểm tra tất cả các ips được kết nối trên cổng 80 bằng bash này

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

Lưu ý: nếu bạn muốn xem cổng khác, hãy thay đổi 80

ĐẦU RA:

 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

Nếu bạn muốn pid, người dùng và lệnh:

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

0

Bạn cũng có thể sử dụng GoAccess tương tác để xem khách truy cập hiện tại của mình. Nó phân tích nhật ký truy cập Apache của bạn cho mục đích này và hiển thị một loạt các số liệu thống kê về trang web của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.