Http server in c hướng dẫn

Apache HTTP là một trong những web server được sử dụng rộng rãi nhất trên thế giới. Trong bài viết này sẽ hướng dẫn cách cài đặt web server trên CentOS 7 cách đơn giản nhất.

Giới thiệu

Máy chủ Apache HTTP cung cấp nhiều tính năng mạnh mẽ bao gồm các module có thể load dynamic, hỗ trợ phương tiện truyền thông mạnh mẽ và tích hợp rộng rãi với các phần mềm phổ biến khác.

Trong hướng dẫn này, bạn sẽ cài đặt một web Apache server với các virtual host trên server CentOS 7 của mình.

Apache

Điều kiện tiên quyết để cài đặt web server trên CentOS 7

Bạn sẽ cần những điều sau để hoàn thành hướng dẫn này:

  • Non-root user có quyền sudo được cấu hình trên server của bạn.
  • Tường lửa cơ bản được cấu hình bằng cách làm theo hướng dẫn. Các bước được đề xuất sẽ bổ sung cho máy chủ CentOS 7 mới.

Bước 1 – Cài đặt Apache

Apache có sẵn trong kho phần mềm của CentOS 7. Nghĩa là có thể cài đặt nó bằng yum package manager.

Tiếp theo, hãy cập nhật httpd package index cục bộ để nhận những thay đổi mới nhất:

sudo yum update httpd

Tiếp theo là cài đặt các gói:

sudo yum install httpd

Sau khi xác nhận cài đặt, yum sẽ cài đặt Apache và tất cả các dependencies bắt buộc.

Sau đó, bạn sẽ cài đặt firewalld trên server mình và cần mở cổng 80 để Apache phục vụ các request qua HTTP. Cụ thể, hãy bật dịch vụ http của firewalld bằng lệnh sau:

sudo firewall-cmd --permanent --add-service=http

Nếu bạn định cấu hình Apache để phục vụ nội dung HTTPs thì sẽ cần mở cổng 443 bằng cách bật dịch vụ https:

sudo firewall-cmd --permanent --add-service=https

Tiếp theo, tải lại tường lửa để các quy tắc này có hiệu lực:

sudo firewall-cmd --reload

Sau đó, khởi động và kiểm tra lại web server của bạn.

Bước 2 – Kiểm tra máy chủ Web

Apache không tự động khởi động trên CentOS sau khi hoàn tất quá trình cài đặt. Vì vậy, nó cần được khởi động theo cách thủ công để có thể tiếp tụ c cài đặt web server trên CentOS 7:

sudo systemctl start httpd

Xác minh rằng dịch vụ đang chạy bằng lệnh sau:

sudo systemctl status httpd

Bạn sẽ thấy trạng thái active khi dịch vụ đang chạy:

Output
Redirecting to /bin/systemctl status httpd.service
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2019-02-20 01:29:08 UTC; 5s ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 1290 (httpd)
   Status: "Processing requests..."
   CGroup: /system.slice/httpd.service
           ├─1290 /usr/sbin/httpd -DFOREGROUND
           ├─1291 /usr/sbin/httpd -DFOREGROUND
           ├─1292 /usr/sbin/httpd -DFOREGROUND
           ├─1293 /usr/sbin/httpd -DFOREGROUND
           ├─1294 /usr/sbin/httpd -DFOREGROUND
           └─1295 /usr/sbin/httpd -DFOREGROUND
...

Như bạn có thể thấy từ output này, đã bắt đầu có sự tiến triển tốt. Tuy nhiên, cách tốt nhất để kiểm tra là request một trang từ Apache.

Bạn có thể truy cập trang đích Apache để xác nhận phần mềm đang chạy thông qua địa chỉ IP của bạn. Nếu không biết địa chỉ IP của máy, hãy dùng các lệnh sau:

Nhập lệnh này vào command prompt của server:

hostname -I

Lệnh này sẽ hiển thị tất cả các địa chỉ mạng của host, được phân tách bằng dấu cách. Bạn có thể thử từng cái trong trình duyệt web để xem chúng có hoạt động không.

Ngoài ra còn có thể sử dụng curl để yêu cầu IP của mình từ icanhazip.com. Địa chỉ này sẽ cung cấp cho bạn địa chỉ IPv4 public:

curl -4 icanhazip.com

Khi đã có địa chỉ IP của máy chủ, hãy nhập nó vào thanh địa chỉ của trình duyệt:

http://your_server_ip

Bạn sẽ thấy trang web CentOS 7 Apache mặc định:

Http server in c hướng dẫn

Trang này chỉ ra rằng Apache đang hoạt động một cách chính xác. Bao cũng gồm cả thông tin cơ bản về các file Apache và vị trí folder. Bây giờ dịch vụ đã được cài đặt và đang chạy. Bạn có thể sử dụng các lệnh systemctl khác nhau để quản lý dịch vụ.

Bước 3 – Quản lý process Apache

Bước tiếp theo trong việc cài đặt web server trên CentOS 7 là thiết lập quy trình và chạy web server. Sau đây là một số lệnh quản lý cơ bản:

Để dừng máy chủ web của bạn, hãy nhập:

sudo systemctl stop httpd

Khởi động máy chủ web khi nó bị dừng:

sudo systemctl start httpd

Để dừng và bắt đầu lại dịch vụ:

sudo systemctl restart httpd

Nếu chỉ đơn giản là thay đổi cấu hình, Apache thường có thể tải lại mà không mất kết nối. Để làm điều này, hãy dùng lệnh sau:

sudo systemctl reload httpd

Theo mặc định, Apache được cấu hình để tự khởi động khi máy chủ khởi động. Nếu tắt nó thì hãy nhập lệnh sau:

sudo systemctl disable httpd

Để bật lại dịch vụ khởi động khi khởi động máy:

sudo systemctl enable httpd

Apache bây giờ sẽ tự khởi động khi server khởi động lại.

Cấu hình mặc định cho Apache sẽ cho phép server được host một trang web duy nhất. Nếu bạn muốn lưu trữ nhiều tên miền trên máy, bạn cần định lại cấu hình virtual host trên web server Apache.

Bước 4 – Thiết lập virtual server

Khi sử dụng máy chủ web Apache thì bạn có thể sử dụng virtual host để lưu trữ nhiều miền trên một máy. Trong bước này, bạn sẽ thiết lập một miền có tên là example.com. Nhưng bạn nên thay thế miền này bằng tên miền của riêng bạn.

Cách thiết lập virtual server

Apache trên CentOS 7 có một block server được kích hoạt dể cung cấp tài liệu từ folder /var/www/html. Mặc dù điều này tốt cho một trang web nhưng sẽ khó sử dụng nếu bạn host nhiều trang web. Thay vì sửa đổi /var/www/html, bạn sẽ tạo folder bên trong /var/www cho trang web example.com. Giữ nguyên /var/www/html làm folder mặc định được phục vụ nếu request của client không phù hợp với trang nào.

Tạo folder virtual server

Tạo folder html cho example.com như sau, sử dụng flag -p để tạo folder cần thiết:

sudo mkdir -p /var/www/example.com/html

Lập một folder bổ sung để lưu trữ file log cho trang web:

sudo mkdir -p /var/www/example.com/log

Tiếp theo, chỉ định quyền sở hữu folder html với biến $USER:

sudo chown -R $USER:$USER /var/www/example.com/html

Đảm bảo rằng web của bạn có quyền mặc định.

sudo chmod -R 755 /var/www

Tiếp theo, tạo một trang index.html mẫu bằng vi hoặc trình soạn thảo:

sudo vi /var/www/example.com/html/index.html

Nhấn i để chuyển sang chế độ INSERT và thêm HTML mẫu vào file:

/var/www/example.com/html/index.html

  
    Welcome to Example.com!
  
  
    

Success! The example.com virtual host is working!

Lưu và đóng file bằng cách nhấn ESC, nhập :wq và nhấn ENTER.

Với directory web và file mẫu thì đủ để tạo virtual server. Các file virtual server chỉ định cấu hình của các trang web riêng biệt. Cho máy chủ web Apache biết cách phản hồi yêu cầu các tên miền khác nhau.

Trước khi tạo virtual server, cần tạo một directiry sites-available để lưu trữ chúng. Ngoài ra, bạn cũng cần tạo một directory sites-enabled. Directoiry này sẽ chứa các symbolic link cho các virual host mà ta muốn publish. Tạo cả hai directiry này bằng lệnh sau:

sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled

Tiếp theo, yêu cầu Apache tìm kiếm các virtual server trong directory sites-enabled. Để thực hiện điều này, hãy chỉnh sửa file cấu hình chính của Apache. Sau đó thêm một dòng khai báo directory cho các file cấu hình bổ sung:

sudo vi /etc/httpd/conf/httpd.conf

Thêm dòng này vào cuối file:

IncludeOptional sites-enabled/*.conf

Lưu và đóng file khi đã hoàn tất việc thêm dòng đó vào. Bây giờ các directory virtual server đã được tạo. Tiếp theo là tạo file virtual host.

Tạo file virtual host

Đầu tiên tạo một file mới trong directory sites-available:

sudo vi /etc/httpd/sites-available/example.com.conf

Thay đổi miền example.com thành tên miền của bạn:

/etc/httpd/sites-available/example.com.conf


    ServerName www.example.com
    ServerAlias example.com
    DocumentRoot /var/www/example.com/html
    ErrorLog /var/www/example.com/log/error.log
    CustomLog /var/www/example.com/log/requests.log combined

Thao tác này sẽ cho Apache biết nơi tìm root – lưu giữ các tài liệu web mà có thể được truy cập công khai. Ngoài ra, nói cũng cho biết nơi lưu trữ lỗi và request log cho trang web.

Lưu và đóng file khi hoàn tất.

Bây giờ đã tạo các file virtual host. Hãy kích hoạt chúng để Apache biết để phục vụ cho khách truy cập. Để làm việc này, hãy tạo một liên kết cho virtual host trong directory site-enabled:

sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example.com.conf

Bây giờ, virtual host đã được cấu hình và sẵn sàng cung cấp nội dung. Trước khi khởi động lại Apache, hãy đảm bảo rằng SELinux có các chính sách phù hợp cho virtual host của bạn. Tiếp theo, hãy điều chỉnh quyền của SELinux để tiếp tục việc cài đặt web server trên CentOS 7.

Bước 5 – Điều chỉnh quyền SELinux cho virtual server

SELinux được cấu hình để hoạt động với Apache. Vì bạn đã thiết lập một custom log directory trong file config của virtual host. Nên có thể sẽ gặp lỗi nếu khởi động Apache. Để giải quyết vấn đề này, cần cập nhật các chính sách của SELinux. Điều này cho phép Apache ghi vào các file cần thiết. SELinux mang lại khả năng bảo mật cao hơn môi trường CentOS 7. Do đó không nên tắt toàn bộ các module kernel.

Có nhiều cách khác nhau để đặt chính sách. Vì SELinux cho phép bạn tùy chỉnh mức độ bảo mật của mình. Có hai phương pháp điều chỉnh chính sách Apache: trên phạm vị toàn bộ và trên directory cụ thể. Điều chỉnh trên directory thì sẽ an toàn hơn. Do vậy nó là cách tiếp cận được khuyến nghị cho người dùng.

Điều chỉnh các chính sách Apache

Việc đặt chính sách Apache trên phạm vi rộng sẽ yêu cầu SELinux xử lý các quy trình bằng cách sử dụng boolean httpd_unified. Mặc dù cách tiếp cận này thuận tiện, nhưng nó không cung cấp cho bạn mức độ kiểm soát giống như tiếp cận vào file hay directory.

Chạy lệnh sau để đặt một chính sách Apache chung:

sudo setsebool -P httpd_unified 1

Lệnh setsebool thay đổi giá trị boolean của SELinux. Flag -P sẽ cập nhật giá trị boot-time. Điều này làm các thay đổi vẫn giữ nguyên sau các lần khởi động lại. httpd_unified là boolean yêu cầu SELinux xử lý tất cả các quy trình thuộc cùng một loại. Vì vậy hãy bật nó với giá trị là 1.

Điều chỉnh chính sách Apache trên directory

Việc đặt riêng các quyền SELinux cho directory /var/www/example.com/log sẽ cung cấp nhiều quyền kiểm soát hơn, nhưng cũng yêu cầu bảo trì nhiều hơn. Vì việc này khác với việc đặt chính sách chung, nên ta cần set các loại context một cách thủ công, cho từng log directory mới trong cấu hình của virtual host.

Đầu tiền kiểm tra context type mà SELinux đã cung cấp cho directory /var/www/example.com/log:

sudo ls -dZ /var/www/example.com/log/

Lệnh này liệt kê và in cotext SELinux của directory. Bạn sẽ thấy output như sau:

Output
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/example.com/log/

Context hiện tại là httpd_sys_content_t. Điều này cho SELinux biết Apache chỉ có thể đọc các file được tạo trong directory này. Trong hướng dẫn này, bạn sẽ thay đổi context type của directory /var/www/example.com/log thành httpd_log_t. Nó cho phép Apache tạo và nối các file log ứng dụng web lại với nhau:

sudo semanage fcontext -a -t httpd_log_t "/var/www/example.com/log(/.*)?"

Tiếp theo, sử dụng lệnh restorecon để áp dụng các thay đổi này và để chúng tồn tại qua các lần khởi động lại:

sudo restorecon -R -v /var/www/example.com/log

Flag -R chạy lệnh theo quy tắc đệ quy. Nghĩa là nó sẽ cập nhật mọi file hiện có thể sử dụng context mới. Flag -v sẽ in ra các thay đổi về context mà lệnh thực hiện. Kết quả:

Output
restorecon reset /var/www/example.com/log context unconfined_u:object_r:httpd_sys_content_t:s0->unconfined_u:object_r:httpd_log_t:s0

Hãy liệt kê các ngữ cách một lần nữa để xem các thay đổi:

sudo ls -dZ /var/www/example.com/log/

Output sẽ phản ánh các loại context được cập nhật:

Output
drwxr-xr-x. root root unconfined_u:object_r:httpd_log_t:s0 /var/www/example.com/log

Bây giờ directory /var/www/example.com/log đang sử dụng loại httpd_log_t. Hãy kiểm tra lại cấu hình virtual server của mình. Bước cuối cùng trong việc cài đặt web server trên CentOS 7 là kiểm tra lại virtual host.

Bước 6 – Kiểm tra Virtual Host

Khi SELinux context đã được cập nhật, Apache sẽ có thể ghi vào directory /var/www/example.com/log. Bây giờ bạn có thể khởi động lại Apache:

sudo systemctl restart httpd

Liệt kê content của directory /var/www/example.com/log để xem Apache có tạo các file hay không:

ls -lZ /var/www/example.com/log

Bạn sẽ thấy Apache có thể tạo file error.log request.log, các file này đã được chỉ định trong cấu hình virtual host:

Output
-rw-r--r--. 1 root root 0 Feb 26 22:54 error.log
-rw-r--r--. 1 root root 0 Feb 26 22:54 requests.log

Bây giờ virtual host và các quyền SELinux đã được cập nhật. Apache sẽ phục vụ tên miền của bạn. Kiểm tra điều này bằng cách truy cập http://example.com, bạn sẽ thấy một thứ như sau:

Http server in c hướng dẫn

Điều này xác nhận virtual server đã được cấu hình thành công. Lặp lại bước 4 và 5 để tạo virtual host mới với quyền SELinux cho miền bổ sung. Sau đó kết thúc việc cài đặt web server trên CentOS 7.

Tổng kết

Trong bài viết này đã hướng dẫn bạn cách quản lý máy chủ web Apache và cài đặt web server trên CentOS 7. Bây giờ bạn đã có máy chủ web của mình. Bạn sẽ có nhiều tùy chọn với nhiều loại nội dung do bạn phân phối. Bạn có thể sử dụng các công nghệ tốt để tạo trải nghiệm phong phú hơn.