Cấu Hình Nginx Cho Laravel
·
4 min read
Thiết lập Nginx đúng cách rất quan trọng cho hiệu năng và bảo mật của ứng dụng Laravel. Đây là hướng dẫn cấu hình đã được kiểm chứng thực tế.
Server Block Cơ Bản
Đây là cấu hình Nginx tiêu chuẩn được khuyến nghị cho Laravel.
server {
listen 80;
listen [::]:80;
server_name example.com;
root /var/www/example.com/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
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/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
Giải Thích Các Directive Quan Trọng
- root: Trỏ đến thư mục
public, không phải thư mục gốc của dự án. Đây là biện pháp bảo mật quan trọng để ngăn truy cập vào.envhoặc code ứng dụng. - try_files: Directive quan trọng cho phép routing của Laravel hoạt động. Nó cố gắng tìm file, sau đó thư mục, và cuối cùng gửi mọi thứ đến
index.php. - fastcgi_pass: Kết nối Nginx với PHP-FPM. Đảm bảo đường dẫn socket khớp với phiên bản PHP của bạn (ví dụ:
php8.2-fpm.sock).
Tăng Cường Bảo Mật
Thêm các header này để cải thiện bảo mật:
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
Kích Thước Body Client
Nếu bạn cho phép upload file, bạn thường cần tăng giới hạn kích thước upload:
client_max_body_size 64M;
Nhớ cũng cập nhật upload_max_filesize và post_max_size trong php.ini.
Nén Gzip
Bật Gzip để giảm kích thước response và tăng tốc trang web:
gzip on;
gzip_vary on;
gzip_min_length 10240;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml;
gzip_disable "MSIE [1-6]\.";
Xử Lý Timeout
Với các script chạy lâu (như báo cáo hoặc import), bạn có thể cần tăng cài đặt timeout:
location ~ \.php$ {
fastcgi_read_timeout 300;
# ... các cài đặt khác
}
Khắc Phục Lỗi 502 Bad Gateway
Nếu bạn thấy lỗi "502 Bad Gateway", thường có nghĩa là PHP-FPM không chạy hoặc Nginx không thể kết nối đến socket.
- Kiểm tra xem PHP-FPM có đang chạy không:
systemctl status php8.2-fpm - Kiểm tra quyền truy cập file socket.
- Xác minh đường dẫn socket trong cấu hình Nginx.
Cấu hình Nginx đúng cách đảm bảo ứng dụng Laravel của bạn chạy mượt mà, an toàn và hiệu quả.