Trang chủ Linux WebserverNGINX LEMP cho VPS [Phần 2] – Thêm VirtualHost (thêm domain) cho NGINX

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

bởi Thạch Phạm
25 bình luận 4579 views
Khuyến mãi hosting

Ở 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.

25 bình luận

Có thể bạn quan tâm

0 0 vote
Article Rating
guest
25 Comments
mới nhất
cũ nhất đánh giá nhiều
Inline Feedbacks
View all comments
kevin109

mình chạy file php báo lỗi File not found. mong được giúp đỡ

Thắng

Cái staticfiles.conf bị lỗi cú pháp mà k biết lỗi chỗ nào, mình cứ include file đó là không start nginx được.

Phước

Thạch Phạm cho mìn hỏi lm sao để khi nhấn vào tên miền thì nó sẽ tự động chạy đến info.php . vd ở trên là chỉ cần nhập tên miền abcxyz.com -> tự chay sang abcxyz.com/info.php

Lâm

Chào Thạch mình đã cấu hình xong hết và restart service thành công , nhưng khi truy cập vào trang abcxyz.com/info.php nó hiện ra trang khác có nội dung abcxyz.com và nội dung quảng cáo chứ ko hiện trang info.php . máy chủ linux của mình chỉ mới cài bộ LEMP test nginx và php-fpm ok .

Lâm

ah mình hiểu mình sai chỗ nào rồi ” (nhớ thay lại thành tên domain bạn cần thay nhé chứ không phải cứ copy & paste đâu) ” nhưng vấn đề ở đây là máy chủ linux của mình mới nguyên , chưa có domain nào hết. Vậy tạo domain như thế nào nếu như VPS chưa có j cả ngoài bộ cài LEMP . Xin lỗi vì mình mất căn bản nhưng ko có ai để hỏi hết. Cám ơn Thạch trước 🙂

Duy Nguyen

domain là tên miền phải đi mua mới có chứ. không có domain thì cài sv làm gì ta

Duy Nguyen

Chào bạn. Cho mình hỏi đến bước gần cuối của phần 2 này có mục
root /usr/share/nginx/html;
Thay thành
root /home/nginx/abcxyz.com/public_html;
vậy có hai dòng ” root /usr/share/nginx/html;” thì thay dòng nào.
mình có thay cả 2 dòng và khi cài đặt xong chạy file info.php oke nhưng khổ lỗi là vào bằng domain và vào bằng ip đều giống nhau. nếu cài đúng thì vào bằng ip sẽ hiện ” Welcome to nginx!”

xin hỏi mình bị lỗi thế nào vậy

Duy Nguyen

Mình cấu hình như bạn rồi, vào trang chủ cũng được rồi nhưng khi click sang các trang khác thì bị báo lỗi 404 mà ko biết bị sai chỗ nào

Duc

Mình thử cài drupal 8 cấu hình không biết thế nào mà chỉ .php là chạy trả về mã 200 còn các file css, js trong thư mục cài đặt core toàn lỗi 403. Đã thử các kiểu con đà điểu mà không được. Hỏi bác google mấy ngày hôm nay mà chưa biết nguyên nhân tại sao. Có bác nào cao thủ đã từng bị tình trạng giống mình không xin chỉ giáo với. Mấy ngày fix lỗi mà không được cảm thấy vừa ức chế vừa oải quá.

Duc

Các file ảnh, css, js có Content-Type đều là text/html liệu có phải là nguyên nhân gây ra lỗi 403 không? Không hiểu tại sao chỉ có .php là chạy mặc dù đã cấu hình
include /etc/nginx/mime.types;
default_type application/octet-stream;
Có bạn nào biết nguyên nhân không?

Thanh

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

Đoạn này được thêm vào default.conf, như thế đồng nghĩa với việc các file domain.com.conf sinh ra cũng có file đó, vậy là mấy file php.conf staticfiles.conf và block.conf đc include rất nhiều lần.

Liệu mình để ở nginx.conf có ổn hơn không Thạch nhỉ

Dang Khoa

Mình làm tới bước tạo file php.conf . Sau khi restart lại nginx thì báo lỗi
nginx: [emerg] unknown directive “location” in /etc/nginx/conf.d/php.conf:1
nginx: configuration file /etc/nginx/nginx.conf test failed
Xin hỏi mình phải fix thế nào ạ ?

ThanhNam

Chào Thạch!

Mình đang chuyển web về site của mình về server mới AZDigi. Bắt đầu cài LEMP đến bước thì dừng lại vì không thể off site hiện tại được.

Thạch có cách test nào khác không?

Hoặc giả sử bước tiếp theo mình cài wordpress trên VPS thì mình sẽ test chạy thử bằng cách nào?

ThanhNam

Đến bước: tạo 1 file tên info.php lưu trong thư mục public_html của domain thì dừng lại

trinhkhoi

Em chào anh ah,
Anh xem giúp em lỗi này với được không ah
[root@muaba /]# service nginx restart
nginx: [emerg] open() "/home/nginx/muaba.com.vn/log/error.log" failed (13: Permission denied)
nginx: configuration file /etc/nginx/nginx.conf test failed

Tuấn

Chào anh! Cho em hỏi là em đã làm giống hoàn toàn các bước trên của anh nhưng khi gõ domain/info.php thì nó báo not found. Anh giúp giùm em với.
404 Not Found
nginx/1.10.1

Bằng

Chào bạn,
Mình làm theo các bước của phần “I. Thiết lập lại thư mục cấu hình NGINX”, và vừa xong các bước này thì mình run “service nginx restart” và bị lỗi ” [emerge] “location” directive is not allowed here in /etc/nginx/conf.d/block.conf:2″
Nhờ bạn chỉ giúp!

Bằng

Mình đã fix được rồi, do mình update nhầm file, thay vì vào file nginx.conf, mình lại update vào file default.conf.
Xin lỗi vì đã làm phiền 🙂

Long Dev

Trong file /home/nginx/domain.com/log/error.log của mình có rất nhiều lỗi dạng giống như:
2016/08/04 00:19:10 [error] 16280#16280: *252 open() “/home/nginx/domain.com/public_html/phim/cam-bay-thien-than/theme/frontend/default/js/jquery.hoverIntent.minified.js” failed (2: No such file or directory), client: 173.245.48.150, server: http://www.domain.com, request: “GET /phim/cam-bay-thien-than/theme/frontend/default/js/jquery.hoverIntent.minified.js HTTP/1.1”, host: “www.domain.com”, referrer: “http://www.domain.com/phim/cam-bay-thien-than/”

Mình làm theo serie LEMP của ad, giờ phải làm sao để hết lỗi này?

Long Dev

Tập tin thì có nhưng đường dẫn sai đó bạn.
Đường dẫn đúng là: "/home/nginx/domain.com/public_html/theme/frontend/default/js/jquery.hoverIntent.minified.js"
Toàn bộ file tĩnh (.js, .css…) bị giống như vậy hết luôn. Giờ cấu hình làm sao để nó tự ra đường dẫn đúng vậy bạn?

Tú Nguyễn

Trong /etc/nginx/conf.d/ của mình không có file nào cả, mình tìm cũng không thấy file default.conf thì phải làm sao hả bạn ?

25
0
Would love your thoughts, please comment.x
()
x