apache2: Nhận danh sách các trình xử lý đã đăng ký


10

Có thể, để có được một danh sách tất cả các xử lý từ apache? Với setHandler có thể tạo trình xử lý.

Một cách sử dụng có thể là thêm một trình xử lý cho một phần mở rộng tệp cụ thể ( addHandler ). Biết tất cả các trình xử lý có thể và mã định danh của chúng sẽ giúp dễ dàng quá trình khớp chúng với phần mở rộng tệp (hoặc trong trường hợp trình xử lý URL tạo danh sách các URL có thể).

Các trình xử lý phải được quản lý trong lõi apache trong một số loại danh sách - làm thế nào có thể đưa danh sách này ra?

Câu trả lời:


2

Apache không hiển thị danh sách các trình xử lý được cấu hình. Không sử dụng apachectl, không phải với bất cứ điều gì khác.

Phương pháp tốt nhất mà tôi có thể tìm thấy để có được danh sách các trình xử lý được cấu hình là chỉ cần grep thư mục cấu hình Apache Handlerđể bắt tất cả AddHandlerSetHandlerkhai báo.

Dành cho máy chủ dựa trên Debian (Ubuntu)

$ grep -ir "Handler" /etc/apache2/*
mods-enabled/php5.conf: SetHandler application/x-httpd-php
mods-enabled/php5.conf: SetHandler application/x-httpd-php-source
apache2.conf:           SetHandler server-status
mods-available/info.conf:    SetHandler server-info
mods-available/ldap.conf:    SetHandler ldap-status
mods-available/status.conf:  SetHandler server-status
mods-available/php5.conf:    SetHandler application/x-httpd-php
mods-available/php5.conf:    SetHandler application/x-httpd-php-source
sites-available/default:     AddHandler cgi-script .cgi
sites-enabled/000-default:   AddHandler cgi-script .cgi

Dành cho máy chủ lưu trữ dựa trên Redhat (Fedora, CentOS)

$ grep -ir "Handler" /etc/httpd/*
conf.d/php.conf:  AddHandler php5-script .php
conf/httpd.conf:  #AddHandler cgi-script .cgi
conf/httpd.conf:  #AddHandler send-as-is asis
conf/httpd.conf:  AddHandler type-map var
conf/httpd.conf:  #ErrorDocument 404 "/cgi-bin/missing_handler.pl"
conf/httpd.conf:     AddHandler type-map var
conf/httpd.conf:#    SetHandler server-status
conf/httpd.conf:#    SetHandler server-info
conf.d/fcgid.conf:   AddHandler fcgid-script fcg fcgi fpl
conf.d/perl.conf:#   SetHandler perl-script
conf.d/perl.conf:#   SetHandler perl-script

Lưu ý rằng không phải tất cả các trình xử lý được tìm thấy trên thực tế đã được đăng ký! Tìm kiếm trong mods-enabled(Debian) và bỏ qua các dòng bắt đầu bằng #cách thu hẹp chỉ các trình xử lý đã đăng ký.

Theo đề xuất của Jenny trong các bình luận, các dòng bình luận có thể được loại bỏ bằng cách lọc đầu ra với grep -Pv '^[^ ]*:\s*#'. Đây là lệnh cuối cùng cho các máy dựa trên Debian:

$ grep -ir "Handler" /etc/apache2/* | grep -Pv '^[^ ]*:\s*#'

Và đối với các máy dựa trên Redhat:

$ grep -ir "Handler" /etc/httpd/* | grep -Pv '^[^ ]*:\s*#'

Trong các bình luận, người dùng gogoud cung cấp một cách bổ sung để loại bỏ các trình xử lý nhận xét, do đó chỉ trả về các trình xử lý đã đăng ký:

// Debian or Ubuntu
$ grep -R "Handler" /etc/apache2/*enabled* | sed 's/#.*//;/^[^:]*:\s*$/d'

// Redhat, CentoOS, Fedora
$ grep -R "Handler" /etc/httpd/*enabled* | sed 's/#.*//;/^[^:]*:\s*$/d'

2
Để loại bỏ các trình xử lý nhận xét, sử dụng một số phép thuật tìm và grep:find /etc/httpd/ -type f -exec grep -H -v '#' {} \; | grep Handler
Jenny D

@JennyD: Tôi nghĩ rằng sẽ xóa các dòng có nhận xét sau khi khai báo, chẳng hạn như AddHandler cgi-script .cgi # Ben needs CGI.
dotancohen

1
Thật. Bạn có thể thực hiện với egrepvà một biểu thức chính quy phù hợp, được để lại như một bài tập cho người đọc (thật không may là tôi phải thực hiện một số công việc được trả tiền ngay bây giờ ...)
Jenny D

@JennyD: Thử thách được chấp nhận! Tôi đã thêm bộ lọc grep cho các dòng nhận xét. Suy nghĩ tốt, cảm ơn!
dotancohen

Tại sao các downvote đột ngột? Câu trả lời này trực tiếp trả lời câu hỏi và thậm chí bao gồm các ví dụ cho hai biến thể Linux phổ biến nhất. Nếu câu trả lời có thể được cải thiện tôi sẽ đánh giá cao một số lời chỉ trích mang tính xây dựng .
dotancohen

0

Đây không phải là những gì bạn muốn, nhưng nếu bạn kích hoạt server-infotrình xử lý trong cấu hình của mình, đầu ra sẽ cho bạn biết mô-đun nào có trình xử lý và không, như thế này:

Module Name: mod_negotiation.c
Content handlers: yes
....
Module Name: mod_mime.c
Content handlers: none
....

Đây là với Apache 2.2, vì vậy có lẽ các phiên bản sau này sẽ cung cấp cho bạn đầu ra hữu ích hơn.


Cảm ơn bạn, tuy nhiên tôi không thấy thông tin đó. Trang này hiển thị đầu ra của server-info. Tuy nhiên, xin lưu ý rằng đầu ra là một trang tĩnh được sao chép từ máy chủ thực và được phục vụ cho bạn thông qua Raspberry Pi.
dotancohen
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.