Hướng dẫn

Hướng dẫn cơ bản

Cài đặt Apache

Để cài đặt trên Linux bạn cần terminal lên bằng cách nhấn shortcut trên màn hình hoặc Ctrl+Alt+T. Dưới đây là các bước để cài được trên Ubuntu 1 bản phân phối phổ biến của Linux.

Yêu Cầu Hệ Thống:

  1. Cập Nhật Hệ Thống

    Trước khi cài tốt nhất nên cập nhật trước vì đôi khi có những gói tài nguyên mà bạn chưa cài hay chưa cập nhật.Mở terminal và chạy lệnh sau:

    bash
    sudo apt update
    sudo apt upgrade
  2. Cài Đặt Apache

    Sau khi hệ thống được cập nhật, bạn có thể cài đặt Apache bằng lệnh sau:

    bash
    sudo apt install apache2
    
  3. Cấu hình tường lửa

    Sau khi cài xong bạn hãy cấu hình lại tường lửa để có thể cho phép các truy cập từ bên ngoài vào port mặc định của web.

    Trong quá trình cài đặt, Apache đã tự đăng ký một số profile (cấu hình) ứng dụng trong UFW để cho phép hoặc chặn quyền truy cập đến Apache qua tường lửa.Bạn có thể dùng lệnh sau để xem các profile ufw hiện có:

    bash
    sudo ufw app list
    

    Sau đó nó sẽ hiện ra danh sách như thế này:

    bash
    Available applications:
        Apache
        Apache Full
        Apache Secure
      

    Chúng ta hiện tại đang có 3 profile của Apache:

    • Apache: Chỉ mở port 80 (lưu lượng không được mã hóa).
    • Apache Full: Mở port 80 và port 443 (lưu lượng được mã hóa bằng TLS/SSL).
    • Apache Secure: Chỉ mở port 443 (được mã hóa bằng TLS/SSL).

    Ở đây chúng tôi sẽ lựa chọn là "Apache Full"

    bash
    sudo ufw allow 'Apache Full'
    

    Sau khi thành công bạn sẽ thấy đoạn mã như sau:

    bash
    Rules updated
    Rules updated (v6)
  4. Kiểm tra trạng thái của apache

    Sau khi cài đặt, bạn có thể kiểm tra xem Apache đã chạy hay chưa bằng cách:

    bash
    sudo systemctl status apache2
    

    Nếu Apache đang chạy, bạn sẽ thấy một thông báo cho biết dịch vụ đang hoạt động. nó sẽ hiện giống đọan mã bên dưới.

    bash
    apache2.service - The Apache HTTP Server
        Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor prese>
        Active: active (running) since Mon 2024-08-05 01:32:58 +07; 6 days ago
          Docs: https://httpd.apache.org/docs/2.4/
      Main PID: 797 (apache2)
         Tasks: 55 (limit: 9283)
        Memory: 7.3M
           CPU: 4.212s
        CGroup: /system.slice/apache2.service
                ├─  797 /usr/sbin/apache2 -k start
                ├─30908 /usr/sbin/apache2 -k start
                └─30909 /usr/sbin/apache2 -k start

    Bên cạnh đó bạn cũng nên xác nhận lại bằng cách vào trình duyệt và gõ http://localhost hoặc địa chỉ IP của server: 127.0.0.1. Nếu thành công nó sẽ xuất ra trang như thế này.

    Kết quả hiển thị

Quản lý cơ bản

Sau khi cài đặt và khởi chạy web server, bạn có thể bắt đầu tìm hiểu một số lệnh quản lý cơ bản bằng công cụ systemctl

Chạy lệnh sau để dừng web server:

bash
sudo systemctl stop apache2

Để khởi động server:

bash
sudo systemctl start apache2

Để restart dịch vụ:

bash
sudo systemctl restart apache2

Nếu bạn chỉ thực hiện các thay đổi cấu hình trên web server thì Apache có chế độ reload mà không cần ngắt kết nối bằng lệnh sau:

bash
sudo systemctl reload apache2

Theo mặc định, Apache được cấu hình để tự khởi động mỗi khi server boot. Bạn có thể tắt tính năng này bằng lệnh:

bash
sudo systemctl disable apache2

Còn khi bạn tắt và muốn bật lại có thể chạy lệnh này:

bash
sudo systemctl enable apache2

Cấu hình cơ bản

Khi sử dụng web server Apache, bạn có thể sử dụng các virtual host (tương tự như các server block – khối server – trong Nginx) để đóng gói các chi tiết cấu hình và lưu trữ nhiều miền từ một server.

Apache trên Ubuntu 20.04 đã enable sẵn một server block, được cấu hình để cung cấp tài liệu từ thư mục /var/www/html. Nếu chỉ host một trang thì không có vấn đề gì, nhưng đối với số lượng trang lớn thì sẽ khó quản lý. Thay vì chỉnh sửa trực tiếp /var/www/html thì bạn nên tạo một cấu trúc thư mục trong /var/www cho trang của bạn, để nguyên /var/www/html làm thư mục mặc định để cung cấp nếu request của client không khớp với bất kỳ trang nào.

  1. Tạo thư mục chứa file, tài nguyên web cuả bạn

    Bạn hãy tạo thư mục cho trang của bạn bằng lệnh sau:

    bash
    sudo mkdir /var/www/tênbạnmuốnđặt

    Sau đó bạn có thể viết file cho trang web của bạn vào thư mục này.

    Nếu bạn đã có file và muốn copy vào cũng có thể chạy bằng lệnh này và đề phòng bạn chưa có quyền truy cập đầy đủ hãy chạy thêm lệnh sudo:

    bash
    sudo cp -r /đường/dẫn/đến/thư/mục /var/www/tênbạnmuốnđặt
  2. Cấu hình Virtual host

    Để Apache có thể cung cấp nội dung thì bạn cần tạo một file virtual host với các directive chính xác. Thay vì chỉnh sửa trực tiếp file cấu hình mặc định trong /etc/apache2/sites-available/000-default.conf thì bạn có thể tạo một file mới cho web bạn trong /etc/apache2/sites-available/tênbạnmuốnđặt.conf bằng cách lệnh:

    bash
    sudo nano /etc/apache2/sites-available/tênnbạnmuốnđặt.conf

    Sau đó paste đoạn code dưới đây:

    bash
    <VirtualHost *:80>     
        ServerAdmin webmaster@localhost     
        ServerName têtênnbạnmuốnđặt.com     
        DocumentRoot /var/www/thư mụcchưawebcủabạn     
    </VirtualHost>

    Lưu và đóng lại file sau khi hoàn tất bằng Ctrl+X -> Y -> Enter

  3. Đưa trang web vào hoạt động

    Bây giờ bạn có thể cho trang hoạt động bằng bằng công cụ a2ensite:

    bash
    sudo a2ensite tênnbạnmuốnđặt.conf

    Và hãy tắt trang web mặc định của nó

    bash
    sudo a2dissite 000-default.conf

    Sau đó bạn có thể kiểm tra lỗi xem mình có cấu hình đúng hay chưa bằng lệnh:

    bash
    sudo apache2ctl configtest

    Nếu output là Syntax OK thì bạn đã thành công

    Cuối cùng là restart lại Apache để áp dụng các thay đổi:

    bash
    sudo systemctl restart apache2

Bây giờ thì Apache đã bắt đầu cung cấp nội dung cho tên miền của bạn. Bạn có thể vào trang http://tênnbạnmuốnđặt để kiểm tra.

Cài DNS

Cài Bind9

  1. Cập nhật hệ thống:

    Nếu mọi người đã cập nhật hệ thống ở trên kia rồi thì có thể bỏ qua bước này

    bash
    sudo apt update
    sudo apt upgrade
  2. Cài đặt gói Bind9

    bash
    sudo apt install bind9
  3. Kiểm tra trạng thái của bind9

    Sau khi cài đặt xong để biết có đang chạy hay chưa thì mọi người có thể gõ:

    bash
    sudo systemctl status bind9

    Nếu thành công nó sẽ hiện ra kết quả như sau:

    bash
    named.service - BIND Domain Name Server
        Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; preset: en>
        Active: active (running) since Wed 2024-08-14 00:03:50 +07; 3min 27s ago
          Docs: man:named(8)
      Main PID: 1082 (named)
        Status: "running"
         Tasks: 14 (limit: 3489)
        Memory: 12.1M (peak: 13.1M)
           CPU: 260ms
        CGroup: /system.slice/named.service
                └─1082 /usr/sbin/named -f -u bind

    Ngược lại nếu nó vẫn rông hiện running thì bạn hãy chạy lệnh này:

    bash
    sudo systemctl start bind9

Vậy là các bạn đã hoàn thành xong các bước cài đặt hãy đi tới bước tiếp theo.

Cấu hình DNS

  1. Cấu hình tệp Options

    Để cấu hình tệp này bạn hãy dùng lệnh:

    bash
    sudo nano /etc/bind/named.conf.options

    Khi đó bạn hãy thêm đoạn lệnh sau ở dưới dòng diretory:

    bash
    forwarders {
        8.8.8.8;
       8.8.4.4;
    };
  2. Cấu hình tệp Local

    Để cấu hình được bạn cần vào file `named.conf.local`

    bash
    sudo nano /etc/bind/named.conf.local

    Ngoại trừ một vài comments, tệp này sẽ trống. Ở đây bạn sẽ chỉ định các forward zones và reverse zones của mình. Các DNS zone chỉ định phạm vi cụ thể để dễ quản lí và xác định các bản ghi DNS.Vì tất cả các tên miền ví dụ trong hướng dẫn này đều nằm trong phân vùng con web.com, nên bạn sẽ sử dụng nó để làm forward zone. Ở đây địa chỉ IP ví dụ sẽ là: 192.168.30.10 thì bạn nên viết ngược lại ở reverse.

    Thêm forward zone và reverse zone với các dòng sau, hãy nhớ thay thế tên zone thành của bạn như sau:

    bash
    zone "web.com" {
        type master;
        file "/etc/bind/db.web.com";
    };
    zone "30.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db.reverse";
    };
  3. Khởi tạo forward zone file

    Forward zone file là nơi bạn xác định các bản ghi DNS để tra cứu DNS chuyển tiếp. Tức là, khi DNS nhận được một truy vấn tên, ví dụ như host1.nyc3.example.com, nó sẽ tìm kiếm trong forward zone file để phản hồi địa chỉ IP riêng tương ứng của host1.

    Bạn sẽ dựa trên forward zone file tại mẫu `db.local`. Sao chép nó đến vị trí đúng bằng các lệnh sau:

    bash
    sudo cp /etc/bind/db.local /etc/bind/db.web

    Tiếp đến, hãy chỉnh sửa forward zone file với lệnh:

    bash
    sudo nano /etc/bind/db.web

    Hãy sửa theo cấu hình dưới đây:

    bash
    $TTL	604800
        @	IN	SOA	web.com. web@admin. (
                          2		; Serial
                     604800		; Refresh
                      86400		; Retry
                    2419200		; Expire
                     604800 )	; Negative Cache TTL
        ;
        @	IN	NS	web.com.
        @	IN	A	192.168.30.10
  4. Cấu hình reverse zone file

    Reverse zone files là nơi bạn xác định các bản ghi DNS PTR để tra cứu các DNS ngược. Đó là, khi DNS nhận được một truy vấn bằng địa chỉ IP, ví dụ như 192.168.30.10, nó sẽ tìm kiếm trong các reverse zone files để phản hồi FQDN tương ứng.

    Bạn có thể cấu hình trực tiếp trong file db.reverse bằng lệnh sau:

    bash
    sudo nano /etc/bind/db.reverse

    Tiếp đó cấu hình như sau:

    bash
    $TTL	604800
        @	IN	SOA	web.com. web@admin.local. (
                          1		; Serial
                     604800		; Refresh
                      86400		; Retry
                    2419200		; Expire
                     604800 )	; Negative Cache TTL
        ;
        @	IN	NS	web.com.
        10	IN	PTR	web.com.
  5. Kiểm tra cú pháp

    Sau khi thực hiện xong các bước các bạn có thể kiểm tra lại cú pháp cấu hình của mình có đúng hay không bằng lệnh:

    bash
    sudo named-checkconf

    Nếu không có lỗi gì thì nó sẽ không thông báo lỗi gì cả.

  6. Khởi động lại Bind9

    Để khởi động lại BIND, thực hiện lệnh sau:

    bash
    sudo systemctl restart bind9

    Nếu bạn đã cấu hình tường lửa UFW hãy mở truy cập đến BIND bằng cách nhập lệnh:

    bash
    sudo ufw allow Bind9

Thế là đã hoàn thành Server DNS chính của bạn đã sẵn sàng để phản hồi lại truy vấn DNS.

Cấu hình một số chức năng khác

Cấu hình .htaccess

  1. Cấu hình file apache.conf

    Trước tiên bạn cần vào file với lệnh:

    bash
    sudo nano /etc/apache2/apache2.conf

    Thêm directory vào tệp cấu hình chính apache2.conf. Sau đó bật AllOverride All để cho phép tất cá các thay đổi .htaccess ghi lên cấu hình máy chủ

    bash
    <Directory />
    	Options FollowSymLinks
    	AllowOverride None
    	Require all denied
    </Directory>
    
    <Directory /usr/share>
    	AllowOverride None
    	Require all granted
    </Directory>
    
    <Directory /var/www/>
    	Options Indexes FollowSymLinks
    	AllowOverride None
    	Require all granted
    </Directory>
    <Directory /var/www/web>
    	AllowOverride All
    </Directory>
  2. Cấu hình trong Virtual host

    Thêm directory vào file cấu hình Virtual host

    bash
     <Directory /var/www/batan.com/website>
        AllowOverride All
     </Directory>
  3. Thêm AccessFileName

    Thêm AccessFileName .htaccess nếu chưa có hoặc đang comment

    bash
    AccessFileName .htaccess
  4. Cấu hình trong thư mục

    Truy cập vào folder chưa website cần cấu hình

    Sau đó cấu hình .htaccess sau đó lưu lại bằng Ctrl+X

    bash
    #Tùy biến trang lỗi 404
    ErrorDocument 404 /404/404.html
    
    #Chặn truy cập từ một số IP
    Order Deny,Allow
    Deny from 192.168.39.1

Cấu hình SSL

  1. Tải SSL

    bash
    sudo apt install openssl apache2
  2. Tạo key

    Tạo public key(certs/.crt)và private key(private/.key)

    bash
    sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/ssl/private/batan.key -x509 -days 365 -out /etc/ssl/certs/batan.crt
  3. Cấu hình ở tệp Vitrual Hosts cần thiết

    Thêm bật cấu hình SSL và đường dẫn vào các key ở tệp cấu hình Virtual Hosts cần thiết với đoạn lệnh:

    bash
     SSLEngine on
     SSLCertificateFile /etc/ssl/certs/batan.crt
     SSLCertificateKeyFile /etc/ssl/private/batan.key
  4. Bước cuối kích hoạt modun ssl

    bash
    sudo a2enmod ssl

Bài viết và web tham khảo :