कैसे चेक करें कि कौन से अपाचे मॉड्यूल सक्षम / स्थापित हैं?


जवाबों:


464

आप उबंटू पर हैं इसलिए कोशिश करें:

apache2ctl -M

11
apache2ctl -M अच्छा काम करता है
उडो

3
apache2 -M इस त्रुटि का परिणाम हैapache2: bad user name ${APACHE_RUN_USER}
ud

4
पर्याप्त रूप से उचित - यह इस तथ्य के कारण है कि आप कमांड नहीं चला रहे हैं क्योंकि अपाचे रन टाइम उपयोगकर्ता (शायद www-डेटा) अपाचे कॉन्फ़िगरेशन में परिभाषित किया गया है। इसे ठीक करने का एक तरीका है लेकिन आप apache2ctl से चिपक सकते हैं।
लिंकर 3000

9
sudo apache2ctl -M | sort
mmdemirbas

4
ध्यान दें कि कई उपयोगी विकल्प (झंडे) हैं, apache2ctlलेकिन वे न तो मेन्यू में सूचीबद्ध हैं और न ही अंदर apache2ctl --help। ऐसा इसलिए है क्योंकि वे के माध्यम से सौंप दिया जाता है httpd। वे केवल httpd प्रलेखन में सूचीबद्ध हैं ।
लुत्ज प्रेफेल्ट

117

httpd -M आपको बताएगा कि कौन से मॉड्यूल अंतर्निहित या साझा किए गए हैं।


हम्म ... मैं एक "बैश: httpd: कमांड नहीं मिला" जब http -M को रूट के रूप में लॉन्च कर रहा हूं
ud

तो फिर httpdनिष्पादन योग्य के लिए पूर्ण पथ निर्दिष्ट करें ।
इग्नासियो वाज़क्वेज़-अब्राम्स

9
@ इग्नासियोवेज़ज़-अब्राम्स: उबंटू (और अन्य डेबियन आधारित वितरण) पर, नाम है apache2और नहीं httpd, यही कारण है कि यह नहीं मिला है।
डैनियल एंडरसन

3
अपाचे Redhat पर httpd है। यदि यह आपके लिए काम नहीं करता है, तो अन्य उत्तरों में से एक का प्रयास करें।
जैक्स_डिप्रेशन

3
CentOS भी
Apache2 के

37

यदि आप दूरस्थ सर्वर पर कमांड नहीं चला सकते हैं, तो उपरोक्त उत्तरों में से कुछ भी काम नहीं करता है। यदि आपके पास केवल "उपयोगकर्ता" विशेषाधिकार हैं या कोई भी test.phpस्क्रिप्ट बनाने का प्रयास नहीं करता है :

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

हालांकि यह तभी काम करेगा जब PHP को इनस्टॉल किया जाएगा mod_php


4
इसके अलावा, आप सार्वजनिक रूप से दिखाई नहीं देना चाहते हैं। एक व्यवस्थापक के आईपी के साथ ग्राहक के लिए उस परिणाम को प्रतिबंधित करना चाहते हो सकता है। और आप उस स्क्रिप्ट को जल्द से जल्द हटाना चाहेंगे। क्योंकि गहराई में रक्षा; इसे जितना आसान होना चाहिए उतना आसान मत बनाओ।
पार्थियन

28

हो सकता है कि यह करने के लिए कोई उपयोग के साथ साझा मेजबान पर कुछ लोगों के लिए मदद मिलेगी httpd, apachectlया प्रक्रियाओं:

सक्षम मॉड्यूल: ls /etc/apache2/mods-enabled/

उपलब्ध मॉड्यूल: ls /etc/apache2/mods-available/


यहाँ पूरी सूची है, apache2ctl उन्हें फ़िल्टर करें
jgpATs2w


13

मुझे लगता है कि वास्तव में यहां तीन प्रश्न हैं। मुझे यकीन नहीं है जो आप पूछ रहे हैं।

  • आपके पास डिस्क पर कौन से मॉड्यूल हैं। वे सभी मॉड्यूल जो आप उपयोग कर सकते हैं।

यह आमतौर पर आपके अपाचे वितरण के मॉड्यूल निर्देशिका में होगा, आमतौर पर / आदि / httpd / मॉड्यूल /

  • क्या मॉड्यूल चलाने के लिए कॉन्फ़िगर किया गया कोई विशिष्ट उदाहरण है।

इसे कम से कम आधार प्रणाली अपाचे के लिए / usr / sbin / httpd -M के साथ चेक किया जा सकता है। यदि आप किसी विशिष्ट विन्यास फाइल / usr / sbin / httpd -M -f / path / to / config / file पर जांचना चाहते हैं

  • क्या चल रहा है अपाचे में

बहुत सारी जानकारी प्राप्त करने के लिए, आप इसे http: // machinename / server-info / के साथ देख सकते हैं / यह डिफ़ॉल्ट रूप से कॉन्फ़िगर नहीं किया गया है, आपको इसे कॉन्फ़िगर करना होगा । इसकी थोड़ी जानकारी लीक है, इसलिए इसे कॉन्फ़िगर करें। इसलिए केवल स्थानीय लोग ही इसे देख सकते हैं।

यदि आप मशीन पर हैं और आपके पास रनिंग उपयोगकर्ता होने की पहुँच है, तो आप यह भी देख सकते हैं कि प्रक्रिया की जाँच करके क्या लोड किया गया है। आप के साथ मूल प्रक्रिया पा सकते हैं:

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

फिर बाहर की जाँच करें

cat /proc/PID_FROM_ABOVE/maps

1
उपयोगी जानकारी लेकिन क्योंकि ओपी उबंटू का उपयोग कर रहा है, फ़ाइल नाम और स्थान अलग हैं - उदाहरण के लिए: http: / usr / sbin / apache2 बजाय httpd, और ps -ef | gawk '/ apache2 / && $ 3 == 1 {प्रिंट $ 2}' मॉड्यूल का स्थान अलग-अलग तरीके से संभाला जाता है, मॉड्स-उपलब्ध और मॉड-सक्षम सबफ़ोल्डर्स के साथ
Linker3000

धन्यवाद @ Linker3000 ... आप सही कह रहे हैं, यह रेडहैट / सेंटोस के लिए है, मैं आपकी टिप्पणी को उबंटू में बदलने का तरीका
बताऊंगा

11

यदि आप Redhat / CentOS पर हैं, के httpdस्थान पर उपयोग किया जाता है apache2ctl

इसका मतलब है आप का उपयोग करने की आवश्यकता है

httpd -M

हालाँकि, httpdलगभग कभी भी आप जिस रास्ते की उम्मीद करते हैं।

मैं CentOS 5.8 पर पुष्टि कर सकता हूं कि वास्तविक रास्ता क्या है /usr/sbin/httpd

/usr/sbin/httpd -M

लेकिन अगर वह मार्ग नहीं है, तो आप उसे खोज सकते हैं। यहाँ है कि मैं ऐसा कैसे कर पा रहा था।

सबसे पहले, मैंने इसे नियंत्रित करने के लिए उपयोग किए जा रहे डेमन की जाँच की।

less /init.d/httpd

चारों ओर लाइन 40ish

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

जिसने मुझे बताया कि वास्तव में इसे कहां खोजना है। उम्मीद है की यह मदद करेगा।




2

Php स्क्रिप्ट के भीतर से जाँच करना (mod_xsendfile के लिए):

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

PHP_SAPI के लिए जाँच को बाहर करना है जब php CGI के रूप में चल रहा है, क्योंकि apache_get_modules () उस संदर्भ में काम नहीं करता है। इसके अतिरिक्त, यदि इसे php <5.0.0 पर चलाया जाता है, तो केवल apache2handlerसंदर्भ अपेक्षित परिणाम देगा।


1

मैंने आपकी मदद करने के लिए एक छोटा अजगर लिपि बनाई। कृपया https://github.com/zioalex/unused_apache_modules पर एक नज़र डालें

यह वही है जो आप इससे उम्मीद कर सकते हैं:

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']
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.