[Apache] Hướng dẫn cài đặt compile Apache 2.2/2.4 trên CentOS/RHEL 6/7

Trong bài viết này, mình sẽ hướng dẫn các bạn compile Apache source code version 2.2/2.4 để cài đặt chương trình Web Server Apache trên CentOS/RHEL 6/7 thay vì cài đặt bằng cách sử dụng chương trình ‘yum‘. Nếu bạn quan tâm cài đặt nhanh chóng dịch vụ Web Server Apache trên CentOS qua YUM thì đọc bài dưới nhé.

Xem thêm:
– Hướng dẫn cài đặt Apache trên CentOS – Web Server Apache

Web Server Apache là gì ?

Thế Apache là gì ? Apache là chương trình dịch vụ Web Server miễn phí nổi tiếng nhất trên thế giới. Apache Web Server ban đầu được viết cho Unix, nhưng bây giờ Apache đã hỗ trợ các nền tảng khác như Microsoft Windows, MacOS, Linux (Redhat / CentOS / Fedora / Debian / Ubuntu …). Mặc dù miễn phí, Apache Web Server có nhiều tính năng mạnh mẽ và hỗ trợ nhiều ngôn ngữ lập trình web bao gồm perl, Python, và PHP. Với một cộng đồng hỗ trợ người dùng rất lớn, ta có thể dễ dàng tìm thấy nhiều người sử dụng giúp đỡ vấn đề của ta và chia sẻ kinh nghiệm nếu một vấn đề được tìm thấy trên thế giới.

Việc compile source Apache mang lại rất nhiều lợi ích, từ việc dễ quản lý tắt/bật các module cần thiết đến cài đặt tương thích hệ thống server hơn so với ‘yum‘. Tuy nhiên hoạt động biên dịch (compile) thường phức tạp hơn nên bạn cần kiên nhẫn chịu khó. Vì vậy mình sẽ hướng dẫn các bạn các bước biên dịch mã nguồn web server Apache (không cài đặt module đính kèm).

1. Cài đặt các gói phần mềm tiên quyết

– Đầu tiên chúng ta cần đảm bảo hệ thống có các chương trình phần mềm hỗ trợ cho việc biên dịch các ứng dụng source code. Dưới đây chúng ta sẽ sử dụng Repo EPEL cho các chương trình cài đặt cơ bản.

# yum install epel-release -y
# yum groupinstall "Developer Tools" -y
# yum install gcc-c++ autoconf gcc* wget lynx libtool apr-devel apr-util-devel apr apr-util pcre pcre-devel openssl openssl-devel zlib zlib-devel –y

 
2. Cài đặt gói chương trình Apache

– Đầu tiên thì mình muốn xác định lần nữa là các bạn có thể sử dụng bài hướng dẫn này để cài đặt cho gói ứng dụng Apache v2.2.xv2.4.x đều thành công. Ở bài viết này mình sử dụng bản ‘v2.2‘ Apache để hướng dẫn, cách làm với version ‘v2.4‘ cũng tương tự không khác gì đâu.
– Nhưng do version v2.4.x yêu cầu các phiên bản thư viện APR/APR-util, PCREOpenSSL nên ở các phiên bản mới nhằm tương thích với các hoạt động của web server Apache. Mà tiếc thay là nếu sử dụng các phiên bản cài đặt từ repo với ‘yum‘ thì đa phần là các phiên bản cũ hơn nhiều so với phiên bản mới nhất của các thư viện.

Logo dịch vụ Apache 2.2
– Nên dù đã cài đặt một số phần mềm thư viện tương ứng ở phần 1, nhưng mình vẫn sẽ sử dụng cách thức sau để cài đặt các phiên bản mới của các thư viện cần thiết cho dịch vụ Apache, để đảm bảo tương thích với cả 2 phiên bản của Apache.
– Như vậy cần lưu ý nữa là các thư viện này, bạn có thể biên dịch Apache với thư viện được cài đặt thông qua ‘yum‘ chứ không cần download mới như mình hướng dẫn.
– Các thư viện cài đặt chung với source Apache, phiên bản mới nhất tính đến thời điểm viết bài hướng dẫn này gồm :
+ APR v1.5.2
+ APR util v1.5.4
+ PCRE v8.39 (8.30.x cho Apache 2.4) | PCRE v8.21 trở xuống (8.21 max cho Apache 2.2)
+ OpenSSL v1.0.2j

– Download các source thư viện vào thư mục chung để dễ quản lý khi biên dịch Apache. Như vậy các bạn cần lưu ý download phần PCRE v8.30.x và v8.21.x sẽ phân loại cho từng phiên bản Apache. 
– Trong bài này demo bằng cài đặt Apache 2.2.x nên mình xài PCRE v8.21, nếu bạn cài Apache 2.4.x thì có thể sử dụng phiên bản PCRE mới hơn.

# cd /usr/local/src
# wget -O apr-1.5.2.tar.gz http://www-us.apache.org/dist//apr/apr-1.5.2.tar.gz
# wget -O apr-util-1.5.4.tar.gz http://www-us.apache.org/dist//apr/apr-util-1.5.4.tar.gz
# wget --no-check-certificate -O pcre-8.21.tar.gz https://sourceforge.net/projects/pcre/files/pcre/8.21/pcre-8.21.tar.gz/download
# wget --no-check-certificate -O openssl-1.0.2j.tar.gz https://www.openssl.org/source/openssl-1.0.2j.tar.gz
# ll
total 16472
-rw-r--r-- 1 root root 1031613 Apr 29 2015 apr-1.5.2.tar.gz
-rw-r--r-- 1 root root 874044 Sep 20 2014 apr-util-1.5.4.tar.gz
-rw-r--r-- 1 root root 7583841 Jul 17 2015 httpd-2.2.31.tar.gz
-rw-r--r-- 1 root root 5307912 Sep 26 17:04 openssl-1.0.2j.tar.gz
-rw-r--r-- 1 root root 2062258 Jun 18 01:00 pcre-8.39.tar.gz

 
– Download source Apache v2.2 hoặc v2.4.
+ Version 2.2

# cd /usr/local/src
# wget -O httpd-2.2.31.tar.gz http://www-us.apache.org/dist//httpd/httpd-2.2.31.tar.gz

 
+ Version 2.4

# cd /usr/local/src
# wget -O httpd-2.4.23.tar.gz http://www-us.apache.org/dist//httpd/httpd-2.4.23.tar.gz

 
– Tiến hành giải nén các thư mục source Apache và thư viện hỗ trợ.

# tar xvf httpd-2.2.31.tar.gz
# tar xvf apr-1.5.2.tar.gz
# tar xvf apr-util-1.5.4.tar.gz
# tar xvf pcre-8.21.tar.gz
# tar xvf openssl-1.0.2j.tar.gz

 
– Cài đặt thư viện ‘pcre‘ ở thư mục /usr/lib , để lát sử dụng binary của phiên bản PCRE mới này.

# cd /usr/local/src/
# cd pcre-8.21
# ./configure --prefix=/usr/lib/
# make && make install

 
– Di chuyển 2 thư mục source ‘apr-x‘ và ‘apr-util-x‘ vào trong thư mục con ‘./srclib’ của source Apache. Sau đó đổi tên thành ‘apr’ và ‘apr-util‘.

# cd /usr/local/src/
# cp -rp apr-1.5.2 httpd-2.2.31/srclib/apr
# cp -rp apr-util-1.5.4 httpd-2.2.31/srclib/apr-util

 
– Việc di chuyển thành 2 thư mục trên sẽ hỗ trợ cho việc biên dịch Apache với các option ‘–with-included-apr‘, nhằm giúp quá trình biên dịch nhận diện sử dụng 2 source thư viện ‘apr’ và ‘apr-util’ cho hoạt động cài đặt.

 
2.1 Compile source Apache

– Ok đến phần hấp dẫn và quan trọng nhất rồi, đó chính là phần biên dịch source code Apache.
– Ở phần này mình muốn nhấn mạnh điều này: cấu hình ở phía dưới là 1 cấu hình chuẩn cơ bản của bản thân mình áp dụng và đúc kết kinh nghiệm quản trị các hệ thống web server. Nên trong cấu hình này mình sẽ chỉ kích hoạt (enable) các module thường được sử dụng nhất và cần thiết cho các hoạt động web cơ bản và tắt (disable) những module mà mình thấy rất ít khi được đụng tới cũng như không cần thiết phải sử dụng khi chưa có nhu cầu.
– Bài viết cũng không hướng dẫn các bạn cài đặt các mode PHP Handler với Apache nhé. Mặc định khi cài như này thì sẽ hỗ trợ được mod PHP DSO, CGI.
– Nên sẽ có rất nhiều bạn có những mẫu config khác phù hợp với hoạt động và nhu cầu của các bạn. Còn dưới đây là 1 mẫu config của cá nhân nhưng phù hợp cho hoạt động web bình thường, các bạn có thể sử dụng chung với mình nếu không rành.

Logo dịch vụ Apache 2.2

– Ở config này, mình sử dụng đường dẫn thư mục là : /usr/local/apache/ , có khác biệt so với chuẩn thư mục bình thường khi cài đặt ‘httpd’ bằng ‘yum‘. Chủ yếu là 10 dòng cấu hình đầu là chỉ định thư mục cài đặt Apache, nên các bạn có thể linh động thay đổi nếu muốn.
– Mình sẽ đề xuất phần cấu hình thư mục theo chuẩn : /etc/httpd ,phía dưới sau phần này.
– Còn về các nội dung các module bị bật/tắt các bạn có thể tham khảo ở đây : https://en.wikipedia.org/wiki/List_of_Apache_modules
– Giờ ta thì chúng ta tiến hành compile thôi, bạn chỉ cần copy y nguyên phần config này là chạy ngon lành. Còn có lỗi thì bình luận vào nhé, còn các bạn đã có chuẩn configure riêng thì các bạn có thể chia sẻ chung nhé.

Các bạn có thể coi chú thích các option khi compile bằng lệnh sau :

# cd /usr/local/src/httpd-2.2.31/
# ./configure --help

 
+ Tiêu chuẩn đường dẫn : /usr/local/apache

# cd /usr/local/src/httpd-2.2.31/
# ./configure \
	"--with-mpm=prefork" \
	"--prefix=/usr/local/apache/" \
	"--exec-prefix=/usr/local/apache/" \
	"--sysconfdir=/usr/local/apache/conf" \
	"--sbindir=/usr/local/apache/bin" \
	"--bindir=/usr/local/apache/bin" \
	"--datadir=/var/www" \
	"--mandir=/usr/local/apache/man" \
	"--libdir=/usr/local/apache/lib" \
	"--libexecdir=/usr/local/apache/modules" \
	"--includedir=/usr/local/apache/include" \
	"--enable-auth" \
	"--enable-cgid" \
	"--enable-cgi" \
	"--enable-dav" \
	"--enable-dav-fs" \
	"--enable-dav-lock" \
	"--enable-deflate" \
	"--enable-dir" \
	"--enable-expires" \
	"--enable-headers" \
	"--enable-log-config" \
	"--enable-mime" \
	"--enable-mime-magic" \
	"--enable-mods-shared=most" \
	"--enable-reqtimeout" \
	"--enable-rewrite" \
	"--enable-so" \
	"--enable-ssl" \
	"--enable-suexec" \
	"--enable-status" \
	"--enable-static-support" \
	"--enable-unique-id" \
	"--enable-static-htpasswd" \
	"--enable-static-rotatelogs" \
	"--disable-asis" \
	"--disable-auth-anon" \
	"--disable-auth-dbm" \
	"--disable-auth-digest" \
	"--disable-autoindex" \
	"--disable-cache" \
	"--disable-case-filter" \
	"--disable-case-filter-in" \
	"--disable-cern-meta" \
	"--disable-disk-cache" \
	"--disable-ext-filter" \
	"--disable-file-cache" \
	"--disable-filter" \
	"--disable-imap" \
	"--disable-info" \
	"--disable-mem-cache" \
	"--disable-proxy" \
	"--disable-proxy-connect" \
	"--disable-proxy-ftp" \
	"--disable-proxy-http" \
	"--disable-speling" \
	"--disable-usertrack" \
	"--disable-version" \
	"--with-included-apr" \
	"--with-pcre=/usr/lib/bin/pcre-config" \
	"--with-ssl=/usr/local/src/openssl-1.0.2j" \
	"--enable-ssl-staticlib-deps" \
	"--enable-mods-static=ssl"

# make && make install

Tiêu chuẩn đường dẫn : /etc/httpd
– Phần config thư mục dành cho các bạn muốn sử dụng thư mục ‘/etc/httpd/‘ thường gặp khi cài bằng ‘yum‘. Tham khảo :

# ./configure \
	"--with-mpm=prefork" \
	"--prefix=/etc/httpd/" \
	"--exec-prefix=/etc/httpd" \
	"--sysconfdir=/etc/httpd/conf" \
	"--sbindir=/usr/sbin" \
	"--bindir=/usr/bin" \
	"--datadir=/var/www" \
	"--mandir=/etc/httpd/man" \
	"--libdir=/etc/httpd/lib" \
	"--libexecdir=/etc/httpd/modules" \
	"--includedir=/etc/httpd/include" \
	....
	....

 
3. Tạo start script cho dịch vụ Apache

– Do biên dịch từ source code nên chúng ta sẽ không có file start khởi động dịch vụ Apache, nên các bạn có thể download file init Apache dành cho CentOS 6 sau về sử dụng. Trên CentOS 7 thì xài ‘systemd’ nên mình sẽ cập nhật phần này cho Cent 7 sau.

Lưu ý :
– File init và systemd này được sử dụng cho đường dẫn path prefix của dịch vụ Apache là : /usr/local/apache/
– Nếu các bạn set đường dẫn prefix : /etc/httpd/ , thì các bạn có thể chỉnh sửa các thông tin trong script linh động theo đường dẫn các chương trình ‘apachectl‘ và ‘httpd‘, cùng ‘httpd.pid‘ trong file init script.

+ Init start dành cho CentOS/RHEL 6

# wget --no-check-certificate -O /etc/init.d/httpd https://cuongquach.com/download/sys/apache/init-httpd-cent6-mode.txt
# chmod +x /etc/init.d/httpd
# chkconfig httpd on

 
+ Systemd start dành cho CentOS/RHEL 7
– Đây là nội dung dành cho file start dịch vụ trên hệ thống systemd như CentOS/RHEL 7.

# vi /usr/lib/systemd/system/httpd.service

[Unit]
Description=The Apache HTTP Server

[Service]
Type=forking
EnvironmentFile=/usr/local/apache/bin/envvars
PIDFile=/usr/local/apache/logs/httpd.pid
ExecStart=/usr/local/apache/bin/apachectl start
ExecReload=/usr/local/apache/bin/apachectl graceful
ExecStop=/usr/local/apache/bin/apachectl stop
KillSignal=SIGCONT
PrivateTmp=true

[Install]
WantedBy=multi-user.target

 
– Reload lại cấu hình file start dịch vụ.

# systemctl daemon-reload
# systemctl enable httpd.service

 
4. Cấu hình Apache cơ bản

4.1 Cấu hình user chạy dịch vụ Apache Web Server

– Chúng ta sẽ cấu hình cho dịch vụ Apache sử dụng user ‘apache’ được khởi tạo để chạy dưới quyền user này, thay vì user ‘nobody’ hay ‘www-data’ hoặc ‘daemon’. Cái này là sở thích thôi, chứ các bạn để chạy dưới quyền user mặc định cũng được.
– Kiểm tra xem đã có user ‘apache’ hay chưa ?

# grep "apache" /etc/passwd
apache:x:48:48:Apache:/var/www:/sbin/nologin

 
– Nếu chưa có thì output sẽ không ra kết quả gì. Còn bây giờ thì ta sẽ khởi tạo user ‘apache’ khi chưa có và kiểm tra lại bằng lệnh như trên.

# groupadd -r apache
# useradd -r -s /sbin/nologin -d /var/www/ --no-create-home -g apache apache

 
– Cấu hình Apache chạy user ‘apache’. Tìm nội dung dòng tương ứng và cấu hình tên ‘apache’.

# vi /usr/local/apache/conf/httpd.conf
User apache
Group apache

 
4.2 Cấu hình giá trị ‘ServerName’ trong file cấu hình Apache

Giá trị này là gì ? Tại sao chúng ta phải cấu hình giá trị này khi vừa cài đặt xong ? Thực ra bạn sẽ dễ gặp lỗi như sau khi bạn khởi động dịch vụ Apache lên.

# /etc/init.d/httpd start
Starting httpd: httpd: apr_sockaddr_info_get() failed for myservername,
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

 
Lúc này bạn nên đọc qua bài viết sau để biết fix lỗi trên nhé :

[Apache] Lỗi “httpd: apr_sockaddr_info_get() failed” khi start dịch vụ Apache

 
4.3 Link binary Apache

– Ta cần soft link binary ‘httpd‘ và ‘apachectl‘ ra môi trường $PATH để tiện triệu gọi chương trình lệnh sử dụng.

# ln -s /usr/local/apache/bin/apachectl /usr/bin/apachectl
# ln -s /usr/local/apache/bin/httpd /usr/bin/httpd

 
5. Khởi động dịch vụ Apache

– Khởi động dịch vụ Apache lên và tiến hành kiểm tra.

+ Trên CentOS 6

# /etc/init.d/httpd start


+ Trên CentOS 7

# systemctl start httpd.service

 
– Kiểm tra xem đã listen trên port 80 hay chưa ?

# netstat -atnp | grep ":80"
tcp 0 0 :::80 :::* LISTEN 10641/httpd

 
– Kiểm tra xem tiến trình ‘httpd‘ đã chạy hay chưa ?

# ps aux | grep "httpd"
root 10641 0.0 0.3 144912 3228 ? Ss 07:54 0:00 /usr/local/apache/bin/httpd
apache 10646 0.0 0.2 144840 2092 ? S 07:54 0:00 /usr/local/apache/bin/httpd
apache 10647 0.0 0.2 145048 2176 ? S 07:54 0:00 /usr/local/apache/bin/httpd
apache 10648 0.0 0.2 145048 2176 ? S 07:54 0:00 /usr/local/apache/bin/httpd
apache 10649 0.0 0.2 145048 2176 ? S 07:54 0:00 /usr/local/apache/bin/httpd
apache 10650 0.0 0.2 145048 2176 ? S 07:54 0:00 /usr/local/apache/bin/httpd
apache 10651 0.0 0.2 145048 2176 ? S 07:54 0:00 /usr/local/apache/bin/httpd

 
– Truy cập địa chỉ IP server port 80 trên trình duyệt web. Lưu ý, nhớ đảm bảo tường lửa hệ thống đã mở port 80 chiều IN cho Apache trên server.
– Thấy hiện ra đoạn text ‘It’s works‘ hoặc nội dung biểu tượng Apache là thành công.

Phù thế là xong bài hướng dẫn này rồi. Dài ngoằng luôn. Các bạn cứ mạnh dạn bình luận góp ý cho mình nhé.

 

Previous article[PHP] Chương trình ‘phpize’ là gì ? ‘php-config’ là gì ? khi compile PHP
Next article[PHP] Hướng dẫn cài đặt PHP Redis Extension cho PHP
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !