Cách thiết lập Nginx Server Block trên CentOS 7
Nginx là một trong những Web server phổ biến nhất trên thế giới , có chức năng quản lý một trong số các site có lưu lượng truy cập lớn nhất trên Internet. Trên thực tế, Nginx thường nhẹ hơn và có quy mô rộng hơn Apache, hơn nữa nó có thể được sử dụng như một Web server hoặc một reverse proxy.
Nginx sử dụng các server block để quản lí cấu hình của một website hay tên miên riêng biệt. Server block cho phép server lưu trữ nhiều tên miền hoặc giao diện bằng một hệ thống ghép đôi giữa nó với server block tương ứng.
Thông tin về một domain sẽ được lưu trữ trong một thư mục riêng trên server nên hệ thống có thể mở rộng mà không quan tâm đến giới hạn về phần mềm, miễn là server có thể đảm bào phục vụ được lưu lượng sử dụng.
Bài viết này sẽ hướng dẫn bạn cách thiết lập Nginx Server Block trên CentOS 7.
Yêu cầu
- Một server chạy Centos 7.
- Một non-root user với quyền sudo trên server đó. Tham khảo bài viết Thiết lập ban đầu cho server chạy Centos 7.
- Nginx được cài đặt trên server. Xem cách cài LEMP Stack( Linux, Nginx, MySQL, PHP) tại Hướng dẫn cài LEMP stack trên CentOS 7 . Nếu chỉ muốn cài Nginx, hãy thực hiện các bước sau:
Thêm Nginx repository vào danh sách các nguồn ứng dụng của server:
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
Dùng lệnh yum
để download và cài Nginx.
sudo yum install nginx
Sau khi cài xong, log in vào user trên để tiếp tục.
Note: Dưới đây ta sẽ cấu hình server block cho 2 tên miền làm ví dụ example.com
và example2.com
. Tuy nhiên, hãy thay thế tên miền này cùng các giá trị chữ đỏ bằng tên miền và các giá trị đi kèm của bạn nếu có thể.
Nếu không có một tên miền thật, hãy sử dụng những giá trị "bù nhìn" (dummy value ) để kiểm tra kết quả được trình bày ở phần cuối bài viết.
Bước 1 — Tạo Cấu trúc Thư mục
Thư mục gốc (document root) sẽ được đặt riêng là các thư mục con trong /var/www
. Ta sẽ tạo cho mỗi server block một thư mục con riêng.
Trong mỗi thư mục con đó, ta sẽ tạo một thư mục html
để lưu trữ dữ liệu web để thuận tiện cho việc lưu trữ và quản lí.
Dùng lệnh mkdir
để tạo các thư mục con (với cờ -p
cho phép tạo các thư mục con lồng nhau):
sudo mkdir -p /var/www/example.com/html
sudo mkdir -p /var/www/example2.com/html
Cấp quyền
Các thư mục vừa tạo chỉ có thể sử dụng bởi root
user. Ta cần cấp quyền truy cập và chỉnh sửa các file bên trong nó cho user bình thường bằng lệnh chown
:
sudo chown -R $USER:$USER /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example2.com/html
Với $USER
là user bạn đang sử dụng khi chạy lệnh. Đến đây user của ta đã có quyền sở hữu với thư mục con public_html
.
Ta cũng cần thay đổi quyền truy cập cho các thư mục này để đảm bảo quyền đọc của user trên chúng:
sudo chmod -R 755 /var/www
Bước 2 — Tạo trang demo
Ta sẽ tạo một file html đơn giản tên là index.html
cho mỗi tên miền cụ thể.
Bắt đầu với example.com
. Tạo file index.html
với l
nano /var/www/example.com/html/index.html
Copy đoạn code sau vào file:
Success! The example.com virtual host is working!
Lưu và đóng file.
Ta cũng có thể copy file này sang thư mục của tên miền thứ hai bằng lệnh:
cp /var/www/example.com/html/index.html /var/www/example2.com/html/index.html
Mở file index.html ( trong thư mục của tên miền thứ hai) sau đó sửa lại nó.
nano /var/www/example2.com/html/index.html
Success! The example2.com virtual host is working!
Bước 3 — Tạo file Server Block mới
Các file Server block xác địch cấu hình cho các trang web đi cùng với nó và quyết định phản hồi của server đối với các yêu cầu với những tên miền khác nhau.
Đầu tiên ta sẽ tạo các thư mục để lưu file. Thư mục sites-available
lưu trữ tất cả các file server block, còn thư mục sites-enabled
sẽ lưu đường dẫn đến server block cần kích hoạt. Tạo hai thư mục đó với lệnh:
sudo mkdir /etc/nginx/sites-available
sudo mkdir /etc/nginx/sites-enabled
Tiếp theo ta sẽ chỉ cho Nginx tìm kiếm các file server block trong thư mục sites-enabled
.
Mở file cấu hình Nginx:
sudo nano /etc/nginx/nginx.conf
Thêm những dòng sau vào cuối khối http {}
:
include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;
Dòng đầu tiên cho phép Nginx sử dụng các file server block trong sites-enabled
,còng dòng lệnh tiếp theo tăng bộ nhớ được phép sử dụng cho việc phân giải máy chủ ( vì ta đang sử dụng multiple domain).
Lưu và đóng file.
Tạo file Server Block
Nginx chứa một file server block mặc định là default.conf
, ta có thể dùng nó làm mẫu cho quá trình cấu hình.
Tạo file cấu hình server block mới bằng cách copy file cấu hình mặc định:
sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/sites-available/example.com.conf
Mở file vừa tạo với quyền root:
sudo nano /etc/nginx/sites-available/example.com.conf
Note: Tất cả các file cấu hình server block phải kết thúc bằng đuôi .conf
.
Output sẽ như sau:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}}
Đầu tiên ta cần chỉnh sửa server_name
, thay nó bằng example.com
, và www.example.com
để cả các yêu cầu chứa www.
và không chứa www.
đều được phản hồi như nhau:
server_name example.com www.example.com;
Tiếp theo ta sẽ chỉnh sửa mục root
, trỏ đến thư mục gốc vừa tạo ở trên:
root /var/www/example.com/html;
Thêm vào lệnh try_files
kết thúc bằng 404 error nếu tên file hoặc thư mục không hợp lệ
try_files $uri $uri/ =404;
Sau khi edit xong file cấu hình của ta sẽ như sau:
server {
listen 80;
server_name example.com www.example.com;
location / {
root /var/www/example.com/html;
index index.html index.htm;
try_files $uri $uri/ =404;
}error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}}
Lặp lại các bước trên để tạo một file server block thứ hai cho domain name còn lại:
Đầu tiên dùng lệnh cp
:
sudo cp /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-available/example2.com.conf
Mở file:
sudo nano /etc/nginx/sites-available/example2.com.conf
Edit file:
server {
listen 80;
server_name example2.com www.example2.com;
location / {
root /var/www/example2.com/html;
index index.html index.htm;
try_files $uri $uri/ =404;
}error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}}
Cuối cùng lưu và thoát.
Bước 4 — Kích hoạt các file Server Block
Sau khi tạo các file server block, ta cần kích hoạt chúng bằng cách tạo đường dẫn cho chúng từ thư mục sites-enabled
cho chúng:
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/example.com.conf
sudo ln -s /etc/nginx/sites-available/example2.com.conf /etc/nginx/sites-enabled/example2.com.conf
Restart Nginx để áp dụng các thay đổi:
sudo systemctl restart nginx
Bước 5 — Thiết lập File Local Host (Tùy chọn )
Nếu đang dùng các tên miền ví dụ tahy vì tên miền thật, bạn vẫn có thể test các file vừa tạo bằng cách thay đổi tạm thời file hosts
trên máy tính. Việc này sẽ điều hướng tất cả các yêu cầu đến tên miền ví dụ đến VPS server. Lưu ý rằng nó chỉ có hiệu lực với truy cập trên máy tính của bạn.
Note: Các thao tác sau được thwucj hiện trên máy của bạn, không phải trên VPS server.
Với các máy Mac hoặc Linux , edit các file hosts
bằng quyền admin với lệnh:
sudo nano /etc/hosts
Thêm vào public IP address của VPS, sau đó là tên miền ứng với VPS đó:
127.0.0.1 localhost
127.0.1.1 guest-desktopserver_ip_address example.comserver_ip_address example2.com
Bước 6 — Kiểm tra kết quả
Vào trình duyệt gõ:
http://example.com
Nếu thấy trang web sau:
Thì các bước cấu hình trên đã thành công.
Nếu vừa thay đổi các file hosts
,hãy xóa các dòng vừa thêm vào để đàm bảo máy tính cảu bạn không bị truy cập trái phép từ bên ngoài.
Tổng kết
Đến đây bạn đã có một server CentOS 7 có khả năng xử lí nhiều site với các tên miền khác nhau với mỗi site đó. Mở rộng chúng bằng cách thêm vào nhiều file server block khác, vì việc thêm các file này không bị giới hạn bởi phần mềm , miễn là server của bạn có khả năng xử lí được lưu lượng truy cập.