Cấu hình cho host trên LEMP

Bài viết hướng dẫn về cấu hình cho host trên LEMP, ý nghĩa một số thông số trong file cấu hình. Qua bài viết các bạn sẽ biết cách thêm virtual host trên LEMP.

Giới thiệu về cấu hình host trên LEMP

Trước khi đi vào cấu hình cụ thể cho một host trên LEMP, chúng ta tìm hiểu sơ lược về file cấu hình mặc định /etc/nginx/nginx.conf

Nginx quản lý các Virtual Host bằng các block

server {
...
}
server {
...
}
server {
...
}

Và mình sẽ sẽ đi vào chi tiết của block server

listen: theo sau đó là số port mà nginx sẽ chờ để nhận request. Ví dụ ở hình trên là port 80 ([::]:80 là phiên bản cho ipv6), default_server có ý nghĩa là nếu không có bất cứ block nào phù hợp thì sẽ xử lý request theo block này.

server_name: tên của host sẽ được đối chiếu theo mục này để nhận diện và xử lý. Ví dụ

server_name theta.vn www.theta.vn;

Khi nhận được request từ 2 host theta.vn và www.theta.vn thì nginx sẽ so sánh tên host với server_name của các block nếu block nào trùng thì xử lý theo block đó, nếu không có thì sẽ xử lý theo block có default_server.

root: là thư mục sẽ chứa các file cho host.

error_page: các mã lỗi và file sẽ trả về theo các mã tương ứng.

location: sau khi request được chấp nhận trong một block server, nó sẽ tiếp tục so sánh với các location (nếu có). Ví dụ:

location ~ \.php$

Nghĩa là tất cả các file có đuôi .php sẽ được xử lý theo block này. Cấu trúc của location

location [modifier] match {

...

}

modifier: là kiểu so sánh, dùng để đối chiếu với match. Có một số kiểu so sánh như sau:

  • (none): Nếu không khai báo gì thì NGINX sẽ hiểu là tất cả các request có URI bắt đầu bằng phần match sẽ được chuyển cho location block này xử lí.
    
  • = : Khai báo này chỉ ra rằng URI phải có chính xác giống như match (giống như so sánh string bình thường).
    
  • ~ : Sử dụng regular expression cho các URI.
    
  • ~* : Sử dụng regular expression cho các URI cho phép pass cả chữ hoa và chữ thường
    

try_files: chạy file có tên giống URI, nếu không có thì chạy các file sau biến $uri.

Ví dụ:

location ~ \.php$ {

   try_files $uri $uri.html ...

}

Khi nhận request từ url example.com/test.php, nginx sẽ tìm file test.php trong thư mục khai báo ở root để chạy, nếu không tìm thấy thì nó sẽ tìm file test.html để chạy hoặc các file được khai báo ở ... theo thứ tự.

fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;

Ý nghĩa của đoạn này: chuyển tiếp qua giao tiếp với socket của php-fpm.

Cấu hình cho host trên LEMP

Để thêm một Virtual host chúng ta sẽ thêm một file với đuôi "xxxxxx.conf" vào thư mục /etc/nginx/conf.d, xxxxxx chúng ta nên đặt để gợi nhớ đến host liên quan, và mình thường đặt chính là tên của host.

Bên dưới là một ví dụ hoàn chỉnh về cấu hình cho host trên LEMP, file example.com.conf:

server {
        listen       80 default_server;       
        server_name  example.com;
        root         /usr/share/nginx/html;
        index index.php index.html index.htm;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    }

Kết luận

Đến đây thì mình đã hướng dẫn hoàn chỉnh để các bạn có thể tạo được một web server với LEMP, cấu hình một host trên web server. Tiếp theo mình sẽ hướng dẫn cài đặt thêm phpMyAdmin để quản lý database