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


36

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 trong việc làm cho 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 thế nào tôi có thể tìm ra cấu hình nào đang 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ó!

Câu trả lời:


45

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 ý tìm kiếm của Christopher là bước tiếp theo.


2
Điều này sẽ không hoạt động nếu bạn đang sử dụng Apache thông qua Server.app Trong trường hợp đó, bạn sẽ cần danh sách quy trình trong câu trả lời từ @msanford serverfault.com/a/155114/187798 cho thấy Server.app bắt đầu httpd với một tệp cấu hình khác như được hiển thị ở đây từ cài đặt của tôi (Mavericks)/usr/sbin/httpd -D FOREGROUND -f /Library/Server/Web/Config/apache2/httpd_server_app.conf -D WEBSERVICE_ON
Jason S

cũng không hoạt động khi sử dụng apache được cài đặt qua macports - câu trả lời của msandord hoạt động với tôi!
pgee70


10

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, chính xác thì bạn khởi động lại máy chủ như thế nào? 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 tin cấu hình.


hm nó không có -fcờ trong đó
Claudiu

1
+1 Vì đây là câu trả lời duy nhất phù hợp với mọi trường hợp, đó là nếu bạn tự cấu hình Apache hoặc nếu bạn đang sử dụng Apache qua Server.app
Jason S

2

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


Điều $này rất quan trọng (nó không phải là dấu nhắc dòng lệnh trong trường hợp này). Nếu chuyển đổi câu lệnh trong parens thành một lệnh, chúng ta sẽ chuyển -Vcờ. Để lại kết quả trong: "lỗi cú pháp gần mã thông báo không mong đợi` -V '".
Tom Auger

0

Đầ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 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 với 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 với find / -name httpd.conf.

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.