tra-loi-cau-hoi-phat-trien-web.com

Làm cách nào để biết tệp cấu hình mà Apache đang sử dụng?

Tôi đang cố gắng thiết lập máy chủ ảo trên Mac OS X. Tôi đã sửa đổi httpd.conf và khởi động lại máy chủ, nhưng không có may mắn nào để nó hoạt động. Hơn nữa, tôi nhận thấy rằng nó không phục vụ các tệp trong DocumentRoot được đề cập trong httpd.conf (Thư viện/Máy chủ web/Tài liệu), nhưng trong một thư mục khác (/ usr/local/Apache2/htdocs). Tôi không thấy thư mục này được đề cập ở bất cứ đâu trong httpd.conf. Hơn nữa, PHP hoạt động, nhưng dòng "LoadModule php5_module" được nhận xét. Điều này khiến tôi nghĩ rằng nó đang sử dụng một tệp .conf khác. Làm cách nào tôi có thể tìm ra cấu hình nào thực sự được tải?

Cập nhật: Tôi vừa xóa httpd.conf và Apache hoạt động giống nhau sau khi khởi động lại, vì vậy nó chắc chắn không sử dụng nó!

37
Claudiu

Với bất kỳ ứng dụng * nix nào, phương pháp đơn giản nhất là truy vấn chính nhị phân. Trong trường hợp của httpd, tôi tưởng tượng quá trình sẽ giống như thế này:

$ whereis httpd
/usr/sbin/httpd
$ /usr/sbin/httpd -V
Server version: Apache/2.2.11 (Unix)
Server built:   Jun 17 2009 14:55:13
Server's Module Magic Number: 20051115:21
Server loaded:  APR 1.2.7, APR-Util 1.2.7
Compiled using: APR 1.2.7, APR-Util 1.2.7
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_FLOCK_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"
 -D SUEXEC_BIN="/usr/bin/suexec"
 -D DEFAULT_PIDLOG="/private/var/run/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/Apache_runtime_status"
 -D DEFAULT_LOCKFILE="/private/var/run/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="/private/etc/Apache2/mime.types"
 -D SERVER_CONFIG_FILE="/private/etc/Apache2/httpd.conf"

Như bạn có thể thấy - OS X của tôi cho biết tệp nhị phân, nếu không được hướng dẫn khác, sẽ sử dụng tệp cấu hình: / private/etc/Apache2/httpd.conf

Nếu điều đó không có ích, có lẽ gợi ý của Christopher về tìm là bước tiếp theo.

47
Zayne S Halsall

Có một câu hỏi khác về serverfault liên quan đến this . Nếu bạn đang sử dụng máy chủ dựa trên debian, bạn có thể sử dụng Apache2ctl để xác định tập tin cấu hình nào đang được sử dụng:

Apache2ctl -V

Thêm về điều này:

Cách tìm hiểu httpd.conf Apache đang sử dụng khi chạy

18
chrisjlee

Thử

ps ax | grep httpd

và bạn nên (có thể) có được đầu ra như

1633   ??  Ss     0:00.21 /usr/sbin/httpd -f /etc/httpd.conf

Ngoài ra, làm thế nào chính xác là bạn đang khởi động lại máy chủ? Chỉ tò mò trong trường hợp bạn bằng cách nào đó không thực sự đọc lại tệp cấu hình.

11
msanford

Bởi vì một số cấu hình sử dụng ứng dụng Máy chủ, pha hoặc bất cứ thứ gì và vì một lớp lót FTW:

$(ps ax -o comm | grep -m 1 httpd) -V | grep SERVER_CONFIG_FILE

Lệnh này thực hiện như sau:

  • Tìm một quá trình httpd hoạt động
  • Thông tin cấu hình đầu ra
  • Grep tập tin cấu hình

Đã thử nghiệm trên Sierra & El Capitan

3
Creaforge

Đầu tiên, hãy kiểm tra tập lệnh khởi động nào cho Apache. Đối với macOS, nó phải là/Library/LaunchDaemons. Điều đó có thể bao gồm một thư mục làm việc, hoặc thông tin tương tự.

Bạn cũng có thể gỡ lỗi chính quá trình đang chạy với dtruss. Bạn có thể kết nối với quá trình đang chạy bằng cách sử dụng dtruss -p <pid>. Sau đó, nếu bạn HUP nó, bạn có thể xem qua đầu ra để xem nó lấy cấu hình của nó từ đâu. Cách khác, chỉ cần khởi động Apache bằng cách gọi trực tiếp dtruss bằng dtruss start_Apache_command.

Bạn luôn có thể thực hiện tìm kiếm trên toàn hệ thống cho httpd.conf bằng find / -name httpd.conf.

0
Christopher Karel