Nginx(phát âm là"engine x") là phần mềm máy chủ web nguồn mở được thiết kế với tính đồng thời cao, có thể được sử dụng làmmáy chủ HTTP/HTTPS,máy chủ proxy ngược,máy chủ proxy thư,bộ cân bằng tải phần mềm,bộ chấm dứt TLS,máy chủ lưu trữ đệm...
Đây là một phần mềm cực kỳ mô-đun. Ngay cả một số phần mềm có vẻ "tích hợp sẵn", chẳng hạn như GZIP hoặc SSL, thực tế được xây dựng dưới dạng các mô-đun có thể được bật và tắt trong thời gian xây dựng.
Nó có các mô-đuncốt lõi(gốc)vàcác mô-đun của bên thứ ba (bên ngoài)https://www.nginx.com/resources/wiki/modules/index.html?utm_source=diendancongnghe.comdo cộng đồng tạo ra. Hiện tại, có hơn một trăm mô-đun của bên thứ ba mà chúng ta có thể sử dụng.
Được viết bằng ngôn ngữC, đây là một phần mềm rất nhanh và nhẹ.
Cài đặt Nginx từ mã nguồn tương đối "dễ" - tải xuống phiên bản mới nhất của mã nguồn Nginx, cấu hình, xây dựng và cài đặt.
Bạn sẽ cần chọn tải xuống phiên bảnchínhhayổn định, nhưng việc xây dựng chúng hoàn toàn giống nhau.
Trong hướng dẫn này, chúng ta sẽ xây dựng Nginx với tất cả các mô-đun có sẵn trong phiên bản nguồn mở của Nginx và chúng ta sẽ sử dụngphiên bản chínhlà1.15.8tại thời điểm viết bài này. Cập nhật số phiên bản khi có phiên bản mới hơn.
Mô-đun cốt lõi được xây dựng bởi các nhà phát triển Nginx cốt lõi và chúng là một phần của chính phần mềm.
Mô-đun của bên thứ ba được xây dựng bởi cộng đồng và bạn có thể sử dụng chúng để mở rộng chức năng của Nginx. Có rất nhiều module của bên thứ ba hữu ích, nổi tiếng nhất trong số đó là: PageSpeed, ModSecurity, RTMP, Lua, v.v...
Với mô-đun tĩnh, tập hợp các mô-đun tạo nên Nginxbinary được cố định tại thời điểm biên dịch bởi tập lệnh
Để biên dịch mô-đun lõi (chuẩn) thành động, chúng ta thêm
Để biên dịch mô-đun của bên thứ ba thành động, chúng ta sử dụng cú pháp
Các bước ban đầu
Kiểm tra phiên bản Fedora của bạn:
Thiết lập múi giờ:
Cập nhật các gói của hệ điều hành Fedora:
Cài đặt các gói vim, curl, wget và tree:
Tải xuống phiên bản chính thức mới nhất của mã nguồn Nginx và giải nén. Mã nguồn Nginx được phân phối dưới dạng tệp nén (tarball nén), giống như hầu hết các phần mềm Unix và Linux:
Tải xuống mã nguồn của các phụ thuộc Nginx bắt buộc và giải nén chúng:
Cài đặt các phụ thuộc Nginx tùy chọn:
Dọn dẹp tất cả các tệp
Vào thư mục nguồn Nginx:
Để đảm bảo liệt kê các thư mục và tệp tạo nên mã nguồn Nginx với tiện ích
Sao chép trang hướng dẫn sử dụng Nginx vào
Để được trợ giúp, bạn có thể xem danh sách đầy đủ các tùy chọn biên dịch thời gian Nginx được cập nhật bằng cách chạy:
Cấu hình, biên dịch và cài đặt NGINX:
Sau khi xây dựng Nginx, điều hướng đến thư mục home (
Liên kết tượng trưng
In phiên bản Nginx, phiên bản trình biên dịch và cấu hình các tham số tập lệnh:
Tạo nhóm hệ thống và người dùng Nginx:
Kiểm tra cú pháp Nginx và các lỗi tiềm ẩn:
Tạo tệp đơn vị systemd Nginx:
Sao chép/dán nội dung bên dưới vào tệp
LƯU Ý:Vị trí của tệp
Cho phép Nginx khởi động khi khởi động và khởi động Nginx ngay lập tức:
Kiểm tra xem Nginx có tự động khởi tạo sau khi khởi động lại không:
Kiểm tra xem Nginxis có đang chạy không chạy một trong các lệnh sau:
Bạn cũng có thể mở trình duyệt và điều hướng đến tên miền/địa chỉ IP của mình để xem trang Nginx mặc định. Đó là dấu hiệu cho thấy Nginx đang hoạt động.
Theo mặc định, Nginx sẽ tạo các tệp sao lưu
Đặt tô sáng cú pháp của cấu hình Nginx cho trình soạn thảo Vim vào
LƯU Ý: Bằng cách thực hiện bước trên, bạn sẽ có cú pháp tô sáng đẹp mắt khi chỉnh sửa tệp cấu hình Nginx trong trình chỉnh sửa Vim.
Tạo
Thay đổi quyền và quyền sở hữu nhóm của tệp nhật ký Nginx:
Tạo cấu hình xoay vòng nhật ký cho Nginx.
Điền văn bản bên dưới vào tệp, sau đó lưu và thoát:
Xóa tất cả các tệp đã tải xuống khỏi thư mục gốc:
Vậy là xong. Bây giờ, bạn đã cài đặt phiên bản Nginx mới nhất bằng cách xây dựng nó từ mã nguồn. Nó được biên dịch tĩnh so với một số thư viện quan trọng như OpenSSL. Thông thường, phiên bản OpenSSL do hệ thống cung cấp đã lỗi thời. Bằng cách sử dụng phương pháp cài đặt này với phiên bản OpenSSL mới hơn, bạn có thể tận dụng các mã hóa mới như
Đây là một phần mềm cực kỳ mô-đun. Ngay cả một số phần mềm có vẻ "tích hợp sẵn", chẳng hạn như GZIP hoặc SSL, thực tế được xây dựng dưới dạng các mô-đun có thể được bật và tắt trong thời gian xây dựng.
Nó có các mô-đuncốt lõi(gốc)vàcác mô-đun của bên thứ ba (bên ngoài)https://www.nginx.com/resources/wiki/modules/index.html?utm_source=diendancongnghe.comdo cộng đồng tạo ra. Hiện tại, có hơn một trăm mô-đun của bên thứ ba mà chúng ta có thể sử dụng.
Được viết bằng ngôn ngữC, đây là một phần mềm rất nhanh và nhẹ.
Cài đặt Nginx từ mã nguồn tương đối "dễ" - tải xuống phiên bản mới nhất của mã nguồn Nginx, cấu hình, xây dựng và cài đặt.
Bạn sẽ cần chọn tải xuống phiên bảnchínhhayổn định, nhưng việc xây dựng chúng hoàn toàn giống nhau.
Trong hướng dẫn này, chúng ta sẽ xây dựng Nginx với tất cả các mô-đun có sẵn trong phiên bản nguồn mở của Nginx và chúng ta sẽ sử dụngphiên bản chínhlà1.15.8tại thời điểm viết bài này. Cập nhật số phiên bản khi có phiên bản mới hơn.
Phiên bản ổn định so với phiên bản chính
Nginx Open Source có hai phiên bản:- Chính– Bao gồm các tính năng mới nhất và bản sửa lỗi, đồng thời luôn được cập nhật. Nó đáng tin cậy, nhưng có thể bao gồm một số mô-đun thử nghiệm và cũng có thể có một số lỗi mới.
- Ổn định– Không bao gồm tất cả các tính năng mới nhất, nhưng có các bản sửa lỗi quan trọng luôn được đưa ngược trở lại phiên bản chính.
Mô-đun cốt lõi so với mô-đun của bên thứ ba
Nginx có hai loại mô-đun mà bạn có thể sử dụng:mô-đun cốt lõivàmô-đun của bên thứ ba.Mô-đun cốt lõi được xây dựng bởi các nhà phát triển Nginx cốt lõi và chúng là một phần của chính phần mềm.
Mô-đun của bên thứ ba được xây dựng bởi cộng đồng và bạn có thể sử dụng chúng để mở rộng chức năng của Nginx. Có rất nhiều module của bên thứ ba hữu ích, nổi tiếng nhất trong số đó là: PageSpeed, ModSecurity, RTMP, Lua, v.v...
Mô-đun tĩnh so với mô-đun động
Mô-đun tĩnh tồn tại trong Nginx ngay từ phiên bản đầu tiên. Mô-đun động được giới thiệu với Nginx 1.9.11+ vào tháng 2 năm 2016.Với mô-đun tĩnh, tập hợp các mô-đun tạo nên Nginxbinary được cố định tại thời điểm biên dịch bởi tập lệnh
./configure
. Các mô-đun tĩnh sử dụng cú pháp --with-foo_bar_module
hoặc--add-module=PATH
.Để biên dịch mô-đun lõi (chuẩn) thành động, chúng ta thêm
=dynamic
, ví dụ--with-http_image_filter_module=dynamic
.Để biên dịch mô-đun của bên thứ ba thành động, chúng ta sử dụng cú pháp
--add-dynamic-module=/path/to/module
và sau đó chúng ta tải chúng bằng cách sử dụng load_module
chỉ thị trong ngữ cảnh toàn cục của tệp nginx.conf
.Yêu cầu để biên dịch Nginx từ source
So với một số phần mềm UNIX/Linux khác, Nginx khá nhẹ và không có nhiều thư viện phụ thuộc. Cấu hình xây dựng mặc định chỉ phụ thuộc vào 3 thư viện được cài đặt:OpenSSL/LibreSSL/BoringSSL,ZlibvàPCRE.- Yêu cầu bắt buộc:Bộ sưu tập trình biên dịch GNU (GCC)
- Phiên bản thư viện OpenSSLgiữa1.0.2-1.1.1hoặcLibreSSLhoặcBoringSSLthư viện
- Phiên bản thư viện Zlibgiữa1.1.3-1.2.11
- Phiên bản thư viện PCREgiữa4.4-8.42
Yêu cầu
- Máy chủ chạy hệ thống Fedora 29.
- Người dùng không phải root có quyền sudo.
Các bước ban đầu
Kiểm tra phiên bản Fedora của bạn:
Mã:
cat /etc/fedora-release
# Fedora phát hành 29 (Hai mươi chín)
Mã:
timedatectl list-timezones
sudo timedatectl set-timezone 'Region/City'
Mã:
sudo dnf upgrade-y
Mã:
sudo dnf install -y vim curl wget tree
Xây dựng Nginx từ nguồn
Nginx là một chương trình được viết bằngC, vì vậy trước tiên bạn sẽ cần cài đặt trình biên dịch công cụ:
Mã:
sudo dnf groupinstall -y 'Công cụ phát triển'
Mã:
wget https://nginx.org/download/nginx-1.15.8.tar.gz && tar zxvf nginx-1.15.8.tar.gz
Mã:
# Phiên bản PCRE 8.42
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz && tar xzvf pcre-8.42.tar.gz
# phiên bản zlib 1.2.11
wget https://www.zlib.net/zlib-1.2.11.tar.gz && tar xzvf zlib-1.2.11.tar.gz
# phiên bản OpenSSL 1.1.1a
wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz && tar xzvf openssl-1.1.1a.tar.gz
Mã:
sudo dnf install -y perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel GeoIP GeoIP-devel
.tar.gz
vì chúng không còn cần thiết nữa:
Mã:
rm -rf *.tar.gz
Mã:
cd ~/nginx-1.15.8
tree
:
Mã:
tree -L 2 .
/usr/share/man/man8/
thư mục:
Mã:
sudo cp ~/nginx-1.15.8/man/nginx.8 /usr/share/man/man8
sudo gzip /usr/share/man/man8/nginx.8
ls /usr/share/man/man8/ | grep nginx.8.gz
# Kiểm tra xem trang Man cho Nginx có hoạt động không:
man nginx
Để được trợ giúp, bạn có thể xem danh sách đầy đủ các tùy chọn biên dịch thời gian Nginx được cập nhật bằng cách chạy:
Mã:
./configure --help
# Để xem các module lõi muốn xây dựng có thể chạy động:
./configure --help | grep -F =dynamic
Mã:
./configure --prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib64/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--user=nginx \
--group=nginx \
--build=Fedora \
--builddir=nginx-1.15.8 \
--with-select_module \
--with-poll_module \
--with-threads \
--with-file-aio \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_xslt_module=dynamic \
--with-http_image_filter_module=dynamic \
--with-http_geoip_module=dynamic \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_auth_request_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_slice_module \
--with-http_stub_status_module \
--with-http_perl_module=dynamic \
--with-perl_modules_path=/usr/lib64/perl5 \
--with-perl=/usr/bin/perl \
--http-log-path=/var/log/nginx/access.log \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--with-mail=động \
--with-mail_ssl_module \
--with-stream=động \
--with-stream_ssl_module \
--with-stream_realip_module \
--with-stream_geoip_module=động \
--with-stream_ssl_preread_module \
--with-compat \
--with-pcre=../pcre-8.42 \
--with-pcre-jit \
--with-zlib=../zlib-1.2.11 \
--with-openssl=../openssl-1.1.1a \
--with-openssl-opt=no-nextprotoneg \
--with-debug
make
sudo make install
~
):
Mã:
cd ~
/usr/lib64/nginx/modules
đến/etc/nginx/modules
thư mục.etc/nginx/modules
là một vị trí chuẩn cho các mô-đun Nginx:
Mã:
sudo ln -s /usr/lib64/nginx/modules /etc/nginx/modules
Mã:
sudo nginx -V
# phiên bản nginx: nginx/1.15.8 (Fedora)
# được xây dựng bởi gcc 8.2.1 20150623 (Red Hat 8.2.1-6) (GCC)
# được xây dựng với OpenSSL1.1.1a 20 tháng 11 năm 2018
# Hỗ trợ TLS SNI được bật
# cấu hình đối số: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules
# . . .
# . . .
Mã:
sudo useradd --system --home /var/cache/nginx --shell /sbin/nologin --comment "nginx user" --user-group nginx
Mã:
sudo nginx -t
# Sẽ báo lỗi này -> nginx: [emerg] mkdir() "/var/cache/nginx/client_temp" không thành công (2: Không có tệp hoặc thư mục nào như vậy)
# Tạo thư mục bộ đệm NGINX và thiết lập quyền thích hợp
sudo mkdir -p /var/cache/nginx/client_temp /var/cache/nginx/fastcgi_temp /var/cache/nginx/proxy_temp /var/cache/nginx/scgi_temp /var/cache/nginx/uwsgi_temp
sudo chmod 700 /var/cache/nginx/*
sudo chown nginx:root /var/cache/nginx/*
# Kiểm tra lại cú pháp và tiềm năng lỗi.
sudo nginx -t
Mã:
sudo vim /etc/systemd/system/nginx.service
/etc/systemd/system/nginx.service
:LƯU Ý:Vị trí của tệp
PID
và Nginxbinary có thể khác nhau tùy thuộc vào cách biên dịch Nginx.
Mã:
[Unit]Mô tả=nginx - máy chủ web hiệu suất caoTài liệu=https://nginx.org/en/docs/Sau=network-online.target remote-fs.target nss-lookup.targetMuốn=network-online.target[Dịch vụ]Loại=forkingPIDFile=/var/run/nginx.pidExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.confExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.confExecReload=/bin/kill -s HUP $MAINPIDExecStop=/bin/kill -s TERM $MAINPID[Cài đặt]WantedBy=multi-user.target
Mã:
sudo systemctl enable nginx.service
sudo systemctl start nginx.service
Mã:
sudo systemctl is-enabled nginx.service
# enabled
Mã:
sudo systemctl status nginx.service
# hoặc
ps aux | grep nginx
#hoặc
curl -I 127.0.0.1
Theo mặc định, Nginx sẽ tạo các tệp sao lưu
.default
trong/etc/nginx
. Xóa các tệp .default
khỏi thư mục /etc/nginx
:
Mã:
sudo rm /etc/nginx/*.default
~/.vim
:
Mã:
# Đối với người dùng không phải root thông thườngmkdir ~/.vim/cp -r ~/nginx-1.15.8/contrib/vim/* ~/.vim/# Đối với người dùng rootsudo mkdir /root/.vim/sudo cp -r ~/nginx-1.15.8/contrib/vim/* /root/.vim/
Tạo
conf.d
,snippets
,sites-available
vàsites-enabled
thư mục trong/etc/nginx
thư mục:
Mã:
sudo mkdir /etc/nginx/{conf.d,snippets,sites-available,sites-enabled}
Mã:
sudo chmod 640 /var/log/nginx/*
sudo chown nginx:adm /var/log/nginx/access.log /var/log/nginx/error.log
Mã:
sudo vim /etc/logrotate.d/nginx
Mã:
/var/log/nginx/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 640 nginx adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
Mã:
cd ~
rm -rf nginx-1.15.8/ openssl-1.1.1a/ pcre-8.42/ zlib-1.2.11/
CHACHA20_POLY1305
và các giao thức nhưTLS 1.3được hỗ trợ trong OpenSSL1.1.1.
Ngoài ra, bằng cách biên dịch nhị phân của riêng bạn, bạn có thể tùy chỉnh chức năng mà Nginx của bạn sẽ cung cấp, linh hoạt hơn nhiều so với việc cài đặt nhị phân được dựng sẵn.