Chào bạn, chào mừng bạn đã quay trở lại với blog của AZWEB. Việc kết hợp Laravel, một framework PHP mạnh mẽ, với máy chủ web Nginx là gì hiệu suất cao trên nền tảng Ubuntu 20.04 ổn định là một lựa chọn lý tưởng để xây dựng các ứng dụng web hiện đại. Tuy nhiên, quá trình cài đặt và cấu hình có thể gây khó khăn cho những người mới bắt đầu. Hiểu được điều đó, AZWEB đã biên soạn bài viết này để hướng dẫn bạn từng bước chi tiết, từ chuẩn bị môi trường đến tối ưu hóa hiệu suất. Chúng tôi sẽ giúp bạn thiết lập một môi trường phát triển hoàn chỉnh, ổn định và sẵn sàng để triển khai dự án Laravel của bạn một cách chuyên nghiệp.
Giới thiệu về Laravel, Nginx và Ubuntu 20.04
Laravel là một trong những PHP framework phổ biến nhất hiện nay, được yêu thích bởi cú pháp thanh lịch, cấu trúc rõ ràng và hệ sinh thái công cụ hỗ trợ mạnh mẽ. Nó giúp các nhà phát triển xây dựng ứng dụng nhanh hơn nhờ các tính năng tích hợp sẵn như hệ thống định tuyến (routing), Eloquent ORM để tương tác với cơ sở dữ liệu và Blade templating engine. Laravel phù hợp cho mọi quy mô dự án, từ các trang blog cá nhân đến các hệ thống doanh nghiệp phức tạp.
Nginx là một máy chủ web mã nguồn mở nổi bật với hiệu năng vượt trội và khả năng xử lý đồng thời hàng nghìn kết nối mà không tốn nhiều tài nguyên. Khác với các máy chủ truyền thống, kiến trúc bất đồng bộ của Nginx giúp nó trở thành lựa chọn hàng đầu để phục vụ các ứng dụng có lưu lượng truy cập cao. Khi kết hợp với Laravel, Nginx đảm bảo ứng dụng của bạn luôn phản hồi nhanh chóng và ổn định.
Ubuntu 20.04 (Focal Fossa) là một phiên bản phát hành hỗ trợ dài hạn (LTS) của hệ điều hành Linux phổ biến Ubuntu. Với sự ổn định, bảo mật cao và cộng đồng hỗ trợ đông đảo, Ubuntu 20.04 là nền tảng máy chủ được tin dùng trên toàn thế giới. Việc kết hợp ba công nghệ này—Laravel, Nginx, và Ubuntu 20.04—tạo ra một “bộ ba” hoàn hảo: một framework mạnh mẽ chạy trên một máy chủ tốc độ cao và được vận hành bởi một hệ điều hành đáng tin cậy.

Yêu cầu hệ thống và chuẩn bị môi trường
Trước khi bắt đầu hành trình cài đặt, việc đảm bảo máy chủ của bạn đáp ứng các yêu cầu cần thiết là bước quan trọng đầu tiên. Điều này giúp quá trình thiết lập diễn ra suôn sẻ và tránh các lỗi không đáng có.
Yêu cầu phần cứng và phần mềm
Để vận hành tốt ứng dụng Laravel trên Nginx, máy chủ của bạn cần đáp ứng một số yêu cầu cơ bản. Về phần cứng, cấu hình tối thiểu nên có là 1 CPU, 2GB RAM và khoảng 25GB dung lượng ổ cứng SSD. Tất nhiên, đây chỉ là mức đề xuất cho các dự án nhỏ; các ứng dụng lớn hơn sẽ đòi hỏi tài nguyên cao hơn. Việc hiểu rõ về phần cứng server như Ram ecc, Chip Xeon là gì, và các loại ổ cứng như SAS là gì, Nvme là gì giúp bạn tối ưu hiệu suất và lựa chọn cấu hình phù hợp.
Về phần mềm, Laravel 8 (một phiên bản phổ biến) yêu cầu PHP phiên bản 7.3 trở lên. Bạn cũng sẽ cần Composer, trình quản lý gói phụ thuộc cho PHP, để cài đặt Laravel và các thư viện liên quan. Ngoài ra, một hệ quản trị cơ sở dữ liệu như MySQL hoặc MariaDB là không thể thiếu để lưu trữ dữ liệu cho ứng dụng.
Chuẩn bị máy chủ Ubuntu 20.04
Đầu tiên, hãy đảm bảo hệ thống của bạn được cập nhật lên phiên bản mới nhất. Việc này giúp vá các lỗ hổng bảo mật và tăng cường tính ổn định. Hãy mở terminal và chạy lệnh sau: sudo apt update && sudo apt upgrade -y
Tiếp theo, bạn cần cài đặt một số công cụ cần thiết như curl, git và unzip. Đây là những tiện ích cơ bản sẽ được sử dụng trong suốt quá trình cài đặt. sudo apt install curl git unzip -y
Cuối cùng, việc thiết lập tường lửa cơ bản là rất quan trọng để bảo vệ máy chủ. Sử dụng UFW (Uncomplicated Firewall) có sẵn trên Ubuntu là một lựa chọn đơn giản và hiệu quả. Bạn có thể cho phép truy cập SSH và Nginx bằng các lệnh sau: sudo ufw allow OpenSSH, sudo ufw allow ‘Nginx Full’, sudo ufw enable

Cài đặt Laravel trên máy chủ Ubuntu
Sau khi đã chuẩn bị xong môi trường máy chủ, bước tiếp theo là cài đặt các thành phần cốt lõi bao gồm PHP, Composer và cuối cùng là tạo dự án Laravel đầu tiên của bạn.
Cài đặt PHP và các extension cần thiết cho Laravel
Laravel phụ thuộc vào nhiều extension của PHP để hoạt động đầy đủ. Bạn cần cài đặt PHP cùng với các module này. Ubuntu 20.04 hỗ trợ nhiều phiên bản PHP, và chúng ta sẽ sử dụng phiên bản PHP 7.4, một lựa chọn ổn định và tương thích tốt.
Chạy lệnh sau để cài đặt PHP-FPM (FastCGI Process Manager) và các extension cần thiết: sudo apt install php7.4-fpm php7.4-mysql php7.4-mbstring php7.4-xml php7.4-bcmath php7.4-curl php7.4-zip php7.4-gd -y
Các extension này có vai trò quan trọng: php-mysql dùng để kết nối cơ sở dữ liệu, php-mbstring xử lý chuỗi ký tự đa byte, và php-xml để làm việc với dữ liệu XML. Sau khi cài đặt, bạn có thể kiểm tra phiên bản PHP bằng lệnh php -v.
Cài đặt Composer và tạo project Laravel
Composer là công cụ không thể thiếu trong hệ sinh thái PHP hiện đại. Nó giúp bạn quản lý các thư viện mà dự án Laravel của bạn sử dụng. Để cài đặt Composer, hãy tải trình cài đặt từ trang chủ và di chuyển nó vào thư mục /usr/local/bin để có thể gọi lệnh composer từ bất kỳ đâu.
Đầu tiên, tải trình cài đặt: curl -sS https://getcomposer.org/installer -o composer-setup.php
Sau đó, thực thi trình cài đặt: sudo php composer-setup.php –install-dir=/usr/local/bin –filename=composer
Bây giờ bạn đã có Composer. Hãy di chuyển đến thư mục /var/www và sử dụng Composer để tạo một dự án Laravel mới: cd /var/www
sudo composer create-project –prefer-dist laravel/laravel azweb-project
Cuối cùng, bạn cần cấp quyền cho Nginx để có thể ghi vào các thư mục storage và bootstrap/cache. Đây là bước cực kỳ quan trọng để tránh lỗi quyền truy cập sau này. sudo chown -R www-data:www-data /var/www/azweb-project/storage
sudo chown -R www-data:www-data /var/www/azweb-project/bootstrap/cache

Cấu hình Nginx để phục vụ ứng dụng Laravel
Khi đã có mã nguồn Laravel, chúng ta cần “chỉ” cho máy chủ Nginx biết cách phục vụ ứng dụng này. Điều này được thực hiện thông qua việc tạo một file cấu hình virtual host (còn gọi là server block).
Cài đặt Nginx trên Ubuntu 20.04
Nếu bạn chưa cài đặt Nginx ở bước chuẩn bị, bạn có thể thực hiện dễ dàng bằng một lệnh duy nhất: sudo apt install nginx -y
Sau khi cài đặt hoàn tất, dịch vụ Nginx sẽ tự động khởi chạy. Bạn có thể kiểm tra trạng thái của nó để chắc chắn mọi thứ đều ổn: sudo systemctl status nginx
Nếu trạng thái là active (running), có nghĩa là Nginx đã được cài đặt và đang hoạt động. Bạn có thể thử truy cập địa chỉ IP của máy chủ trên trình duyệt và sẽ thấy trang chào mừng mặc định của Nginx.
Tạo file cấu hình virtual host cho Laravel
Bây giờ là phần quan trọng nhất: tạo file cấu hình cho trang web Laravel của bạn. Nginx lưu trữ các file cấu hình này trong thư mục /etc/nginx/sites-available. Hãy tạo một file mới cho dự án của bạn: sudo nano /etc/nginx/sites-available/azweb-project
Bên trong file này, hãy dán nội dung cấu hình sau và tùy chỉnh lại server_name và root cho phù hợp:
server { listen 80; server_name your_domain.com www.your_domain.com; root /var/www/azweb-project/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; index index.php index.html index.htm; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ \.php$ { fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(ht|svn|git) { deny all; }}
Cấu hình này chỉ cho Nginx rằng thư mục gốc của trang web là /public và cách xử lý các tệp PHP thông qua PHP-FPM.
Sau khi lưu file, bạn cần kích hoạt cấu hình này bằng cách tạo một liên kết tượng trưng (symbolic link) đến thư mục sites-enabled: sudo ln -s /etc/nginx/sites-available/azweb-project /etc/nginx/sites-enabled/
Cuối cùng, kiểm tra cú pháp file cấu hình và khởi động lại Nginx để áp dụng thay đổi: sudo nginx -t
sudo systemctl restart nginx

Thiết lập các bước cấu hình cần thiết cho Laravel
Mã nguồn đã sẵn sàng, máy chủ web cũng đã được cấu hình. Giờ là lúc chúng ta đi sâu vào việc tinh chỉnh bên trong ứng dụng Laravel để nó có thể kết nối với cơ sở dữ liệu và hoạt động một cách tối ưu.
Cấu hình environment (.env) và kết nối database
File .env là trái tim của việc cấu hình trong Laravel. Nó chứa tất cả các thông tin nhạy cảm và các biến môi trường như thông tin kết nối cơ sở dữ liệu, cấu hình mail, key của ứng dụng… Đầu tiên, hãy sao chép file .env.example thành file .env: cd /var/www/azweb-project
sudo cp .env.example .env
Tiếp theo, hãy tạo một khóa ứng dụng duy nhất. Khóa này được sử dụng để mã hóa session và các dữ liệu quan trọng khác. sudo php artisan key:generate
Bây giờ, hãy mở file .env để chỉnh sửa: sudo nano .env
Bạn cần cập nhật các thông tin kết nối cơ sở dữ liệu cho chính xác:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=your_database_name DB_USERNAME=your_database_user DB_PASSWORD=your_database_password
Đừng quên thay đổi APP_NAME, APP_ENV (chuyển thành production khi triển khai thực tế) và APP_DEBUG (chuyển thành false để bảo mật).

Thiết lập cache, session và queue để tối ưu hiệu suất
Để ứng dụng Laravel đạt hiệu suất cao nhất, việc sử dụng cache là vô cùng quan trọng. Laravel hỗ trợ nhiều trình điều khiển cache khác nhau như file, database, Memcached, và Redis. Vps DigitalOcean thường là lựa chọn được ưu tiên cho môi trường production nhờ tốc độ vượt trội. Bạn có thể thay đổi CACHE_DRIVER và SESSION_DRIVER trong file .env thành redis.
Ngoài ra, các tác vụ tốn nhiều thời gian như gửi email, xử lý hình ảnh không nên thực hiện ngay lập tức khi người dùng yêu cầu. Thay vào đó, hãy đẩy chúng vào hàng đợi (queue) để xử lý nền. Điều này giúp ứng dụng phản hồi người dùng nhanh hơn đáng kể. Laravel Queue kết hợp với Supervisor, một trình quản lý tiến trình, sẽ đảm bảo các worker xử lý hàng đợi luôn hoạt động ổn định. Bạn có thể cấu hình Supervisor để chạy lệnh php artisan queue:work và tự động khởi động lại nếu nó bị lỗi.
Kiểm tra và tối ưu hiệu suất ứng dụng trên Nginx
Sau khi hoàn tất các bước cài đặt và cấu hình, việc kiểm tra lại toàn bộ hệ thống và tìm cách tối ưu hóa là bước cuối cùng để đảm bảo ứng dụng của bạn hoạt động mượt mà và hiệu quả.
Kiểm tra hoạt động cơ bản của ứng dụng Laravel
Cách đơn giản nhất để kiểm tra là mở trình duyệt và truy cập vào tên miền bạn đã cấu hình. Nếu mọi thứ chính xác, bạn sẽ thấy trang chào mừng mặc định của Laravel. Đây là dấu hiệu cho thấy Nginx đã chuyển tiếp yêu cầu đến Laravel thành công và ứng dụng đang hoạt động.
Bạn cũng nên sử dụng các công cụ dành cho nhà phát triển (Developer Tools) có sẵn trong trình duyệt (nhấn F12) để kiểm tra tab “Network”. Tại đây, bạn có thể xem thời gian tải trang, mã trạng thái HTTP (cần là 200 OK) và các header phản hồi. Điều này giúp bạn có cái nhìn đầu tiên về hiệu suất của ứng dụng.

Tối ưu cấu hình Nginx và Laravel
Để cải thiện tốc độ tải trang, bạn nên kích hoạt tính năng nén Gzip trên Nginx. Gzip sẽ nén các tệp văn bản như HTML, CSS, JavaScript trước khi gửi đến trình duyệt, giúp giảm đáng kể dung lượng truyền tải. Bạn cũng nên thiết lập cache header (expires) cho các tài sản tĩnh (hình ảnh, CSS, JS) để trình duyệt lưu trữ chúng và không cần tải lại trong các lần truy cập sau.
Về phía PHP, hãy đảm bảo OPcache được bật. OPcache giúp tăng tốc độ ứng dụng bằng cách lưu trữ mã kịch bản đã được biên dịch sẵn trong bộ nhớ, loại bỏ nhu cầu biên dịch lại mã PHP mỗi khi có yêu cầu.
Trong Laravel, hãy chạy các lệnh tối ưu hóa cho môi trường production: php artisan config:cache, php artisan route:cache, php artisan view:cache. Các lệnh này tạo ra các file cache cho cấu hình, định tuyến và view, giúp Laravel khởi động nhanh hơn. Đồng thời, hãy chú ý tối ưu các truy vấn cơ sở dữ liệu, đặc biệt là tránh vấn đề N+1 query bằng cách sử dụng eager loading (ví dụ: with()).
Xử lý lỗi thường gặp và cách khắc phục
Trong quá trình cài đặt, bạn có thể gặp một số lỗi phổ biến. Biết cách xác định nguyên nhân và khắc phục sẽ giúp bạn tiết kiệm rất nhiều thời gian và công sức.
Lỗi 403 Forbidden hoặc lỗi quyền truy cập
Lỗi 403 Forbidden thường xuất hiện khi Nginx không có quyền đọc các tệp trong thư mục dự án của bạn hoặc không có quyền ghi vào các thư mục cần thiết như storage và bootstrap/cache.
Nguyên nhân chính là do quyền sở hữu (owner) và quyền truy cập (permission) của tệp và thư mục chưa chính xác. Người dùng mà Nginx đang chạy (thường là www-data trên Ubuntu) cần có quyền đọc toàn bộ dự án và quyền ghi vào các thư mục đã đề cập.
Để khắc phục, hãy kiểm tra lại và chạy lại các lệnh sau: sudo chown -R $USER:www-data /var/www/azweb-project, sudo find /var/www/azweb-project -type f -exec chmod 664 {} \;, sudo find /var/www/azweb-project -type d -exec chmod 775 {} \;, sudo chown -R www-data:www-data /var/www/azweb-project/storage, sudo chown -R www-data:www-data /var/www/azweb-project/bootstrap/cache
Lỗi 500 Internal Server Error
Lỗi 502 Bad Gateway là một lỗi chung phía máy chủ, cho biết có điều gì đó không ổn nhưng không chỉ rõ nguyên nhân. Đây là lúc bạn cần trở thành một “thám tử” và kiểm tra các file log.
Nơi đầu tiên cần xem là file log của Laravel tại storage/logs/laravel.log. File này sẽ ghi lại chi tiết các lỗi PHP hoặc lỗi logic trong ứng dụng của bạn, thường đi kèm với một stack trace rõ ràng.
Nếu log Laravel trống, hãy kiểm tra file log lỗi của Nginx tại /var/log/nginx/error.log. Lỗi ở đây có thể liên quan đến cấu hình Nginx sai, sự cố với PHP-FPM hoặc các vấn đề cấp thấp hơn. Các nguyên nhân phổ biến gây ra lỗi 500 bao gồm: sai thông tin kết nối cơ sở dữ liệu trong file .env, thiếu một extension PHP nào đó, hoặc lỗi cú pháp trong mã nguồn của bạn.

Các best practices khi dùng Laravel với Nginx trên Ubuntu 20.04
Để duy trì một ứng dụng an toàn, ổn định và hiệu suất cao trong dài hạn, việc tuân thủ các quy tắc thực hành tốt nhất là điều cần thiết.
- Luôn cập nhật phiên bản mới nhất: Thường xuyên cập nhật hệ điều hành Ubuntu, Nginx, PHP và các gói phụ thuộc của Laravel. Các bản cập nhật không chỉ mang lại tính năng mới mà còn vá các lỗ hổng bảo mật quan trọng. Bạn có thể tham khảo thêm Windows Server 2025 để hiểu thêm về môi trường server nói chung.
- Backup thường xuyên và bảo mật thông tin server: Hãy thiết lập một lịch trình backup tự động cho cả mã nguồn và cơ sở dữ liệu. Lưu trữ các bản backup ở một nơi an toàn. Đồng thời, hãy tăng cường bảo mật máy chủ bằng cách sử dụng khóa SSH thay vì mật khẩu, cấu hình tường lửa chặt chẽ và cài đặt SSL/TLS (Let’s Encrypt) để mã hóa toàn bộ lưu lượng truy cập.
- Tối ưu hóa log và theo dõi hiệu năng định kỳ: Mặc dù log rất hữu ích để gỡ lỗi, nhưng chúng cũng có thể chiếm nhiều dung lượng đĩa. Hãy cấu hình xoay vòng log (log rotation) để quản lý chúng. Sử dụng các công cụ giám sát để theo dõi tài nguyên máy chủ (CPU, RAM, disk) và hiệu suất ứng dụng để phát hiện sớm các vấn đề tiềm ẩn.
- Tránh chỉnh sửa trực tiếp file cấu hình khi chưa backup: Trước khi thay đổi bất kỳ file cấu hình quan trọng nào (như cấu hình Nginx hoặc file
.env), hãy luôn tạo một bản sao lưu. Một thay đổi nhỏ không chính xác có thể khiến toàn bộ ứng dụng của bạn ngừng hoạt động.

Kết luận
Qua bài viết này, AZWEB đã hướng dẫn bạn toàn bộ quy trình cài đặt và cấu hình Laravel với Nginx trên máy chủ Ubuntu 20.04. Chúng ta đã cùng nhau đi qua các bước chính: từ việc chuẩn bị môi trường, cài đặt PHP và Composer, tạo dự án Laravel, cấu hình Nginx server block, cho đến việc tinh chỉnh ứng dụng và tối ưu hiệu suất. Việc nắm vững các bước này sẽ giúp bạn xây dựng một nền tảng vững chắc cho bất kỳ dự án web nào.
Sự kết hợp giữa Laravel, Nginx và Ubuntu 20.04 tạo ra một môi trường mạnh mẽ, linh hoạt và hiệu suất cao. Đừng ngần ngại bắt tay vào thực hành ngay bây giờ. Quá trình tự mình thiết lập sẽ mang lại cho bạn những kinh nghiệm quý báu. Nếu có bất kỳ thắc mắc nào, hãy để lại bình luận bên dưới, đội ngũ của AZWEB luôn sẵn sàng hỗ trợ bạn. Chúc bạn thành công trên con đường phát triển ứng dụng web chuyên nghiệp