Cách khắc phục các lỗi Apache thường gặp
Loạt bài hướng dẫn này giải thích cách khắc phục sự cố và sửa chữa một số lỗi phổ biến nhất mà bạn có thể gặp phải khi sử dụng web server Apache .Mỗi hướng dẫn trong loạt bài này bao gồm mô tả về các lỗi cấu hình Apache, mạng, hệ thống file hoặc quyền phổ biến. Loạt bài này bắt đầu với tổng quan về các lệnh và file log mà bạn có thể sử dụng để khắc phục sự cố Apache. Các hướng dẫn tiếp theo kiểm tra các lỗi cụ thể một cách chi tiết.
Có ba lệnh chính và một tập hợp các vị trí log phổ biến mà bạn có thể sử dụng để bắt đầu khắc phục lỗi Apache. Nói chung khi bạn khắc phục sự cố Apache, bạn sẽ sử dụng các lệnh này theo thứ tự được chỉ ra ở đây, sau đó kiểm tra file log để tìm dữ liệu chẩn đoán cụ thể.
Các lệnh mà bạn thường sử dụng để khắc phục sự cố Apache trên hầu hết các bản phân phối Linux là:
-
systemctl
- Được sử dụng để điều khiển và tương tác với các dịch vụ Linux thông qua trình quản lý dịch vụsystemd
. -
journalctl
- Được sử dụng để truy vấn và xem log được tạo bởisystemd
. -
apachectl
- Khi khắc phục sự cố, lệnh này được sử dụng để kiểm tra cấu hình của Apache.
Các lệnh này, cách sử dụng chúng và vị trí log của Apache nơi bạn có thể tìm thấy thông tin bổ sung về lỗi được mô tả chi tiết hơn trong các phần sau.
Lưu ý : Trên hệ thống Debian và Ubuntu, tên quá trình và dịch vụ Apache là apache2
, trong khi trên CentOS, Fedora và các hệ thống có nguồn root RedHat khác, tên dịch vụ và quy trình của Apache là httpd
. Ngoài sự khác biệt giữa tên dịch vụ và tiến trình đang chạy, khởi động, dừng và kiểm tra trạng thái của Apache, cũng như log với journalctl
phải hoạt động giống nhau trên bất kỳ hệ thống Linux nào sử dụng systemd
để quản lý dịch vụ Apache. Đảm bảo sử dụng đúng tên cho bản phân phối Linux của bạn.
Lệnh systemctl
cho Apache
Để khắc phục các lỗi Apache thông thường bằng trình quản lý dịch vụ systemd
, bước đầu tiên là kiểm tra trạng thái của các tiến trình Apache trên hệ thống. Các lệnh systemctl
sau sẽ truy vấn systemd
về trạng thái của các quy trình của Apache.
Trên hệ thống Ubuntu và Debian chạy:
- sudo systemctl status apache2.service -l --no-pager
Cờ -l
sẽ đảm bảo kết quả không bị cắt ngắn hoặc có kích thước nhỏ. Cờ --no-pager
sẽ đảm bảo kết quả sẽ chuyển trực tiếp đến terminal của bạn mà không yêu cầu bất kỳ tương tác nào từ phía bạn để xem nó. Bạn sẽ nhận được kết quả như thế này:
Output● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Mon 2020-07-13 14:43:35 UTC; 1 day 4h ago Process: 929 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS) Main PID: 1346 (apache2) Tasks: 55 (limit: 4702) CGroup: /system.slice/apache2.service ├─1346 /usr/sbin/apache2 -k start . . .
Để kiểm tra quá trình Apache trên hệ thống CentOS và Fedora chạy:
- sudo systemctl status httpd.service -l --no-pager
Bạn sẽ nhận được kết quả như thế này:
Output● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2020-07-14 19:46:52 UTC; 3s ago Docs: man:httpd.service(8) Main PID: 21217 (httpd) Status: "Started, listening on: port 80" Tasks: 213 (limit: 2881) Memory: 16.6M CGroup: /system.slice/httpd.service ├─21217 /usr/sbin/httpd -DFOREGROUND . . . Jul 14 19:46:52 localhost.localdomain httpd[21217]: Server configured, listening on: port 80
Trong cả hai trường hợp, hãy comment Active
trong kết quả . Nếu server Apache của bạn không hiển thị active (running)
như được đánh dấu trong các ví dụ trước nhưng bạn mong đợi nó sẽ xảy ra, có thể đã xảy ra lỗi. Thông thường nếu có sự cố, bạn sẽ có một dòng như sau trong kết quả của bạn (lưu ý phần failed
đánh dấu):
Example Error OutputActive: failed (Result: exit-code) since Tue 2020-07-14 20:01:29 UTC; 1s ago
Nếu có vấn đề với quy trình hoặc cấu hình Apache của bạn, bạn có thể khắc phục sự cố thêm bằng cách sử dụng lệnh journalctl
.
Các lệnh journalctl
dành cho Apache
Để kiểm tra log systemd
cho Apache, bạn có thể sử dụng lệnh journalctl
. Nhật ký systemd
cho Apache thường sẽ cho biết liệu có sự cố khi khởi động hoặc quản lý tiến trình Apache hay không.
Các log này tách biệt với log lỗi và yêu cầu của Apache. journalctl
hiển thị log từ systemd
mô tả chính dịch vụ Apache, từ khi khởi động đến khi tắt, cùng với bất kỳ lỗi quy trình nào có thể gặp phải trong quá trình này.
Trên hệ thống Ubuntu và Debian sử dụng lệnh sau để kiểm tra log :
- sudo journalctl -u apache2.service --since today --no-pager
Cờ --since today
sẽ giới hạn kết quả của lệnh chỉ để ghi các mục nhập bắt đầu từ 00:00:00 của ngày hiện tại. Sử dụng tùy chọn này sẽ giúp hạn chế dung lượng các mục nhập log mà bạn cần kiểm tra khi kiểm tra lỗi. Bạn sẽ nhận được kết quả như sau:
OutputJul 14 20:12:14 ubuntu2004 systemd[1]: Starting The Apache HTTP Server... Jul 14 20:12:14 ubuntu2004 systemd[1]: Started The Apache HTTP Server.
Nếu bạn đang sử dụng hệ thống dựa trên CentOS hoặc Fedora, hãy sử dụng version này của lệnh:
- sudo journalctl -u httpd.service --since today --no-pager
Bạn sẽ nhận được kết quả như sau:
OutputJul 14 20:13:09 centos8 systemd[1]: Starting The Apache HTTP Server... . . . Jul 14 20:13:10 centos8 httpd[21591]: Server configured, listening on: port 80
Nếu có một lỗi, bạn sẽ có một dòng trong kết quả đó là tương tự như sau, với sự khác biệt chính giữa các bản phân phối Linux là nhấn mạnh yourhostname
phần:
Example Error OutputJul 14 20:13:37 yourhostname systemd[1]: Failed to start The Apache HTTP Server.
Nếu server Apache của bạn có lỗi trong log journalctl
như ví dụ trước, thì bước tiếp theo để khắc phục sự cố có thể xảy ra là điều tra cấu hình của Apache bằng công cụ dòng lệnh apachectl
.
Khắc phục sự cố với apachectl
Hầu hết các bản phân phối Linux đều có tiện ích apachectl
với Apache. apachectl
là một công cụ vô giá giúp phát hiện và chẩn đoán các sự cố cấu hình Apache.
Để khắc phục sự cố khi sử dụng apachectl
, hãy kiểm tra cấu hình Apache của bạn bằng lệnh apachectl configtest
. Công cụ sẽ phân tích cú pháp các file Apache của bạn và phát hiện bất kỳ lỗi hoặc cài đặt nào bị thiếu trước khi cố gắng khởi động server .
Chạy lệnh như thế này trên các bản phân phối dựa trên Ubuntu, Debian, CentOS và Fedora:
- sudo apachectl configtest
Cấu hình Apache hoạt động sẽ dẫn đến kết quả như sau:
OutputSyntax OK
Tùy thuộc vào bản phân phối Linux của bạn, có thể có các dòng khác xen vào với kết quả , nhưng dòng quan trọng là dòng cho biết Syntax OK
.
Nếu có lỗi trong cấu hình Apache của bạn, chẳng hạn như một chỉ thị tham chiếu đến một module chưa được kích hoạt hoặc thậm chí là một lỗi đánh máy, apachectl
sẽ phát hiện ra lỗi đó và cố gắng thông báo cho bạn về sự cố.
Ví dụ: cố gắng sử dụng các chỉ thị cho một module Apache chưa được bật sẽ dẫn đến các thông báo cấu hình apachectl configtest
như sau:
Example Error OutputAH00526: Syntax error on line 232 of /etc/apache2/apache2.conf: Invalid command 'SSLEngine', perhaps misspelled or defined by a module not included in the server configuration Action 'configtest' failed. The Apache error log may have more information.
Trong ví dụ này, module ssl
không được kích hoạt, do đó, lệnh SSLEngine
tạo ra lỗi khi cấu hình được kiểm tra. Dòng cuối cùng cũng cho biết The Apache error log may have more information
, đây là nơi tiếp theo để tìm kiếm thông tin gỡ lỗi chi tiết hơn.
Tệp log Apache
Các file log Apache là một tài nguyên rất hữu ích để khắc phục sự cố. Nói chung, bất kỳ lỗi nào bạn gặp phải trong trình duyệt hoặc ứng dụng client HTTP khác sẽ có mục nhập tương ứng trong log của Apache. Đôi khi Apache cũng sẽ xuất ra các lỗi liên quan đến cấu hình, module tích hợp và thông tin gỡ lỗi khác vào các file log của nó.
Để kiểm tra lỗi file log trong khi khắc phục sự cố Apache trên server Fedora, CentOS hoặc RedHat, hãy kiểm tra file /var/log/httpd/error_log
.
Nếu bạn đang khắc phục sự cố hệ thống dẫn xuất Debian hoặc Ubuntu, hãy kiểm tra /var/log/apache2/error.log
để tìm lỗi bằng cách sử dụng một công cụ như tail
trở less
. Ví dụ: để xem hai dòng cuối cùng của log lỗi bằng tail
, hãy chạy lệnh sau:
- sudo tail -n 2 /var/log/apache2/error.log
Thay số dòng mà bạn muốn kiểm tra thay cho số 2
trong lệnh. Trên hệ thống CentOS hoặc Fedora, file log cần kiểm tra là /var/log/httpd/error_log
.
Một lỗi ví dụ sẽ giống như những dòng sau, dù bạn đang sử dụng bản phân phối Linux nào để chạy server Apache của bạn :
Error Log Examples[Wed Jul 15 01:34:12.093005 2020] [proxy:error] [pid 13949:tid 140150453516032] (13)Permission denied: AH00957: HTTP: attempt to connect to 127.0.0.1:9090 (127.0.0.1) failed [Wed Jul 15 01:34:12.093078 2020] [proxy_http:error] [pid 13949:tid 140150453516032] [client 127.0.0.1:42480] AH01114: HTTP: failed to make connection to backend: 127.0.0.1
Hai dòng trong kết quả này là các thông báo lỗi riêng biệt. Cả hai đều tham chiếu đến module gây ra lỗi ( proxy
ở dòng đầu tiên, proxy_http
ở dòng thứ hai) và bao gồm mã lỗi dành riêng cho module . Cái đầu tiên, AH00957
, cho biết server Apache đã cố gắng kết nối với server backend (trong trường hợp này là 127.0.0.1 trên cổng 9090) bằng module proxy
nhưng không thực hiện được.
Lỗi thứ hai bắt nguồn từ lỗi đầu tiên: AH01114 là lỗi module proxy_http
cũng cho biết Apache không thể kết nối với server backend đã cấu hình để thực hiện yêu cầu HTTP.
Những dòng ví dụ này chỉ mang tính chất minh họa. Nếu bạn đang chẩn đoán lỗi với server Apache của bạn , rất có thể các dòng lỗi trong log của bạn sẽ có nội dung khác với những dòng này. Dù bản phân phối Linux của bạn là gì, định dạng của bất kỳ dòng lỗi nào trong log của bạn sẽ bao gồm module Apache có liên quan và mã lỗi, cũng như mô tả bằng text về lỗi.
Khi bạn có ý tưởng về những gì có thể gây ra sự cố với server Apache của bạn , bạn có thể tiếp tục nghiên cứu và khắc phục sự cố. Mã lỗi và mô tả văn bản đặc biệt hữu ích, vì chúng cung cấp cho bạn các thuật ngữ cụ thể và rõ ràng mà bạn có thể sử dụng để thu hẹp phạm vi các nguyên nhân có thể gây ra sự cố.
Kết luận
Khắc phục sự cố lỗi Apache có thể bao gồm chẩn đoán lỗi với chính dịch vụ, đến định vị các tùy chọn được cấu hình sai cho các module hoặc kiểm tra chi tiết các luật kiểm soát truy cập tùy chỉnh. Phần giới thiệu về chẩn đoán sự cố với Apache này giải thích cách sử dụng một số tiện ích để giúp thu hẹp các nguyên nhân có thể gây ra lỗi. Thông thường, bạn sẽ sử dụng các tiện ích này theo thứ tự giống nhau, mặc dù bạn luôn có thể bỏ qua một số tiện ích hoặc bắt đầu trực tiếp với việc kiểm tra log nếu bạn có ý tưởng chung về vấn đề có thể là gì.
Tuy nhiên, như một trình tự chung để khắc phục sự cố, cần có phương pháp và sử dụng các công cụ này theo thứ tự được mô tả. Bắt đầu khắc phục sự cố với systemctl
để kiểm tra trạng thái của server Apache. Nếu bạn cần thêm thông tin, hãy kiểm tra log systemd
cho Apache bằng lệnh journalctl
. Nếu vấn đề vẫn không rõ ràng sau khi kiểm tra journalctl
, kiểm tra cấu hình của Apache bằng apachectl configtest
là bước tiếp theo. Cuối cùng, để khắc phục sự cố chuyên sâu, việc kiểm tra các file log của Apache thường sẽ chỉ ra một lỗi cụ thể, với các thông báo chẩn đoán hữu ích và mã lỗi.
Phần còn lại của các hướng dẫn trong loạt bài này sẽ xem xét một số lỗi phổ biến mà bạn có thể gặp phải khi sử dụng Apache một cách chi tiết hơn.
Các tin liên quan
Lỗi mạng Apache AH00072: make_sock: không thể liên kết với địa chỉ2020-07-30
Lỗi cấu hình Apache AH00526: Lỗi cú pháp
2020-07-30
Cách tạo chứng chỉ SSL tự ký cho Apache trong Ubuntu 20.04
2020-07-06
Cách tạo chứng chỉ SSL tự ký cho Apache trên CentOS 8
2020-06-30
Cách bảo mật Apache bằng Let's Encrypt trên CentOS 8
2020-06-29
Cách cấu hình Apache HTTP với MPM Event và PHP-FPM trên Ubuntu 18.04
2020-05-13
Cách cài đặt web server Apache trên CentOS 8 [Quickstart]
2020-05-08
Cách bảo mật Apache bằng Let's Encrypt trên Ubuntu 20.04
2020-04-29
Cách cài đặt web server Apache trên Ubuntu 20.04 [Quickstart]
2020-04-28
Cách cài đặt web server Apache trên Ubuntu 20.04
2020-04-27