LEMP cho VPS [Phần 2] – Thêm VirtualHost (thêm domain) cho NGINX

Bài này thuộc phần 2 của 9 phần trong serie LEMP cho VPS

Ở bài trước chúng ta đã cài thành công NGINX và PHP-FPM phiên bản mới nhất vào VPS sử dụng CentOS 6.5 rồi, nhưng ở đó mình chưa hướng dẫn bạn thêm domain vào VPS và tạo thư mục riêng cho domain đó, nên ở đây mình sẽ hướng dẫn:

  • Thiết lập lại các thư mục cấu hình NGINX.
  • Cách thêm một VirtualHost.

Tại sao mình lại cần thiết lập lại thư mục cấu hình NGINX? Là bởi vì để sau này bạn sẽ dễ dàng thêm các domain khác vào, chỉ cần copy vài ba lệnh thôi là được, mình sẽ hướng dẫn ở cuối bài.

I. Thiết lập lại thư mục cấu hình NGINX

Bước này bạn chỉ cần làm 1 lần duy nhất.

Trước khi tiến hành tái thiết lập thư mục cấu hình thì mình sẽ cần bạn hiểu qua vì sao chúng ta nên làm thế. Bây giờ bạn hãy mở file default.conf trong thư mục /etc/nginx/conf.d/ lên, đây là nội dung trong đó:

 server {

listen

80;

server_name localhost;

#charset koi8-r;

#access_log /var/log/nginx/log/host.access.log main;

location / {

root
/usr/share/nginx/html;

index index.html index.htm;

}

#error_page 404

/404.html;

# redirect server error pages to the static page /50x.html
#
error_page
500 502 503 504 /50x.html;

location = /50x.html {

root
/usr/share/nginx/html;

}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ .php$ {

#
proxy_pass
http://127.0.0.1;

#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ .php$ {

#
root

html;

#
fastcgi_pass
127.0.0.1:9000;

#
fastcgi_index index.php;

#
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

#
include

fastcgi_params;

#}

# deny access to .htaccess files, if Apache’s document root
# concurs with nginx’s one
#
#location ~ /.ht {

#
deny all;

#}
}

Trong đó, các đoạn mà mình bôi đậm đều sẽ sử dụng trên nhiều domain khác nhau nên chúng ta sẽ đem từng phần trong đó bỏ sang từng file riêng lẻ, sau đó sử dụng cú pháp include trong NGINX để nhúng các file này vào VirtualHost, vừa chuyên nghiệp lại gọn gàng.

Do vậy, bạn hãy xóa hết toàn bộ đoạn mà mình in đậm ở trên đi nhé và bắt đầu tạo các file dưới đây, các file này bạn đều tạo trong thư mục /etc/nginx/conf.d/ nhé.

Đầu tiên tạo file php.conf và bỏ nội dung này vào:

 # Ép xử lý PHP thông qua PHP-FPM location ~* .php$ {

fastcgi_index
index.php;

fastcgi_pass
127.0.0.1:9000;

#fastcgi_pass
unix:/var/run/php-fpm/php-fpm.sock;

include

fastcgi_params;

fastcgi_param
SCRIPT_FILENAME
$document_root$fastcgi_script_name;

fastcgi_param
SCRIPT_NAME

$fastcgi_script_name;

# Thiết lập timeout cho proxy
fastcgi_connect_timeout 60;

fastcgi_send_timeout 180;

fastcgi_read_timeout 180;

fastcgi_buffer_size 512k;

fastcgi_buffers 512 16k;

fastcgi_busy_buffers_size 512k;

fastcgi_temp_file_write_size 512k;

fastcgi_intercept_errors on;
}

Nếu bạn dùng Xenforo, hãy các đoạn dưới # Thiết lập timeout cho proxy đi.

Tiếp tục tạo file block.conf để chặn các file/thư mục không cho truy cập

 location = /robots.txt  {
 access_log off; log_not_found off;
}
 location = /favicon.ico {
 access_log off; log_not_found off; expires 30d;
}
 location ~ /.

{
access_log off; log_not_found off; deny all;
}
location ~ ~$

{
access_log off; log_not_found off; deny all;
}
location ~ /.git {
access_log off; log_not_found off; deny all;
}
location = /nginx.conf {
access_log off; log_not_found off; deny all;
}

Tạo thêm file tên staticfiles.conf và chèn đoạn sau vào:

 location ~* .(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso|eot|svg|ttf|woff)$ {

gzip_static off;

add_header Cache-Control “public, must-revalidate, proxy-revalidate”;

access_log off;

expires max;

break;
}
location ~* .(css|js)$ {

#add_header Pragma public;

add_header Cache-Control “public, must-revalidate, proxy-revalidate”;

access_log off;

expires 30d;

break;
}

Sau đó mở file default.conf ra và tìm:

#access_log  /var/log/nginx/log/host.access.log  main;

Thêm đoạn này vào dưới nó:

root
/usr/share/nginx/html;

Đồng thời xóa 2 đoạn có trong location / {
.

Sau đó chèn 3 đoạn này vào trước dấu }
ở cuối file.

 	include /etc/nginx/conf.d/php.conf; 	include /etc/nginx/conf.d/staticfiles.conf; 	include /etc/nginx/conf.d/block.conf;

Sửa và chèn xong thì file default.conf sẽ giống như thế này:

 server {

listen

80;

server_name localhost;

#charset koi8-r;

#access_log /var/log/nginx/log/host.access.log main; root
/usr/share/nginx/html;

location / {

}

#error_page 404

/404.html;

# redirect server error pages to the static page /50x.html
#
error_page
500 502 503 504 /50x.html;

location = /50x.html {

root
/usr/share/nginx/html;

}
include /etc/nginx/conf.d/php.conf; include /etc/nginx/conf.d/staticfiles.conf; include /etc/nginx/conf.d/block.conf;
}

Kế tiếp là bạn ra lại ngoài thư mục /etc/nginx, tạo thêm một thư mục mang tên domains và chuyển file default.conf sang thư mục này.

mkdir /etc/nginx/domains mv /etc/nginx/conf.d/default.conf /etc/nginx/domains

Cuối cùng là mở file nginx.conf, tìm:

include /etc/nginx/conf.d/*.conf;

Sửa lại thành

include /etc/nginx/domains/*.conf;

Tìm tiếp

access_log  /var/log/nginx/access.log  main;

Chèn đoạn này vào dưới nó:

index index.php  index.html index.htm;

Nếu muốn tiết kiệm CPU, thì hãy thêm dấu # vào trước access_log để không cho nó ghi log của các lượt truy cập vào website và VPS.

Bây giờ bạn có thể restart lại NGINX rồi.

service nginx restart

II. Thêm VirtualHost vào NGINX

Làm lại bước này khi cần thêm một domain khác vào.

Trước khi thêm VirtualHost, chúng ta sẽ cần thống nhất đường dẫn lưu file của từng domain là như thế nào cho nó khoa học.

Mình khuyến khích các bạn nên vào thư mục /home, tạo thêm một thư mục mang tên nginx và các thư mục của từng domain sẽ được lưu trong đó. Ví dụ: /home/nginx/abcxyz.com.

Trong mỗi thư mục của domain, chúng ta cần có thêm 2 thư mục bao gồm:

  • log/ – Để chứa các file log cho từng domain. Trong đây sẽ có 1 file tên là error.log.
  • public_html/ – Thư mục chứa code của web bạn, cụ thể là sau này chúng ta sẽ cài WordPress vô đây.

Như vậy, ví dụ mình cần thêm domain abcxyz.com vào NGINX thì sẽ chạy các lệnh sau (nhớ thay lại thành tên domain bạn cần thay nhé chứ không phải cứ copy & paste đâu):

mkdir -p /home/nginx/abcxyz.com/log touch /home/nginx/abcxyz.com/log/error.log mkdir -p /home/nginx/abcxyz.com/public_html chown -R nginx:nginx /home/nginx

Sau đó chúng ta sẽ copy file default.conf thành abcxyz.com.conf đặt trong cùng thư mục

cp /etc/nginx/domains/default.conf /etc/nginx/domains/abcxyz.com.conf

Mở file abcxyz.com.conf lên và tìm:

server_name  localhost;

Thay thành

server_name  www.abcxyz.com abcxyz.com;

Tìm tiếp

#access_log  /var/log/nginx/log/host.access.log  main;

Thêm vào phía dưới nó

error_log

/home/nginx/abcxyz.com/log/error.log

error;

Tìm tiếp

root
/usr/share/nginx/html;

Thay thành

root
/home/nginx/abcxyz.com/public_html;

Giờ thì lưu lại và restart lại NGINX

service nginx restart

Để test xem cả VirtualHost và PHP-FPM đã hoạt động tốt chưa, hãy tạo 1 file tên info.php lưu trong thư mục public_html của domain vừa thêm với nội dung là:

 <?php phpinfo(); ?>

Sau đó truy cập vào http://abcxyz.com/info.php, nếu nó hiển thị ra trang PHP như ở dưới thì thành công.

lemp-phpok

Ở trang đó bạn có thể biết được các thông tin quan trọng về phiên bản PHP mà bạn đang cài.

Sau này nếu muốn thêm domain khác, chỉ cần làm lại bước thêm VirtualHost này.

Tới đây coi như xong phần thêm VirtualHost, ở phần kế tiếp chúng ta sẽ làm thêm vài thao tác nữa để tối ưu NGINX tốt hơn vì nãy giờ chúng ta chưa tối ưu lại file nginx.conf.

Leave your comment