Quay lại

Bài 5: Cách tạo web server bằng Apache trên AWS EC2 Linux Chuyên mục Devops    2023-06-10    1.6k Lượt xem    122 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Bài 5: Cách tạo web server bằng Apache trên AWS EC2 Linux

Video

1. Cấu hình DNS

Các bạn xem trong video để hiểu và cấu hình nó như thế nào nhé !

2. Cài đặt Apache

Apache hay là chương trình máy chủ HTTP là một chương trình dành cho máy chủ đối thoại qua giao thức HTTP. Apache chạy trên các hệ điều hành tương tự như Unix, Microsoft Windows, Novell Netware và các hệ điều hành khác. Apache đóng một vai trò quan trọng trong quá trình phát triển của mạng web thế giới.

Định nghĩa về Web Server

Web Server là một server vật lý hay còn là một máy chủ ảo, cài đặt các chương trình phục vụ ứng dụng web, đưa website lên Internet. Khi thực hiện công việc đó, web server hoạt động như một người đứng giữa server và client.

Web server có khả năng tiếp nhận request từ các trình duyệt web và gửi phản hồi đến máy khách thông qua giao thức chính là HTTP và một vài các giao thức khác, với nhiều web server khác nhau như: Apache, Tomcat, IIS, Database servers, file servers, web servers và mail servers sử dụng nhiều phần mềm server khác nhau. 

Mỗi một ứng dụng sẽ truy cập một file riêng trên server vật lý, được dùng chung cho các mục đích khác nhau. Điểm đặc biệt của web server là kéo dữ liệu cho nhiều người dùng cùng một lúc, vì cùng một thời điểm nhưng mỗi người sẽ lại truy vấn các trang web khác nhau.

Thường thì web server xử lý file dưới dạng các ngôn ngữ lập trình như Java, PHP, Python,… Khi sử dụng những ngôn ngữ này chúng sẽ biến thành HTML và file trên trình duyệt cho người dùng web thấy được, nên có thể thấy rõ web server chịu trách nhiệm giao tiếp giữa server – máy chủ. 

Cách thức hoạt động của Apache Web Server bạn nên biết

Dù gọi Apache là gì của web server nhưng nó chỉ là phần mềm chạy trên server đó chứ không phải server vật lý. Apache Web Server chủ yếu hoạt động theo phương thức là thiết lập kết nối giữa server với các trình duyệt trên Internet như: Safari, Google Chrome, Firefox,… sau đó sẽ chuyển file qua lại giữa browser và server (cấu trúc hai chiều dạng client – server). Hoạt động tốt với cả server Unix và Windows, nên Apache như một phần mềm đa nền tảng. 

Khi một khách truy cập, tải một site trên web, trình duyệt người dùng đó sẽ gửi yêu cầu request lên trang và Apache sẽ trả lại các kết quả với cấu thành file đầy đủ mà trang đó hiển thị. Lúc ấy, server và máy chủ sẽ giao tiếp với nhau qua phương thức HTTP, Apache là gì sẽ chịu trách nhiệm cho tiến trình này được đảm bảo diễn ra theo phương thức bảo mật và đảm bảo giữa hai máy. 

Nhờ cách hoạt động này mà Apache nghiễm nhiên trở thành nền tảng module có độ tùy biến khá cao. Ngoài ra, bạn có thể thiết lập cấu hình server cho riêng mình qua file với định dạng .htaccess, đây vốn là file cấu hình của Apache được hỗ trợ hoàn toàn trong quá trình mở gói của các hostinger.

Cài đặt :

sudo yum install httpd

Để khởi động máy chủ web:

sudo systemctl start httpd

Để dừng máy chủ web:

sudo systemctl stop httpd

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

sudo systemctl restart httpd

Nếu bạn chỉ thực hiện thay đổi cấu hình, Apache thường có thể tải lại mà không làm mất kết nối. Để làm điều này, sử dụng lệnh này:

sudo systemctl reload httpd

Theo mặc định, Apache được cấu hình để khởi động tự động khi máy chủ khởi động. Nếu đây không phải là điều bạn muốn, hãy tắt hành vi này bằng cách nhập:

sudo systemctl disable httpd

Để kích hoạt lại dịch vụ để khởi động khi khởi động, hãy nhập:

sudo systemctl enable httpd

Bây giờ Apache sẽ tự khởi động khi máy chủ khởi động lại.

3. Thiết lập máy chủ ảo (Virtual Hosts)

Virtual Hosts là một phương thức lưu trữ cho phép lưu nhiều tên miền khác nhau trên cùng một máy chủ Server. Virtual Hosts có thể được xem như một giải pháp cho phép bạn nhúng rất nhiều tên miền trên một địa chỉ IP của một Server duy nhất. Tùy vào cách cài đặt, Server sẽ tự hiểu tên miền nào đang hoạt động bên trong vị trí lưu trữ của Server.

Apache trên CentOS 7 có một khối máy chủ được bật theo mặc định được định cấu hình để cung cấp tài liệu từ thư mục /var/www/html. Mặc dù điều này hoạt động tốt cho một trang web, nhưng nó có thể trở nên khó sử dụng nếu bạn đang lưu trữ nhiều trang web. Thay vì sửa đổi /var/www/html, bạn sẽ tạo một cấu trúc thư mục trong /var/www cho your_domain, để lại /var/www/html làm thư mục mặc định sẽ được phục vụ nếu yêu cầu của khách hàng không khớp bất kỳ trang web nào khác.

sudo mkdir -p /var/www/your_domain/html

Xem Apache HTTP server configuration file:

vim /etc/httpd/conf/httpd.conf

Tiếp theo, gán quyền sở hữu thư mục html với biến môi trường $USER:

sudo chown -R $USER:$USER /var/www/your_domain/html

Đảm bảo rằng web root của bạn được đặt 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 chỉnh sửa yêu thích của bạn:

sudo vi /var/www/your_domain/html/index.html

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

<html>
  <head>
    <title>Welcome to your website!</title>
  </head>
  <body>
    <h1>Success! The your_domain virtual host is working!</h1>
  </body>
</html>

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

Với thư mục trang web và index.html của bạn, bạn gần như đã sẵn sàng để tạo các tệp máy chủ ảo. Các tệp máy chủ ảo chỉ định cấu hình của các trang web riêng biệt của bạn và cho máy chủ web Apache biết cách phản hồi các yêu cầu tên miền khác nhau.

Trước khi bạn tạo các máy chủ ảo của mình, bạn sẽ cần tạo một thư mục sites-available để lưu trữ chúng. Bạn cũng sẽ tạo một thư mục sites-enabled để cho Apache biết rằng một máy chủ ảo đã sẵn sàng phục vụ khách truy cập. Thư mục sites-enabled sẽ chứa các liên kết tượng trưng đến các máy chủ ảo mà chúng ta muốn publish. Tạo cả hai thư mục bằng lệnh sau:

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

Tiếp theo, bạn sẽ yêu cầu Apache tìm kiếm các máy chủ ảo trong thư mục sites-enabled. Để thực hiện điều này, hãy chỉnh sửa tệp cấu hình chính của Apache và thêm một dòng khai báo thư mục tùy chọn cho các tệp cấu hình bổ sung:

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

Thêm dòng này vào cuối tệp:

IncludeOptional sites-enabled/*.conf

Lưu và đóng tệp khi bạn hoàn tất việc thêm dòng đó. Bây giờ bạn đã có các thư mục máy chủ ảo của mình, bạn sẽ tạo tệp máy chủ ảo của mình.Bắt đầu bằng cách tạo một tệp mới trong thư mục sites-available:

sudo vi /etc/httpd/sites-available/your_domain.conf

copy đoạn config dưới đây vào nhé !

<VirtualHost *:80>
    ServerName www.your_domain
    ServerAlias your_domain
    DocumentRoot /var/www/your_domain/html
    ErrorLog /var/www/your_domain/log/error.log
    CustomLog /var/www/your_domain/log/requests.log combined
</VirtualHost>

Tạo error.log 

touch /var/www/your_domain/log/error.log

Tạo requests.log

touch /var/www/your_domain/log/requests.log

Điều này sẽ cho Apache biết nơi để tìm thư mục gốc trực tiếp chứa các tài liệu web có thể truy cập công khai. Nó cũng cho Apache biết nơi lưu trữ lỗi và request logs cho trang web cụ thể này.

Lưu và đóng tệp khi bạn hoàn tất.

Bây giờ bạn đã tạo các tệp máy chủ ảo, bạn sẽ kích hoạt chúng để Apache biết phục vụ chúng cho khách truy cập. Để thực hiện việc này, hãy tạo một liên kết tượng trưng cho mỗi máy chủ ảo trong thư mục hỗ trợ trang web:

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

Sau bước này các bạn khởi động lại apache rồi chạy thử nhé !

sudo systemctl restart httpd

Liệt kê nội dung của thư mục /var/www/your_domain/log để xem liệu Apache có tạo các tệp log hay không nhé !

ls -lZ /var/www/your_domain/log

Bạn sẽ thấy rằng Apache có thể tạo các tệp error.log và request.log được chỉ định trong cấu hình máy chủ ảo:

Điều chỉnh quyền SELinux cho máy chủ ảo

SELinux được cấu hình để hoạt động với cấu hình Apache mặc định. Vì bạn đã thiết lập thư mục log tùy chỉnh trong tệp cấu hình máy chủ ảo, nên bạn sẽ gặp lỗi nếu cố gắng khởi động dịch vụ Apache. Để giải quyết vấn đề này, bạn cần cập nhật các chính sách SELinux để cho phép Apache ghi vào các tệp cần thiết. SELinux tăng cường bảo mật cho môi trường CentOS 7 của bạn, do đó không nên tắt hoàn toàn mô-đun kernel.

Có nhiều cách khác nhau để đặt chính sách dựa trên nhu cầu của môi trường của bạn, vì SELinux cho phép bạn tùy chỉnh mức độ bảo mật của mình. Bước này sẽ đề cập đến hai phương pháp điều chỉnh các chính sách của Apache: phổ biến và trên một thư mục cụ thể. Điều chỉnh chính sách trên các thư mục sẽ an toàn hơn và do đó là phương pháp được đề xuất.

Điều chỉnh Apache Policies Universally

Đặt chính sách Apache phổ biến sẽ yêu cầu SELinux xử lý tất cả các quy trình Apache giống hệt nhau 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 hơn, nhưng nó sẽ không cung cấp cho bạn mức độ kiểm soát giống như cách tiếp cận tập trung vào chính sách tệp hoặc thư mục.

Chạy lệnh sau để đặt chính sách chung của Apache:

sudo setsebool -P httpd_unified 1

Lệnh setsebool thay đổi các giá trị boolean của SELinux. Cờ -P sẽ cập nhật giá trị thời gian khởi động, làm cho thay đổi này tồn tại trong các lần khởi động lại. httpd_unified là boolean sẽ yêu cầu SELinux coi tất cả các quy trình Apache là cùng một loại, vì vậy bạn đã bật nó với giá trị là 1.

Điều chỉnh chính sách Apache trên một thư mục (Apache Policies on a Directory)

Đặt riêng các quyền SELinux cho thư mục /var/www/your_domain/log sẽ giúp bạn kiểm soát nhiều hơn các chính sách Apache của mình, nhưng cũng có thể yêu cầu bảo trì nhiều hơn. Vì tùy chọn này không phải là chính sách cài đặt chung, nên bạn sẽ cần đặt loại ngữ cảnh theo cách thủ công cho bất kỳ thư mục nhật ký mới nào được chỉ định trong cấu hình máy chủ ảo của mình.

Trước tiên, hãy kiểm tra loại ngữ cảnh mà SELinux đã cung cấp cho thư mục /var/www/your_domain/log:

sudo ls -dZ /var/www/your_domain/log/

Lệnh này liệt kê và in ngữ cảnh SELinux của thư mục. Bạn sẽ thấy đầu ra tương tự như sau:

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

Bối cảnh hiện tại là httpd_sys_content_t, cho SELinux biết rằng quy trình Apache chỉ có thể đọc các tệp được tạo trong thư mục này. Trong hướng dẫn này, bạn sẽ thay đổi kiểu ngữ cảnh của thư mục /var/www/your_domain/log thành httpd_log_t. Loại này sẽ cho phép Apache tạo và nối thêm vào tệp log ứng dụng web:

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

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

Cờ -R chạy lệnh này theo cách đệ quy, nghĩa là nó sẽ cập nhật mọi tệp hiện có để sử dụng ngữ cảnh mới. Cờ -v sẽ in ngữ cảnh thay đổi lệnh được thực hiện. Bạn sẽ thấy đầu ra sau xác nhận các thay đổi:

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

Bạn có thể liệt kê các bối cảnh một lần nữa để xem các thay đổi:

sudo ls -dZ /var/www/your_domain/log/

Đầu ra phản ánh loại bối cảnh được cập nhật:

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

Bây giờ thư mục /var/www/your_domain/log đang sử dụng loại httpd_log_t, bạn đã sẵn sàng kiểm tra cấu hình máy chủ ảo của mình.

 
 

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday