หลังจากปล่อยเว็บเซิร์ฟเวอร์ (Apache Web Server) ให้ทำงานไว้นานมากหลายปี ได้เวลาปรับปรุงเป็นเวอร์ชั่นล่าสุด เพื่อประสิทธิภาพ และเพื่อความปลอดภัย
แต่ปัญหาคือเครื่องจะปรับปรุงนี้ รัน httpd ไว้หลายโปรเซส หลายพอร์ตมาก ทำให้เริ่มงงว่า โปรเซสไหน รันจาก httpd ไฟล์ไหน ใช้คอนฟิก httpd.conf ที่ไหน
โดยดีฟอล์ตถ้าเป็น RedHat, CentOS, Fedora ไฟล์คอนฟิกของ Apache ที่ติดตั้งมากับแผ่นจะอยู่ใน /etc/httpd/conf/ แต่ถ้าคอมไพล์ Apache จาก source เอง ไดเร็คทอรีนี้ก็จะเปลี่ยนไป
หลังจากศึกษาทำความเข้าใจ เลยนำมาสรุปให้ฟัง เพื่อจะมีประโยชน์
หมายเหตุ ตัวอย่างในบทความนี้จะทดสอบกับ Apache เวอร์ชั่น 2.2.19 แต่วิธีการนี้สามารถนำไปใช้ได้กับ apache เวอร์ชั่นเก่า รวมถึงเวอร์ชั่น 2.0 ได้
ใช้คำสั่ง ps เพื่อดูโปรเซสที่รัน
[root@web ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
...
root 28859 1 0 03:34 ? 00:00:00 httpd
apache 28860 28859 0 03:34 ? 00:00:00 httpd
apache 28861 28859 0 03:34 ? 00:00:00 httpd
apache 28862 28859 0 03:34 ? 00:00:00 httpd
apache 28863 28859 0 03:34 ? 00:00:00 httpd
apache 28864 28859 0 03:34 ? 00:00:00 httpd
อย่างแรก httpd ที่รันเนี่ย อยู่ที่ไหน
หาได้จากเข้าไปดูใน /proc ตามไดเร็คทอรีย่อยเป็น PID (Process ID) ของโปรเซสที่รันด้วย root เช่นในที่นี้ PID เท่ากับ 28859 ต้องเข้าไปดูใน /proc/28859/
[root@web ~]# ls -l /proc/28859/
total 0
dr-xr-xr-x 2 root root 0 Aug 6 03:36 attr
-r-------- 1 root root 0 Aug 6 03:36 auxv
-r--r--r-- 1 root root 0 Aug 6 03:34 cmdline
-rw-r--r-- 1 root root 0 Aug 6 03:36 coredump_filter
-r--r--r-- 1 root root 0 Aug 6 03:36 cpuset
lrwxrwxrwx 1 root root 0 Aug 6 03:36 cwd -> /
-r-------- 1 root root 0 Aug 6 03:36 environ
lrwxrwxrwx 1 root root 0 Aug 6 03:36 exe -> /usr/local/sbin/httpd
...
ไฟล์ symbolic link ที่ชื่อ exe จะชึ้ไปยัง full path ของไฟล์ที่รัน
ได้ละว่าไฟล์ daemon ที่รัน อยู่ที่ไหน
ขั้นต่อไป หาไฟล์คอนฟิก httpd.conf ที่ daemon ตัวนี้ใช้
[root@web ~]# ls -l /usr/local/sbin/httpd -rwxr-xr-x 1 root root 1473263 Aug 6 03:29 /usr/local/sbin/httpd
รัน httpd ตามด้วยออปชั่น ‘-V’ (ตัวอักษร วี ใหญ่) จะบอกรายละเอียดของไฟล์ httpd
[root@web ~]# /usr/local/sbin/httpd -V Server version: Apache/2.2.19 (Unix) Server built: Aug 6 2011 03:24:26 Server's Module Magic Number: 20051115:28 Server loaded: APR 1.4.5, APR-Util 1.3.12 Compiled using: APR 1.4.5, APR-Util 1.3.12 Architecture: 64-bit Server MPM: Prefork threaded: no forked: yes (variable process count) Server compiled with.... -D APACHE_MPM_DIR="server/mpm/prefork" -D APR_HAS_SENDFILE -D APR_HAS_MMAP -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled) -D APR_USE_SYSVSEM_SERIALIZE -D APR_USE_PTHREAD_SERIALIZE -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT -D APR_HAS_OTHER_CHILD -D AP_HAVE_RELIABLE_PIPED_LOGS -D DYNAMIC_MODULE_LIMIT=128 -D HTTPD_ROOT="/usr/local/httpd-2.2.19" -D SUEXEC_BIN="/usr/local/httpd-2.2.19/bin/suexec" -D DEFAULT_PIDLOG="logs/httpd.pid" -D DEFAULT_SCOREBOARD="logs/apache_runtime_status" -D DEFAULT_LOCKFILE="logs/accept.lock" -D DEFAULT_ERRORLOG="logs/error_log" -D AP_TYPES_CONFIG_FILE="conf/mime.types" -D SERVER_CONFIG_FILE="conf/httpd.conf"
ไดเร็คทอรีหลักของ httpd (HTTPD_ROOT) คือ “/usr/local/httpd-2.2.19”
ไฟล์คอนฟิก (SERVER_CONFIG_FILE) คือ “conf/httpd.conf” ซึ่งถ้าไม่มีเครื่องหมาย “/” นำหน้า จะเป็น relative path กับ HTTPD_ROOT อีกที หรือ full path ของคอนฟิกไฟล์ httpd.conf นี้คือ /usr/local/httpd-2.2.19/conf/httpd.conf
ข้อมูลอ้างอิง
- man proc(5)