Nginx(phát âm là"engine x") là phần mềm máy chủ web nguồn mở được thiết kế hướng đến 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à 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ụngchínhphiên bản1.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 mô-đun 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 thành nhị phân Nginx được cố định tại thời điểm biên dịch bằng 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ài đặt
Thiết lập múi giờ:
Cập nhật hệ điều hành của bạn Các gói của hệ thống:
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:
Để đo lường tốt, hãy 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 thời gian biên dịch 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
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 Nginx có đang chạy không bằng cách 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.
Tạo tường lửa đơn giản (UFW) Hồ sơ ứng dụng Nginx:
Sao chép/dán nội dung bên dưới vào
Xác minh rằng các cấu hình ứng dụng UFW đã được tạo và nhận dạng:
Theo mặc định, nginx 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 logrotation 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 theo 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à 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ụngchínhphiên bản1.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 mô-đun 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 thành nhị phân Nginx được cố định tại thời điểm biên dịch bằng 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 Debian 9 (stretch).
- 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 Debian:
Mã:
lsb_release -ds
# Debian GNU/Linux 9.6 (stretch)
wget
,curl
vàsudo
các gói.
Mã:
apt install -y wget curl sudo
Mã:
sudo dpkg-reconfigure tzdata
Mã:
apt update&&apt upgrade -y
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 một công cụ biên dịch. Cài đặt góibuild-essential
và các gói cần thiết khác:
Mã:
sudo apt install -y build-essential git tree software-properties-common dirmngr apt-transport-https ufw
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 apt install -y perl libperl-dev libgd3 libgd-dev libgeoip1 libgeoip-dev geoip-bin libxml2 libxml2-dev libxslt1.1 libxslt1-dev
.tar.gz
. Chúng ta không cần chúng 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 thời gian biên dịch Nginx được cập nhật bằng cách chạy:
Mã:
./configure --help
# Để xem các mô-đun cốt lõi muốn có có thể được xây dựng như chạy động:
./configure --help | grep -F =dynamic
Mã:
./configure --prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib/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=Debian \
--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/share/perl/5.24.1 \
--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/lib/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/lib/nginx/modules /etc/nginx/modules
Mã:
sudo nginx -V
# phiên bản nginx: nginx/1.15.8 (Debian)
# được xây dựng bởi gcc 6.3.0 (Debian 6.3.0-18+deb9u1)
# được xây dựng với OpenSSL1.1.1a ngày 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/lib/nginx/modules
# . . .
# . . .
Mã:
sudo adduser --system --home /nonexistent --shell /bin/false --no-create-home --disabled-login --disabled-password --gecos "nginx 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 các thư mục bộ đệm nginx và thiết lập các 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
:
Mã:
[Đơn vị]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
Tạo tường lửa đơn giản (UFW) Hồ sơ ứng dụng Nginx:
Mã:
sudo vim /etc/ufw/applications.d/nginx
/etc/ufw/applications.d/nginx
tệp:
Mã:
[nginx HTTP]title=Máy chủ web (nginx, HTTP)description=Máy chủ web nhỏ nhưng rất mạnh mẽ và hiệu quảcổng=80/tcp[nginx HTTPS]title=Máy chủ web (nginx, HTTPS)description=Máy chủ web nhỏ nhưng rất mạnh mẽ và hiệu quảcổng=443/tcp[nginx Full]title=Máy chủ web (nginx, HTTP + HTTPS)description=Máy chủ web nhỏ nhưng rất mạnh mẽ và hiệu quảcổng=80.443/tcp
Mã:
sudo ufw app list
# Có sẵn ứng dụng:
# nginx Full
# nginx HTTP
# nginx HTTPS
.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.3có sẵn 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.