Câu trả lời:
Bạn đang dùng Ubuntu, hãy thử:
apache2ctl -M
apache2: bad user name ${APACHE_RUN_USER}
sudo apache2ctl -M | sort
apache2ctl
như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 .
httpd -M
sẽ cho bạn biết các mô-đun được tích hợp hoặc chia sẻ.
httpd
thực thi.
apache2
và không httpd
, đó là lý do tại sao nó không được tìm thấy.
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.php
tậ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
.
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
, apachectl
hoặ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/
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.
Đ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 /
Đ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ó đượ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
Nếu bạn đang httpd
sử 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, httpd
gầ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.
Liệt kê tất cả các mô-đun kích hoạt
a2query -m
Trên gentoo của tôi, tôi có thể thực thi apache2ctl modules
và xem các mô-đun được liệt kê.
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ỉ apache2handler
bối cảnh sẽ tạo ra kết quả mong đợi.
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']