Làm thế nào để kiểm tra các mô-đun apache được kích hoạt / cài đặt?


Câu trả lời:


464

Bạn đang dùng Ubuntu, hãy thử:

apache2ctl -M

11
apache2ctl -M hoạt động tuyệt vời
udo

3
apache2 -M dẫn đến lỗi nàyapache2: bad user name ${APACHE_RUN_USER}
udo

4
Đủ công bằng - đó là do thực tế là bạn không chạy lệnh như người dùng thời gian chạy apache (có thể là dữ liệu www) được xác định trong cấu hình apache. Có một cách để khắc phục điều này nhưng bạn cũng có thể dính vào apache2ctl.
Linker3000

9
sudo apache2ctl -M | sort
mmdemirbas

4
Lưu ý có nhiều tùy chọn hữu ích (cờ) apache2ctlnhưng chúng không được liệt kê trong trang chủ cũng như trong apache2ctl --help. Đó là bởi vì chúng được truyền qua httpd. Chúng chỉ được liệt kê trong tài liệu httpd .
Lutz Prechelt

117

httpd -M sẽ cho bạn biết các mô-đun được tích hợp hoặc chia sẻ.


hmm ... Tôi đang nhận được "bash: httpd: lệnh không tìm thấy" khi khởi chạy httpd -M với quyền root
udo

Vì vậy, sau đó xác định đường dẫn đầy đủ để httpdthực thi.
Ignacio Vazquez-Abrams

9
@ IgnacioVazquez-Abrams: Trên Ubuntu (và các bản phân phối dựa trên Debian khác), tên này có apache2và không httpd, đó là lý do tại sao nó không được tìm thấy.
Daniel Andersson

3
Apache là httpd trên redhat. Hãy thử một trong những câu trả lời khác nếu câu trả lời này không phù hợp với bạn.
Jacks_Depression

3
CentOS cũng sử dụng httpd thay vì apache2
pedromanoel

37

Không có gì từ các câu trả lời ở trên hoạt động nếu bạn không thể chạy các lệnh trên máy chủ từ xa. Nếu bạn chỉ có các đặc quyền của người dùng và không có gì, hãy thử tạo test.phptập lệnh:

<pre>
<?php
print_r(apache_get_modules());
?>
</pre>

Mặc dù nó sẽ chỉ hoạt động nếu PHP được cài đặt như mod_php.


4
Ngoài ra, bạn sẽ muốn không hiển thị công khai này. Có thể muốn hạn chế kết quả đó cho khách hàng với IP của quản trị viên. Và bạn sẽ muốn xóa tập lệnh đó ngay khi bạn hoàn thành nó. Vì phòng thủ theo chiều sâu; không làm cho nó dễ dàng hơn nó cần phải được.
Bắn Parthian

28

Có lẽ điều này sẽ giúp cho một số người trên host chia sẻ không có quyền truy cập vào httpd, apachectlhoặc các quá trình:

Các mô-đun kích hoạt: ls /etc/apache2/mods-enabled/

Các mô-đun có sẵn: ls /etc/apache2/mods-available/


Dưới đây là danh sách đầy đủ, apache2ctl lọc chúng
jgpATs2w


13

Tôi nghĩ rằng thực sự có ba câu hỏi ở đây. Tôi không chắc chắn những gì bạn đang hỏi.

  • Những mô-đun nào bạn có trên đĩa. Tất cả các mô-đun bạn có thể sử dụng là gì.

Điều này sẽ (thường) trong thư mục mô-đun phân phối apache của bạn, thường là / etc / httpd / mô-đun /

  • Những mô-đun là bất kỳ trường hợp cụ thể được cấu hình để chạy.

Điều này có thể được kiểm tra bằng / usr / sbin / httpd -M, ít nhất là đối với apache hệ thống cơ sở. Nếu bạn muốn kiểm tra một tệp cấu hình cụ thể / usr / sbin / httpd -M -f / path / to / config / file

  • Có chuyện gì thế

Để có được nhiều thông tin, bạn có thể xem thông tin đó bằng http: // machinename / server-information / Cái này không được cấu hình theo mặc định, bạn phải định cấu hình nó. Một chút rò rỉ thông tin, vì vậy hãy định cấu hình nó vì vậy chỉ người dân địa phương có thể nhìn thấy nó.

Nếu bạn đang sử dụng máy và bạn có quyền truy cập để trở thành người dùng đang chạy, bạn cũng có thể xem những gì được tải bằng cách kiểm tra quy trình. Bạn có thể tìm thấy quy trình cha mẹ với:

ps -ef | gawk '/httpd/ && $3 == 1{print $2}'

Sau đó kiểm tra

cat /proc/PID_FROM_ABOVE/maps

1
Thông tin hữu ích nhưng vì OP đang sử dụng Ubuntu, tên tệp và vị trí khác nhau - ví dụ: / usr / sbin / apache2 thay vì httpd và ps -ef | gawk '/ apache2 / && $ 3 == 1 {print $ 2}' Vị trí của các mô-đun được xử lý khác nhau, với các thư mục con có sẵn mod và mod
Linker3000

Cảm ơn @ Linker3000 ... Bạn nói đúng, đây là dành cho RedHat / Centos, tôi sẽ để bình luận của bạn về cách chuyển đổi sang Ubuntu
Rich Homolka

11

Nếu bạn đang httpdsử dụng Redhat / CentOS, được sử dụng thay cho apache2ctl.

Điều này có nghĩa là bạn cần sử dụng

httpd -M

Tuy nhiên, httpdgần như không bao giờ trong con đường bạn mong đợi.

Tôi có thể xác nhận trên CentOS 5.8 đường dẫn thực tế là /usr/sbin/httpd.

/usr/sbin/httpd -M

Nhưng nếu đó không phải là con đường, bạn có thể khám phá nó. Đây là cách tôi có thể làm như vậy.

Đầu tiên, tôi kiểm tra daemon đang được sử dụng để kiểm soát nó.

less /init.d/httpd

Khoảng 40ish

# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/sbin/apachectl
httpd=${HTTPD-/usr/sbin/httpd}
prog=httpd

Mà nói với tôi chính xác nơi để tìm thấy nó. Hi vọng điêu nay co ich.



3

Trên gentoo của tôi, tôi có thể thực thi apache2ctl modulesvà xem các mô-đun được liệt kê.


2

Kiểm tra từ bên trong tập lệnh php (cho mod_xsendfile):

if (in_array(PHP_SAPI, array('apache','apache2filter','apache2handler'))
  && in_array('mod_xsendfile', apache_get_modules()))
  \\doSomething();

Việc kiểm tra PHP_SAPI là loại trừ khi php chạy dưới dạng CGI, vì apache_get_modules () không hoạt động trong ngữ cảnh đó. Ngoài ra, nếu điều này được chạy trên php <5.0.0, chỉ apache2handlerbối cảnh sẽ tạo ra kết quả mong đợi.


1

Tôi đã tạo ra một kịch bản python nhỏ để giúp bạn với nó. Vui lòng xem tại https://github.com/zioalex/unuse_apache_modules

Đây là những gì bạn có thể mong đợi từ nó:

curl http://localhost/server-info > http_modules_test.txt
cat http_modules_test.txt| python find_unused_apache_mod.py

1
Module name mod_python.c
Configuration Phase Participation: 4
Request Phase Participation: 11
Current Configuration: 3

2
Module name mod_version.c
Configuration Phase Participation: 0
Request Phase Participation: 0
Current Configuration: 1

3
Module name mod_proxy_connect.c
Configuration Phase Participation: 0
Request Phase Participation: 0
Current Configuration: 0

To remove safely:
 ['mod_proxy_connect.c']
POPPED:  mod_proxy_connect.c

To KEEP:  ['mod_python.c', 'mod_version.c', 'mod_proxy_connect.c']
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.