Cách cài đặt Nginx trên FreeBSD 11.2
Nginx là một trong những web server phổ biến nhất trên thế giới, được biết đến với việc sử dụng thường xuyên như một bộ cân bằng tải và Reverse Proxy . Nó thân thiện với tài nguyên hơn Apache và nhiều trang web lớn nhất và được buôn bán cao nhất trên internet phụ thuộc vào Nginx để phân phát nội dung của họ.Trong hướng dẫn này, ta sẽ trình bày cách cài đặt Nginx trên server FreeBSD 11.2.
Yêu cầu
Trước khi bắt đầu hướng dẫn này, bạn cần truy cập vào một server chạy FreeBSD. Hướng dẫn này được viết riêng cho server chạy FreeBSD 11.2, mặc dù nó cũng sẽ hoạt động trên các version cũ hơn, được hỗ trợ của hệ điều hành.
Nếu bạn mới làm việc với FreeBSD, bạn có thể thấy hữu ích khi tùy chỉnh server này theo các hướng dẫn sau .
Ngoài ra, nếu bạn định cài đặt một domain cho server này, bạn cần những thứ sau:
- Tên domain đã đăng ký mà bạn sở hữu và kiểm soát. Nếu bạn chưa có domain đã đăng ký, bạn có thể đăng ký một domain với một trong nhiều công ty đăng ký domain hiện có (ví dụ: Namecheap, GoDaddy, v.v.).
- Bản ghi DNS A trỏ domain của bạn đến địa chỉ IP công cộng của server của bạn. Bạn có thể làm theo hướng dẫn tên server này để biết chi tiết về cách thêm chúng.
Bước 1 - Cài đặt Nginx
Để bắt đầu, ta sẽ cài đặt Nginx bằng pkg
, công cụ quản lý gói binary tích hợp sẵn của FreeBSD. Lệnh sau sẽ cập nhật bản sao local của các gói có sẵn và sau đó cài đặt gói nginx
:
- sudo pkg install nginx
Nếu đây là lần đầu tiên bạn chạy pkg
, nó sẽ nhắc bạn xác nhận bạn cho phép nó tự khởi động. Để thực hiện việc này, hãy nhấn y
và sau đó ENTER
. Sau đó, khi được yêu cầu , hãy xác nhận bạn chấp thuận cài đặt gói nginx
bằng cách nhấn y
rồi ENTER
.
Nếu bạn đang sử dụng csh
hoặc tcsh
shell, hãy đảm bảo chạy lệnh rehash
. Điều này làm cho shell nhận biết các ứng dụng mới bạn đã cài đặt:
- rehash
Lưu ý: Nếu bạn không chắc mình hiện đang sử dụng shell nào, bạn có thể kiểm tra bằng lệnh sau:
- echo $SHELL
Đầu ra sẽ hiển thị đường dẫn file của chương trình shell hiện đang được sử dụng:
Output/bin/tcsh
Nginx hiện đã được cài đặt trên server của bạn, nhưng nó vẫn chưa chạy. Trong bước tiếp theo, ta sẽ cho phép Nginx bắt đầu chạy mỗi khi server khởi động và khởi động nó cho phiên này, cũng như hướng dẫn quy trình bảo mật server bằng cách cài đặt firewall với IPFW.
Bước 2 - Bật dịch vụ Nginx và cài đặt firewall với IPFW
Để FreeBSD khởi động Nginx như một dịch vụ thông thường, bạn phải nói với FreeBSD rằng bạn muốn bật nó. Điều này sẽ cho phép bạn quản lý nó giống như bất kỳ dịch vụ nào khác, thay vì như một ứng dụng độc lập và cũng sẽ cấu hình FreeBSD để khởi động nó tự động khi khởi động.
Để thực hiện việc này, trước tiên bạn cần biết tham số rc
chính xác để đặt cho dịch vụ nginx
. rc
là một tiện ích FreeBSD kiểm soát quá trình khởi động tự động của hệ thống. Tập lệnh cho mọi dịch vụ có sẵn trên hệ thống được đặt trong folder /usr/local/etc/rc.d
. Chúng xác định các tham số được sử dụng để kích hoạt từng dịch vụ bằng cách sử dụng biến rcvar
. Ta có thể xem rcvar
của mỗi dịch vụ được đặt thành gì bằng lệnh :
- grep rcvar /usr/local/etc/rc.d/*
Sau khi đã được cài đặt, lệnh này sẽ xuất ra một danh sách tương tự như sau:
Output/usr/local/etc/rc.d/cloudconfig:rcvar="cloudinit_enable" /usr/local/etc/rc.d/cloudfinal:rcvar="cloudinit_enable" /usr/local/etc/rc.d/cloudinit:rcvar="cloudinit_enable" /usr/local/etc/rc.d/cloudinitlocal:rcvar="cloudinit_enable" /usr/local/etc/rc.d/nginx:rcvar=nginx_enable /usr/local/etc/rc.d/rsyncd:rcvar=rsyncd_enable
Tham số bạn cần đặt cho dịch vụ nginx
được đánh dấu ở đây trong kết quả này. Bản thân tên của script - thành phần cuối cùng của đường dẫn trước dấu hai chấm - cũng rất hữu ích khi biết, vì đó là tên mà FreeBSD sử dụng để chỉ dịch vụ.
Để bật dịch vụ nginx
bạn phải thêm rcvar
của nó vào file rc.conf
, file này chứa thông tin cấu hình hệ thống global được tham chiếu bởi các tập lệnh khởi động. Sử dụng trình soạn thảo bạn muốn để mở file /etc/rc.conf
với các quyền sudo
. Ở đây, ta sẽ sử dụng ee
:
- sudo ee /etc/rc.conf
Ở đầu file , sẽ có một vài thông số rcvar
đã được đặt sẵn. Thêm nginx_enable
rcvar
thông số bên dưới những điều này và đặt nó vào "YES"
:
. . . sshd_enable="YES" nginx_enable="YES" . . .
Trong khi vẫn ở trong file rc.conf
, ta sẽ thêm một vài lệnh nữa để kích hoạt và cấu hình firewall IPFW. IPFW là một firewall trạng thái được viết cho FreeBSD. Nó cung cấp một cú pháp mạnh mẽ cho phép bạn tùy chỉnh các luật bảo mật cho hầu hết các trường hợp sử dụng.
Ngay bên dưới tham số nginx_enable
bạn vừa thêm, thêm các dòng được đánh dấu sau:
. . . nginx_enable="YES" firewall_enable="YES" firewall_type="workstation" firewall_myservices="22/tcp 80/tcp" firewall_allowservices="any"
Đây là những gì mỗi lệnh này và cài đặt của chúng thực hiện:
-
firewall_enable="YES"
- Đặt chỉ thị này thành"YES"
cho phép firewall khởi động khi nào server khởi động. -
firewall_type="workstation"
- FreeBSD cung cấp một số loại firewall mặc định, mỗi loại có cấu hình hơi khác nhau. Bằng cách khai báo kiểuworkstation
, firewall sẽ chỉ bảo vệ server này bằng các luật trạng thái. -
firewall_myservices="22/tcp 80/tcp"
- Chỉ thịfirewall_myservices
là nơi bạn có thể liệt kê các cổng TCP bạn muốn cho phép thông qua firewall . Trong ví dụ này, ta chỉ định cổng22
và80
để cho phép truy cập SSH và HTTP vào server tương ứng. -
firewall_allowservices="any"
- Điều này cho phép một máy từ bất kỳ địa chỉ IP nào giao tiếp qua các cổng được chỉ định trong chỉ thịfirewall_myservices
.
Sau khi thêm những dòng này, hãy lưu file và đóng editor bằng cách nhấn CTRL + C
, nhập exit
, rồi nhấn ENTER
.
Sau đó, khởi động dịch vụ firewall ipfw
. Vì đây là lần đầu tiên bạn khởi động firewall trên server này nên có khả năng làm như vậy sẽ khiến server của bạn bị đình trệ, khiến nó không thể truy cập được qua SSH. Lệnh nohup
sau - viết tắt của "no Hangups" - sẽ khởi động firewall trong khi ngăn chặn sự cố và cũng chuyển hướng kết quả chuẩn và lỗi đến file log tạm thời:
- sudo nohup service ipfw start >/tmp/ipfw.log 2>&1
Tuy nhiên, nếu bạn đang sử dụng shell csh
hoặc tcsh
, chuyển hướng này sẽ gây Ambiguous output redirect.
để xuất hiện trong kết quả của bạn. Nếu bạn đang sử dụng một trong hai shell này, hãy chạy phần sau để bắt đầu ipfw
:
- sudo nohup service ipfw start >&/tmp/ipfw.log
Lưu ý : Trong tương lai, bạn có thể quản lý firewall ipfw
như với bất kỳ dịch vụ nào khác. Ví dụ: để dừng, bắt đầu và sau đó khởi động lại dịch vụ, bạn sẽ chạy các lệnh sau:
- sudo service ipfw stop
- sudo service ipfw start
- sudo service ipfw restart
Tiếp theo, khởi động dịch vụ nginx
- sudo service nginx start
Sau đó, để kiểm tra xem Nginx có thể phân phát nội dung chính xác hay không, hãy nhập địa chỉ IP công khai của server vào thanh URL của trình duyệt web bạn muốn :
http://your_server_ip
Lưu ý: Nếu bạn không chắc chắn về địa chỉ IP công cộng của server , bạn có thể chạy lệnh sau, lệnh này sẽ in địa chỉ IP của server của bạn, như được hiển thị từ một vị trí khác trên internet:
- curl -4 icanhazip.com
Nếu mọi thứ hoạt động bình thường, bạn sẽ thấy trang đích Nginx mặc định:
Điều này cho thấy rằng Nginx đã được cài đặt và chạy chính xác và nó được phép thông qua firewall như mong đợi. Tuy nhiên, vẫn có một số thay đổi cấu hình cần được thực hiện để nó hoạt động với các cài đặt không mặc định hoặc phân phát nội dung bằng domain .
Bước 3 - Cài đặt khối server
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 domain từ một server duy nhất. Ta sẽ cài đặt một domain có tên là example.com , nhưng bạn nên thay thế domain này bằng domain của bạn . Để tìm hiểu thêm về cách cài đặt domain với DigitalOcean, hãy xem Giới thiệu về DNS DigitalOcean của ta .
Nginx trên FreeBSD 11.2 có một khối server được bật theo mặc định được cấu hình để cung cấp tài liệu ra khỏi folder tại /usr/local/www/nginx
. Mặc dù điều này hoạt động tốt cho một trang web, nhưng nó có thể trở nên khó sử dụng nếu bạn đang lưu trữ nhiều trang web. Thay vì sửa đổi /usr/local/www/nginx
, hãy tạo cấu trúc folder bên trong /usr/local/www
cho trang example.com của ta .
Tạo folder cho example.com như sau, sử dụng cờ -p
để tạo bất kỳ folder mẹ nào cần thiết:
- sudo mkdir -p /usr/local/www/example.com/html
Tiếp theo, gán quyền sở hữu folder cho user www , profile user thời gian chạy Nginx mặc định:
- sudo chown -R www:www /usr/local/www/example.com
Quyền của root web của bạn phải chính xác nếu bạn chưa sửa đổi giá trị umask
, nhưng bạn có thể đảm bảo bằng lệnh :
- sudo chmod -R 755 /usr/local/www/example.com
Tiếp theo, tạo một trang index.html
mẫu bằng cách sử dụng ee
:
- sudo ee /usr/local/www/example.com/html/index.html
Bên trong, hãy thêm HTML mẫu sau:
<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.
Để Nginx phân phát nội dung này, bạn cần tạo một khối server với các lệnh chính xác. Mở file cấu hình Nginx chính. Theo mặc định, điều này được giữ trong folder /usr/local/etc/nginx/
:
- sudo ee /usr/local/etc/nginx/nginx.conf
Lưu ý : Nói chung, bạn muốn tránh chỉnh sửa file nginx.conf
mặc định. Tuy nhiên, trong cùng folder này, có một file được gọi là nginx.conf-dist
, giống với file nginx.conf
mặc định. Nếu bạn nhận thấy rằng bạn cần phải hoàn nguyên với những thay đổi cấu hình này, bạn chỉ có thể sao chép file này bằng lệnh sau:
- sudo cp /usr/local/etc/nginx/nginx.conf-dist /usr/local/etc/nginx/nginx.conf
Khi bạn mở file lần đầu tiên, bạn sẽ thấy phần sau ở trên cùng:
#user nobody; worker_processes 1; . . .
Bỏ ghi chú chỉ thị user
bằng cách bỏ dấu thăng ( #
) và sau đó thay đổi user từ không có ai thành www . Sau đó, cập nhật chỉ thị worker_processes
cho phép bạn chọn số lượng quy trình worker mà Nginx sẽ sử dụng. Giá trị tối ưu để nhập ở đây không phải lúc nào cũng rõ ràng hoặc dễ tìm. Đặt nó thành auto
cho biết Nginx đặt nó thành một công nhân trên mỗi lõi CPU, điều này sẽ đủ trong hầu hết các trường hợp:
user www; worker_processes auto; . . .
Sau đó cuộn xuống khối server
. Với tất cả các comment đã bị xóa, nó sẽ trông như thế này:
. . . server { listen 80; server_name localhost; location / { root /usr/local/www/nginx; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/local/www/nginx-dist; } }
Xóa toàn bộ khối server này, bao gồm tất cả các dòng đã comment và thay thế nó bằng nội dung sau:
. . . server { access_log /var/log/nginx/example.com.access.log; error_log /var/log/nginx/example.com.error.log; listen 80; server_name example.com www.example.com; location / { root /usr/local/www/example.com/html; index index.html index.htm; } } . . .
Đây là những gì các lệnh trong khối server này thực hiện:
-
access_log
: Chỉ thị này xác định vị trí của các bản ghi truy cập của server . -
error_log
: Điều này xác định file mà Nginx sẽ ghi log lỗi của nó. -
listen
: Chỉ thịlisten
khai báo cổng nào mà Nginx sẽ lắng nghe. Trong trường hợp này, ta đặt nó thành cổng80
để nó có thể lắng nghe truy cập HTTP . -
server_name
: Tại đây, trỏ Nginx đến domain của bạn và bất kỳ alias nào bạn có cho nó. Nếu bạn không có domain , hãy trỏ Nginx đến địa chỉ IP công cộng của server của bạn. -
root
: Điều này xác định root tài liệu trang web, mà bạn đã tạo trước đó trong bước này. -
index
: Chỉ thị này xác định các file sẽ được sử dụng làm index và chúng sẽ được kiểm tra theo thứ tự nào.
Tất cả cùng với nhau, với các comment bị xóa, file sẽ trông giống như sau:
user www; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { access_log /var/log/nginx/example.com.access.log; error_log /var/log/nginx/example.com.error.log; listen 80; server_name example.com www.example.com; location / { root /usr/local/www/example.com; index index.html index.htm; } } }
Lưu file khi bạn hoàn tất. Sau đó, kiểm tra file cấu hình của bạn để tìm lỗi cú pháp bằng lệnh :
- sudo nginx -t
Nếu file cấu hình của bạn không có lỗi cú pháp có thể phát hiện được, bạn sẽ thấy kết quả sau:
Outputnginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
Nếu lệnh trên trả về có lỗi, hãy mở lại file cấu hình Nginx đến vị trí tìm thấy lỗi và cố gắng khắc phục sự cố.
Khi cấu hình của bạn kiểm tra chính xác, hãy tiếp tục và reload dịch vụ nginx
để kích hoạt các thay đổi :
- sudo service nginx reload
Nginx bây giờ sẽ cung cấp nội dung bạn cài đặt trong index.html
. Kiểm tra điều này bằng cách chuyển đến http:// example.com
, nơi bạn sẽ thấy thông tin như sau:
Bước cuối cùng, ta sẽ xem xét một số lệnh cho phép bạn quản lý dịch vụ Nginx.
Bước 4 - Quản lý Tiến trình Nginx
Đến đây bạn đã cài đặt và chạy web server của bạn , hãy xem lại một số lệnh quản lý cơ bản.
Để dừng web server của bạn, hãy nhập:
- sudo service nginx stop
Để khởi động web server khi nó bị dừng, hãy nhập:
- sudo service nginx start
Để dừng và sau đó bắt đầu lại dịch vụ, hãy nhập:
- sudo service nginx restart
Nếu bạn chỉ đơn giản là thực hiện thay đổi cấu hình, bạn có thể reload Nginx mà không làm mất bất kỳ kết nối nào. Để làm điều này, hãy nhập:
- sudo service nginx reload
Cuối cùng, hãy nhớ lại cách ở Bước 2, ta đã kích hoạt dịch vụ nginx
bằng cách thêm chỉ thị nginx_enable="YES"
vào file rc.conf
. Nếu bạn muốn tắt dịch vụ nginx
để ngăn nó khởi động khi server khởi động, bạn cần phải mở lại file đó và xóa dòng đó.
Kết luận
Đến đây bạn đã cài đặt web server Nginx đầy đủ chức năng trên máy của bạn . Từ đây, bạn có thể mã hóa lưu lượng truy cập web của server bằng cách bật HTTPS. Để tìm hiểu cách thực hiện việc này, hãy tham khảo Cách bảo mật Nginx bằng Let's Encrypt trên FreeBSD . Bạn cũng có thể cài đặt và cấu hình MySQL và PHP , cùng với Nginx, sẽ cung cấp cho bạn một ngăn xếp FEMP hoàn chỉnh.
Các tin liên quan
Cách bảo mật Nginx bằng NAXSI trên Ubuntu 16.042018-11-09
Cách tạo chứng chỉ SSL tự ký cho Nginx trên Debian 9
2018-09-07
Cách thiết lập Django với Postgres, Nginx và Gunicorn trên Debian 9
2018-09-06
Cách bảo mật Nginx bằng Let's Encrypt trên Debian 9
2018-09-05
Cách cài đặt Nginx trên Debian 9
2018-09-04
Cách cài đặt Nginx trên Ubuntu 18.04 [Quickstart]
2018-07-23
Cách cung cấp các ứng dụng Flask với Gunicorn và Nginx trên Ubuntu 18.04
2018-07-13
Cách di chuyển web root Nginx đến vị trí mới trên Ubuntu 18.04
2018-07-12
Cách cấu hình Jenkins với SSL bằng Nginx Reverse Proxy trên Ubuntu 18.04
2018-07-10
Cách thiết lập Django với Postgres, Nginx và Gunicorn trên Ubuntu 18.04
2018-07-09