Thứ năm, 19/05/2016 | 00:00 GMT+7

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

Khi sử dụng web server Nginx, các khối server (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 server block trong Nginx trên server Ubuntu 16.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ể tạo một user theo hướng dẫn cài đặt server ban đầu Ubuntu 16.04 .

Bạn cũng cần phải cài đặt Nginx trên server . Các hướng dẫn sau đây bao gồm quy trình này:

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.

Cấu hình mẫu

Với mục đích demo , ta sẽ cài đặt hai domain với server Nginx . 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 tài liệu root mới

Theo mặc định, Nginx trên Ubuntu 16.04 có một server block được bật theo mặc định. Nó được cấu hình để cho truy cập tại /var/www/html .

Trong khi điều này hoạt động tốt cho một trang web, ta cần các folder bổ sung nếu ta sẽ phục vụ nhiều trang web. Ta có thể coi folder /var/www/html folder mặc định sẽ được phục vụ nếu yêu cầu của khách hàng không trùng với bất kỳ trang web nào khác .

Ta sẽ tạo cấu trúc folder trong /var/www cho mỗi trang web . Nội dung web thực tế sẽ được đặt trong một folder html trong các folder cụ thể của trang web này. Điều này mang lại cho ta một số tính linh hoạt bổ sung để tạo các folder khác được liên kết với các trang web như anh em ruột với folder html nếu cần.

Ta cần tạo các folder này cho mỗi trang web . Cờ -p yêu cầu mkdir tạo bất kỳ folder mẹ nào cần thiết trong quá trình:

  • sudo mkdir -p /var/www/example.com/html
  • sudo mkdir -p /var/www/test.com/html

Bây giờ ta đã có các folder của bạn , ta sẽ chỉ định lại quyền sở hữu các folder web cho account user thường . Điều này sẽ cho phép ta viết thư cho họ mà không cần sudo .

 

Ghi chú
Tùy thuộc vào nhu cầu của bạn, bạn có thể cần phải điều chỉnh lại quyền hoặc quyền sở hữu các folder để cho phép một số quyền truy cập nhất định vào user www-data . Ví dụ, các trang web động thường cần điều này. Các quyền cụ thể và yêu cầu quyền sở hữu hoàn toàn phụ thuộc vào cấu hình của bạn. Thực hiện theo các đề xuất cho công nghệ cụ thể mà bạn đang sử dụng.

 

Ta có thể sử dụng biến môi trường $USER để chỉ định quyền sở hữu cho account mà ta hiện đang đăng nhập ( đảm bảo bạn không đăng nhập bằng quyền root ). Điều này sẽ cho phép ta dễ dàng tạo hoặc chỉnh sửa nội dung trong folder này:

  • sudo chown -R $USER:$USER /var/www/example.com/html
  • sudo chown -R $USER:$USER /var/www/test.com/html

Các quyền của root web 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 :

  • sudo chmod -R 755 /var/www

Cấu trúc folder 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 để ta có một cái gì đó để hiển thị.

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

  • nano /var/www/example.com/html/index.html

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:

/var/www/example.com/html/index.html
<html>     <head>         <title>Welcome to Example.com!</title>     </head>     <body>         <h1>Success!  The example.com server block is working!</h1>     </body> </html> 

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

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

  • cp /var/www/example.com/html/index.html /var/www/test.com/html/

Bây giờ, ta có thể mở file mới trong editor :

  • nano /var/www/test.com/html/index.html

Sửa đổi nó để nó tham chiếu đến domain thứ hai :

/var/www/test.com/html/index.html
<html>     <head>         <title>Welcome to Test.com!</title>     </head>     <body>         <h1>Success!  The test.com server block is working!</h1>     </body> </html> 

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

Bước 3: Tạo file server block cho từng domain

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

Theo mặc định, Nginx chứa một server block đượ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ế server block 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 server block đầu tiên

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

  • sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/example.com

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

  • sudo nano /etc/nginx/sites-available/example.com

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

/etc/nginx/sites-available/example.com
server {         listen 80 default_server;         listen [::]:80 default_server;          root /var/www/html;         index index.html index.htm index.nginx-debian.html;          server_name _;          location / {                 try_files $uri $uri/ =404;         } } 

Đầu tiên, ta cần xem các chỉ thị lắng nghe. Chỉ một trong các server block trên server có thể bật tùy chọn default_server . Điều này chỉ định khối nào sẽ phân phát một yêu cầu nếu server_name được yêu cầu không trùng với bất kỳ server block có sẵn nào. Điều này không thường xuyên xảy ra trong các tình huống thế giới thực vì khách truy cập sẽ truy cập trang web thông qua domain của bạn.

Bạn có thể chọn chỉ định một trong các trang web làm "mặc định" bằng cách bao gồm tùy chọn default_server trong chỉ thị listen hoặc bạn có thể bật server block mặc định, khối này sẽ phân phát nội dung của folder /var/www/html nếu server được yêu cầu không thể được tìm thấy.

Trong hướng dẫn này, ta sẽ để nguyên server block mặc định để phục vụ các yêu cầu không phù hợp, vì vậy ta sẽ xóa default_server khỏi khối này và server block tiếp theo. Bạn có thể chọn thêm tùy chọn vào bất kỳ server block nào phù hợp với bạn.

/etc/nginx/sites-available/example.com
server {         listen 80;         listen [::]:80;          . . . } 
Ghi chú

Bạn có thể kiểm tra xem tùy chọn default_server chỉ được bật trong một file hoạt động duy nhất hay không bằng lệnh :

  • grep -R default_server /etc/nginx/sites-enabled/

Nếu các kết quả phù hợp được tìm thấy không có chú thích trong nhiều hơn trong file (hiển thị ở cột ngoài cùng bên trái), Nginx sẽ khiếu nại về cấu hình không hợp lệ.

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

/etc/nginx/sites-available/example.com
server {         listen 80;         listen [::]:80;          root /var/www/example.com/html;  } 

Tiếp theo, ta cần sửa đổi server_name để phù hợp với các yêu cầu cho domain đầu tiên . 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.

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

/etc/nginx/sites-available/example.com
server {         listen 80;         listen [::]:80;          root /var/www/example.com/html;         index index.html index.htm index.nginx-debian.html;          server_name example.com www.example.com;          location / {                 try_files $uri $uri/ =404;         } } 

Đó 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 server block thứ hai

Bây giờ ta đã có cấu hình server block 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:

  • sudo cp /etc/nginx/sites-available/example.com /etc/nginx/sites-available/test.com

Mở file mới với các quyền sudo trong editor :

  • sudo nano /etc/nginx/sites-available/test.com

, hãy đảm bảo bạn không sử dụng tùy chọn default_server cho chỉ thị listen trong file này nếu bạn đã sử dụng nó ở nơi khác. Điều chỉnh root chỉ để trỏ đến folder tài liệu root domain thứ hai của bạn và điều chỉnh các server_name để phù hợp với domain trang web thứ hai của bạn (hãy chắc chắn để bao gồm bất kỳ alias ).

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

/etc/nginx/sites-available/test.com
server {         listen 80;         listen [::]:80;          root /var/www/test.com/html;         index index.html index.htm index.nginx-debian.html;          server_name test.com www.test.com;          location / {                 try_files $uri $uri/ =404;         } } 

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

Bước 4: Bật server block và khởi động lại Nginx

Bây giờ ta đã có các file server block , 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 :

  • sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
  • sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/

Các file này hiện nằm trong folder được kích hoạt. Bây giờ ta có ba server block kích hoạt, mà được cấu hình để đáp ứng dựa trên họ listen chỉ thị và server_name (bạn có thể đọc thêm về cách xử lý Nginx các chỉ thị ở đây ):

  • example.com : Sẽ phản hồi các yêu cầu cho example.comwww.example.com
  • test.com : Sẽ phản hồi các yêu cầu cho test.comwww.test.com
  • default : Sẽ phản hồi bất kỳ yêu cầu nào trên cổng 80 không trùng với hai khối còn lại.

Để lỗi có thể xảy ra khi thêm tên server bổ sung, ta sẽ tiếp tục và điều chỉnh một giá trị duy nhất trong file /etc/nginx/nginx.conf . Mở file ngay bây giờ:

  • sudo nano /etc/nginx/nginx.conf

Trong file , hãy tìm chỉ thị server_names_hash_bucket_size . Xóa ký hiệu # để bỏ comment :

/etc/nginx/nginx.conf
http {     . . .      server_names_hash_bucket_size 64;      . . . } 

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

Tiếp theo, hãy kiểm tra đảm bảo không có lỗi cú pháp nào trong các file Nginx nào của bạn:

  • sudo nginx -t

Nếu không tìm thấy sự cố nào, hãy khởi động lại Nginx để kích hoạt các thay đổi :

  • sudo systemctl restart nginx

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

Bước năm: Sửa đổi file server lưu trữ local của bạn để kiểm tra (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 server block 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 .

 

Ghi chú
Đảm bảo 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 tại đây.

Bạn cần biết đị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à 203.0.113.5 , các dòng tôi sẽ thêm vào file sẽ trông giống như sau:

/ etc / hosts
127.0.0.1   localhost . . .  203.0.113.5 example.com www.example.com 203.0.113.5 test.com www.test.com 

Đ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, đó 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 6: 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 server block 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 :

http://example.com 

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:

http://test.com 

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 server block độ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 cho một trang web công khai, có thể bạn cần mua một domain cho từng trang web . Bạn có thể tìm hiểu cách cài đặt chúng để trỏ đến server tại đây.

Kết luận

Đến đây bạn sẽ có khả năng tạo server block 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 server block 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.


Tags:

Các tin liên quan

Cách cung cấp các ứng dụng Flask với uWSGI và Nginx trên Ubuntu 16.04
2016-05-19
Cách cung cấp các ứng dụng Flask với Gunicorn và Nginx trên Ubuntu 16.04
2016-05-19
Cách thiết lập Django với Postgres, Nginx và Gunicorn trên Ubuntu 16.04
2016-05-18
Cách cung cấp các ứng dụng Django với uWSGI và Nginx trên Ubuntu 16.04
2016-05-16
Cách cài đặt Nginx trên Ubuntu 16.04
2016-04-21
Cách tạo chứng chỉ SSL tự ký cho Nginx trong Ubuntu 16.04
2016-04-21
Cách cài đặt Discourse Behind Nginx trên Ubuntu 14.04
2016-04-19
Cách thiết lập Nginx với Hỗ trợ HTTP / 2 trên Ubuntu 16.04
2016-04-12
Cách thêm module gzip vào Nginx trên CentOS 7
2016-03-15
Cách thêm module gzip vào Nginx trên Ubuntu 14.04
2016-03-09