Ở phần I các bạn đã biết cách cấu hình Nginx Server đơn giản cũng như cấu trúc file nginx.conf. Cuối file nginx.conf có chỉ thị include /etc/nginx/conf.d/*.conf
gọi đến các file có đuôi mở rộng là .conf
dùng để tạo Virtual host , trong phần II này chúng ta chỉ xoay quanh các Block (khối) và Directive (chỉ thị) trong những file cấu hình đó thôi.
Đây là bài mà rất nhiều bạn quan tâm khi cấu hình web server nginx trong một hệ thống LEMP Stack nói chung, giúp các bạn tạo (host) các trang web mới nhanh chóng.
Xem lại Phần I: Tìm hiểu và cách cài đặt nginx cơ bản.
Bài viết này có thể áp dụng cho các phiên bản nginx cũ hơn nginx 1.0/1.5/1.8 bởi các directive và block là giống nhau.
1. Cấu trúc Virtual Host trong nginx 1.9.12
Theo mặc định /etc/nginx/conf.d
là folder chưa file cấu hình khi muốn thêm virtual host(host ảo) vào nginx, nó có một file default.conf
duy nhất. Trong default.conf có block server đây là block lớn bao trùm lên tất cả, bên trong block server là các directive và các block location con khác.
Để tạo một trang web mới bạn chỉ cần copy default.conf ra file mới thay đổi các giá trị bằng cách bỏ dấu comment #
cho phù hợp là xong. Còn file default.conf muốn làm gì thì làm hoặc đổi tên thành default.conf.bak để lưu lại, sau này nếu muốn host thêm trang web khác thì dùng.
2. Tạo cây thư mục cho website mới
mkdir -p /var/www/demo1.thuysys.com/{public_html,logs,backup}
Câu lệnh trên tạo ra 3 thư mục cùng lúc publich_html, logs, backup trong đường dẫn /var/www/demo1.thuysys.com/
. Lệnh trong linux rất linh hoạt, mỗi bài viết mình sẽ chèn các cú pháp mới vào, mới đầu sẽ hơi bỡ ngỡ dùng quen sẽ tiết kiệm thời gian gõ phím rất nhiều. Sau đó bạn có thể vưt file default.conf.bak bên trên vào thư mục backup cho gọn.
Phân quyền quản lý thư mục
chown -R nginx:nginx /var/www
Câu lệnh sẽ giao quyền quản lý thư mục /var/www
cho user nginx thuộc group nginx, làm tương tự như khi tạo Virtual host trên LAMP Server.
3. Cách tạo Virtual host trên nginx
Dùng Text editor VI tạo file config virtual host vi /etc/nginx/conf.d/demo1.thuysys.com.conf
có nội dung như sau:
server { listen 80; server_name demo1.thuysys.com www.demo1.thuysys.com; access_log /var/www/demo1.thuysys.com/logs/access.log; error_log /var/www/demo1.thuysys.com/logs/error.log; root /var/www/demo1.thuysys.com/public_html; index index.html index.htm index.php; }
Trên đây là thông số cấu hình tối thiểu nhất để tạo virtual host trên nginx. Toàn bộ virtualhost được bao trong block server.
- Listen: xác định IP và port lắng nghe request đến website, port
80
là giá trị mặc định. - server_name: gán hostname cho website, ở đây mình đặt hostname là demo1.thuysys.com
- access_log: nếu đã đọc phần I cơ bản về nginx bạn sẽ thấy chỉ thị access_log đã được khai báo trước đó trong block http (block cha của block server). Việc khai báo trong block server sẽ vô hiệu hóa chỉ thị access_log trong http và quy định lại đường dẫn đến file ghi log truy cập mới. Theo mình mỗi virtual host bạn cấu hình log riêng để dễ quản lý, giờ bạn có thể xóa chỉ thị access_log ngoài block http đi cho đỡ rối.
- error_log: quy định đường dẫn đến file ghi log lỗi, cũng tương tự access_log bạn xem lại file
/etc/nginx/nginx.conf
để cài đặt log cho phù hợp. - root: chỉ định đường dẫn đến source code của trang web.
- index: các file nginx sẽ xử lý.
Tiếp theo bạn lưu lại file cấu hình, truy cập lại URL http://demo1.thuysys.com nếu thấy kết quả như bên dưới là thành công rồi.
4. Kết bài
Trên đây là những kiến thức tạo virtual host hết sức cơ bản trên LEMP Server, bạn chú ý cách lồng ghép các block và directive để linh hoạt khi thêm host ảo trong nginx, hẹn gặp lại các bạn ở phần III. Thank you !
server_name : demo1.thuysys.com http://www.demo1.thuysys.com;
Cho em hỏi nếu để như vậy thì server_name nó hiểu thằng www hay non www nhỉ? Với lại nếu em muốn domain non-www thì bỏ cái http://www.xyz.com thì vẫn chạy bt chứ anh ?
Em có đọc cái bài cái ssl của anh, khi cài xong thì truy cập nó cứ tự nhảy vào https://www.xyz.com anh ạ
Nếu bạn dùng non-www thì server_name bạn bỏ www đi.
Còn bài viết cài SSL, do mình thích dùng www nên mình cấu hình tự động redirect từ non-www sang www khi người dùng nhập non-www trên address bar của trình duyệt.
Hi anh, khi chown nginx:nginx cho toàn bộ var/www thì làm sao phân quyền cho mỗi user sử dụng 1 thư mục trong var/www vậy anh, em muốn mỗi user có 1 thư mục web riêng, khi truy cập thì nó chỉ truy cập đc trong thư mục nó sớ hữu thôi, nếu cấp quyền cho user sở hữu ( tức là k phai nginx) thì lại k xử lý đc code.
Nếu muốn userA chạy webA, userB chạy webB bạn không cần phải chown nginx:nginx cho toàn bộ subfolder và file trong /var/www.
Ví dụ webA có đường dẫn /var/www/webA, thì bạn chỉ cần:
chown userA:groupA 755 cho folder và subfolder trong /var/www/webA.
chomod 644 cho tất cả các file trong /var/www/webA
Tham khảo: https://www.thuysys.com/domain-hosting/wordpress-co-ban/tim-hieu-chmod-chown-cach-sua-loi-phan-quyen-wordpress-tren-linux.html
Sau đó bạn phải tạo php-fpm pool cho từng user, thì web mới chạy được.