Thứ sáu, 25/04/2014 | 00:00 GMT+7

Cách thiết lập server block Nginx (server ảo) trên Ubuntu 14.04 LTS

Khi sử dụng web server Nginx, server blocks (tương tự như server ảo trong Apache) được dùng để đóng gói chi tiết cấu hình và lưu trữ nhiều hơn một domain trên một server duy nhất.

Trong hướng dẫn này, ta sẽ thảo luận về cách cấu hình khối server trong Nginx trên server Ubuntu 14.04.

Yêu cầu

Ta sẽ sử dụng một user không phải root với các quyền sudo trong suốt hướng dẫn này. Nếu bạn không có user như thế này được cấu hình , bạn có thể thực hiện một user theo các bước 1-4 trong hướng dẫn cài đặt server ban đầu Ubuntu 14.04 của ta .

Bạn cũng cần phải cài đặt Nginx trên server của bạn . Nếu bạn muốn toàn bộ LEMP (Linux, Nginx, MySQL và PHP) trên server của bạn , bạn có thể làm theo hướng dẫn của ta về cách cài đặt LEMP trong Ubuntu 14.04 . Nếu bạn chỉ cần Nginx, bạn có thể cài đặt nó bằng lệnh :

sudo apt-get update sudo apt-get install nginx 

Khi bạn đã đáp ứng các yêu cầu này, bạn có thể tiếp tục với hướng dẫn này.

Với mục đích demo , ta sẽ cài đặt hai domain với server Nginx của ta . Các domain ta sẽ sử dụng trong hướng dẫn này là example.comtest.com .

Bạn có thể tìm thấy hướng dẫn về cách cài đặt domain với DigitalOcean tại đây. Nếu bạn không có hai domain dự phòng để chơi, hãy sử dụng tên giả ngay bây giờ và sau này ta sẽ chỉ cho bạn cách cấu hình máy tính local để kiểm tra cấu hình của bạn.

Bước một - Cài đặt folder root tài liệu mới

Theo mặc định, Nginx trên Ubuntu 14.04 có một khối server được bật theo mặc định. Nó được cấu hình để cung cấp tài liệu ra khỏi một folder tại:

/usr/share/nginx/html 

Ta sẽ không sử dụng mặc định vì nó dễ dàng hơn để làm việc với những thứ trong folder /var/www . Gói Nginx của Ubuntu không sử dụng /var/www làm root tài liệu của nó theo mặc định do chính sách Debian về các gói sử dụng / var / www .

Vì ta là user chứ không phải người bảo trì gói, ta có thể nói với Nginx rằng đây là nơi ta muốn tài liệu root của bạn . Cụ thể, ta muốn có một folder cho mỗi trang web của ta trong folder /var/www và ta sẽ có một folder dưới tên html để chứa các file thực của ta .

Đầu tiên, ta cần tạo các folder cần thiết. Ta có thể thực hiện việc này bằng lệnh sau. Cờ -p yêu cầu mkdir tạo bất kỳ folder mẹ nào cần thiết trong quá trình:

<pre>
sudo mkdir -p / var / www / <span class = “highlight”> example.com </span> / html
sudo mkdir -p / var / www / <span class = “highlight”> test.com </span> / html
</pre>

Đến đây bạn đã tạo các folder của bạn , ta cần chuyển quyền sở hữu cho regular user của bạn . Ta có thể sử dụng biến môi trường $USER để thay thế account user mà ta hiện đang đăng nhập. Điều này sẽ cho phép ta tạo file trong folder này mà không cho phép khách truy cập của ta tạo nội dung.

<pre>
sudo chown -R $ USER: $ USER / var / www / <span class = “highlight”> example.com </span> / html
sudo chown -R $ USER: $ USER / var / www / <span class = “highlight”> test.com </span> / html
</pre>

Các quyền của root web của ta phải chính xác nếu bạn chưa sửa đổi giá trị umask của bạn , nhưng ta có thể đảm bảo bằng lệnh :

<pre>
sudo chmod -R 755 / var / www
</pre>

Cấu trúc folder của ta hiện đã được cấu hình và ta có thể tiếp tục.

Bước hai - Tạo các trang mẫu cho mỗi trang web

Bây giờ ta đã cài đặt cấu trúc folder , hãy tạo một trang mặc định cho mỗi trang web của ta để ta có một cái gì đó để hiển thị.

Tạo index.html trong domain đầu tiên của bạn:

<pre>
nano / var / www / <span class = “highlight”> example.com </span> /html/index.html
</pre>

Bên trong file , ta sẽ tạo một file thực sự cơ bản cho biết ta hiện đang truy cập trang web nào. Nó sẽ trông giống thế này:

<pre>
<html>
<head>
<title> Chào mừng bạn đến với <span class = “highlight”> Example.com </span>! </title>
</head>
<body>
<h1> Thành công! Khối server <span class = “highlight”> example.com </span> đang hoạt động! </h1>
</body>
</html>
</pre>

Lưu file khi bạn hoàn tất.

Vì file cho trang web thứ hai của ta về cơ bản sẽ giống nhau, ta có thể sao chép nó vào root tài liệu thứ hai của ta như sau:

<pre>
cp / var / www / <span class = “highlight”> example.com </span> /html/index.html / var / www / <span class = “highlight”> test.com </span> / html /
</pre>

Bây giờ, ta có thể mở file mới trong editor của bạn và sửa đổi nó để nó tham chiếu đến domain thứ hai của ta :

<pre>
nano / var / www / <span class = “highlight”> test.com </span> /html/index.html
</pre>
<pre>
<html>
<head>
<title> Chào mừng bạn đến với <span class = “highlight”> Test.com </span>! </title>
</head>
<body>
<h1> Thành công! Khối server <span class = “highlight”> test.com </span> đang hoạt động! </h1>
</body>
</html>
</pre>

Lưu file này khi bạn hoàn tất. Đến đây bạn có một số trang để hiển thị cho khách truy cập của hai domain của ta .

Bước 3 - Tạo file khối server cho mỗi domain

Bây giờ ta đã có nội dung mà ta muốn phục vụ, ta cần tạo các khối server để cho Nginx biết cách thực hiện việc này.

Theo mặc định, Nginx chứa một khối server được gọi là default mà ta có thể sử dụng làm mẫu cho các cấu hình của riêng mình. Ta sẽ bắt đầu bằng cách thiết kế khối server của domain đầu tiên, sau đó ta sẽ sao chép lại cho domain thứ hai và thực hiện các sửa đổi cần thiết.

Tạo file khối server đầu tiên

Như đã đề cập ở trên, ta sẽ tạo file cấu hình khối server đầu tiên của bạn bằng cách sao chép file mặc định:

<pre>
sudo cp / etc / nginx / sites-available / default / etc / nginx / sites-available / <span class = “highlight”> example.com </span>
</pre>

Bây giờ, hãy mở file mới bạn đã tạo trong editor của bạn với quyền root:

<pre>
sudo nano /etc/nginx/sites-available/example.com
</pre>

Bỏ qua các dòng comment , file sẽ trông giống như sau:

<pre>
người phục vụ {
nghe 80 server mặc định ;
nghe [::]: 80
server mặc định ipv6only = on;

root /usr/share/nginx/html; index index.html index.htm;  server_name localhost;  location / {     try_files $uri $uri/ =404; } 

}
</pre>

Đầu tiên, ta cần xem các chỉ thị lắng nghe. Chỉ một trong các khối server của ta có thể có đặc tả default_server . Điều này chỉ định khối nào sẽ chứa một yêu cầu nếu server_name được yêu cầu không trùng với bất kỳ khối server có sẵn nào.

Cuối cùng ta sẽ vô hiệu hóa cấu hình khối server mặc định, vì vậy ta có thể đặt tùy chọn default_server trong khối server này hoặc trong tùy chọn cho trang web khác của ta . Tôi sẽ để tùy chọn default_server được bật trong khối server này, nhưng bạn có thể chọn tùy chọn nào phù hợp nhất với tình huống của bạn .

Điều tiếp theo ta sẽ phải điều chỉnh là root tài liệu, được chỉ định bởi chỉ thị root . Trỏ nó vào root tài liệu của trang web mà bạn đã tạo:

<pre>
root / var / www / <span class = “highlight”> example.com </span> / html;
</pre>

Lưu ý : Mỗi câu lệnh Nginx phải kết thúc bằng dấu chấm phẩy (;), vì vậy hãy kiểm tra từng dòng của bạn nếu bạn gặp sự cố.

Tiếp theo, ta muốn sửa đổi server_name để phù hợp với các yêu cầu cho domain đầu tiên của ta . Ngoài ra, ta có thể thêm bất kỳ alias nào mà ta muốn khớp. Ta sẽ thêm alias www.example.com để chứng minh:

<pre>
server_name <span class = “highlight”> example.com </span> www . <span class = “highlight”> example.com </span>;
</pre>

Khi bạn hoàn tất, file của bạn sẽ trông giống như sau:

<pre>
người phục vụ {
nghe 80 server mặc định ;
nghe [::]: 80
server mặc định ipv6only = on;

root /var/www/<span class="highlight">example.com</span>/html; index index.html index.htm;  server_name <span class="highlight">example.com</span> www.<span class="highlight">example.com</span>;  location / {     try_files $uri $uri/ =404; } 

}
</pre>

Đó là tất cả những gì ta cần cho một cấu hình cơ bản. Lưu file để thoát.

Tạo file khối server thứ hai

Bây giờ ta đã có cấu hình khối server ban đầu, ta có thể sử dụng cấu hình đó làm cơ sở cho file thứ hai của bạn . Sao chép nó để tạo một file mới:

<pre>
sudo cp / etc / nginx / sites-available / <span class = “highlight”> example.com </span> / etc / nginx / sites-available / <span class = “highlight”> test.com </span>
</pre>

Mở file mới với quyền root trong editor :

<pre>
sudo nano / etc / nginx / sites-available / <span class = “highlight”> test.com </span>
</pre>

Trong file mới này, ta sẽ phải xem xét lại các chỉ thị listen . Nếu bạn vẫn bật tùy chọn default_server trong file cuối cùng, bạn sẽ phải xóa nó trong file này. Hơn nữa, bạn sẽ phải loại bỏ tùy chọn ipv6only=on , vì nó chỉ có thể được chỉ định một lần cho mỗi tổ hợp địa chỉ / cổng:

listen 80; listen [::]:80; 

Điều chỉnh chỉ thị root tài liệu để trỏ đến root tài liệu domain thứ hai của bạn:

<pre>
root / var / www / <span class = “highlight”> test.com </span> / html;
</pre>

Điều chỉnh server_name để trùng với domain thứ hai của bạn và bất kỳ alias nào:

<pre>
server_name <span class = “highlight”> test.com </span> www . <span class = “highlight”> test.com </span>;
</pre>

Tệp của bạn sẽ trông giống như thế này với những thay đổi sau:

<pre>
người phục vụ {
nghe 80;
nghe [::]: 80;

root /var/www/<span class="highlight">test.com</span>/html; index index.html index.htm;  server_name <span class="highlight">test.com</span> www.<span class="highlight">test.com</span>;  location / {     try_files $uri $uri/ =404; } 

}
</pre>

Khi bạn hoàn tất, hãy lưu file .

Bước 4 - Bật khối server của bạn và khởi động lại Nginx

Đến đây bạn đã tạo các khối server của bạn , ta cần kích hoạt chúng.

Ta có thể làm điều này bằng cách tạo các softlink từ các file này đến folder sites-enabled , mà Nginx đọc từ đó trong khi khởi động.

Ta có thể tạo các liên kết này bằng lệnh :

<pre>
sudo ln -s / etc / nginx / sites-available / <span class = “highlight”> example.com </span> / etc / nginx / sites-enable /
sudo ln -s / etc / nginx / sites-available / <span class = “highlight”> test.com </span> / etc / nginx / sites-enable /
</pre>

Các file này hiện nằm trong folder được kích hoạt. Tuy nhiên, file khối server mặc định mà ta sử dụng làm mẫu hiện cũng được bật và sẽ xung đột với file của ta có bộ tham số default_server .

Ta có thể vô hiệu hóa file khối server mặc định bằng cách xóa softlink . Nó sẽ vẫn có sẵn để tham khảo trong folder sites-available trên sites-available , nhưng nó sẽ không được đọc bởi Nginx khi khởi động:

sudo rm /etc/nginx/sites-enabled/default 

Ta cũng cần điều chỉnh một cài đặt thực sự nhanh chóng trong file cấu hình Nginx mặc định. Mở nó lên bằng lệnh :

sudo nano /etc/nginx/nginx.conf 

Ta chỉ cần bỏ ghi chú một dòng. Tìm và xóa comment khỏi đây:

server_names_hash_bucket_size 64; 

Bây giờ, ta đã sẵn sàng khởi động lại Nginx để kích hoạt các thay đổi . Bạn có thể thực hiện bằng cách gõ:

sudo service nginx restart 

Nginx bây giờ sẽ cung cấp cả hai domain của bạn.

Bước năm - Cài đặt file server lưu trữ local (Tùy chọn)

Nếu bạn không sử dụng domain mà bạn sở hữu và thay vào đó đang sử dụng các giá trị giả, bạn có thể sửa đổi cấu hình máy tính local của bạn để cho phép bạn tạm thời kiểm tra cấu hình khối server Nginx của bạn .

Điều này sẽ không cho phép khách truy cập khác xem trang web một cách chính xác, nhưng nó sẽ cung cấp cho bạn khả năng truy cập từng trang web một cách độc lập và kiểm tra cấu hình của bạn. Về cơ bản, điều này hoạt động bằng cách chặn các yêu cầu thường chuyển đến DNS để phân giải domain . Thay vào đó, ta có thể đặt các địa chỉ IP mà ta muốn máy tính local của bạn truy cập khi ta yêu cầu domain .

Đảm bảo rằng bạn đang hoạt động trên máy tính local của bạn trong các bước này chứ không phải server VPS của bạn. Bạn cần có quyền truy cập root, là thành viên của group quản trị hoặc có thể chỉnh sửa file hệ thống để thực hiện việc này.

Nếu bạn đang sử dụng máy tính Mac hoặc Linux ở nhà, bạn có thể chỉnh sửa file cần thiết bằng lệnh :

sudo nano /etc/hosts 

Nếu bạn đang sử dụng Windows, bạn có thể tìm thấy hướng dẫn để thay đổi file server của bạn tại đây.

Bạn cần địa chỉ IP công cộng của server và các domain bạn muốn định tuyến đến server . Giả sử rằng địa chỉ IP công cộng của server của tôi là 111.111.111.111 , các dòng tôi sẽ thêm vào file của bạn sẽ trông giống như sau:

<pre>
127.0.0.1 localhost
127.0.0.1 khách-máy tính để bàn
111.111.111.111 <span class = “highlight”> example.com </span>
111.111.111.111 <span class = “highlight”> test.com </span>
</pre>

Điều này sẽ chặn mọi yêu cầu đối với example.comtest.com và gửi chúng đến server của bạn, đó là những gì ta muốn nếu ta không thực sự sở hữu các domain mà ta đang sử dụng.

Lưu file khi bạn hoàn tất.

Bước sáu - Kiểm tra kết quả của bạn

Đến đây bạn đã cài đặt xong, bạn nên kiểm tra xem các khối server của bạn có đang hoạt động chính xác hay không. Bạn có thể thực hiện bằng cách truy cập các domain trong trình duyệt web :

<pre>
http: // <span class = "highlight"> example.com </span>
</pre>

Bạn sẽ thấy một trang trông như thế này:

Khối  server  đầu tiên của Nginx

Nếu bạn truy cập domain thứ hai của bạn , bạn sẽ thấy một trang web hơi khác:

<pre>
http: // <span class = “highlight”> test.com </span>
</pre>

Khối  server  thứ hai của Nginx

Nếu cả hai trang này đều hoạt động, bạn đã cấu hình thành công hai khối server độc lập với Nginx.

Đến đây, nếu bạn đã điều chỉnh file hosts của bạn trên máy tính local của bạn để kiểm tra, có thể bạn cần xóa các dòng bạn đã thêm.

Nếu bạn cần quyền truy cập domain vào server của bạn cho một trang web công khai, có thể bạn cần mua một domain cho từng trang web của bạn . Bạn có thể tìm hiểu cách cài đặt chúng để trỏ đến server của bạn tại đây.

Kết luận

Đến đây bạn sẽ có khả năng tạo khối server cho từng domain mà bạn muốn lưu trữ từ cùng một server . Không có bất kỳ giới hạn thực sự nào về số lượng khối server bạn có thể tạo, miễn là phần cứng của bạn có thể xử lý lưu lượng truy cập.

<div class = “author”> Bởi Justin Ellingwood </div>


Tags:

Các tin liên quan

Cách tùy chỉnh tên server Nginx của bạn sau khi biên dịch từ nguồn trong CentOS
2014-02-11
Cách triển khai ứng dụng Rails bằng Passenger với Nginx trên CentOS 6.5
2014-01-29
Cách triển khai ứng dụng Rails bằng Unicorn và Nginx trên CentOS 6.5
2014-01-29
Cách thêm module ngx_pagespeed vào Nginx trong Debian Wheezy
2014-01-15
Cách cấu hình cài đặt trang web WordPress đơn và nhiều trang với Nginx
2013-11-26
Cách triển khai ứng dụng Node.js bằng Systemd và Nginx
2013-11-26
Cách thiết lập server block Nginx trên Debian 7
2013-10-30
Cách thiết lập FastCGI Caching với Nginx trên VPS của bạn
2013-10-29
Cách phân phát nhiều blog ma trên một VPS bằng cách sử dụng server block Nginx
2013-10-21
Cách cài đặt Drupal với Nginx trên VPS Ubuntu 13.04
2013-10-16