Hướng dẫn cài đặt Nginx trên server Debian 9

0

Nginx  (phát âm là “engine x” ) là một phần mềm máy chủ web mã nguồn mở được thiết kế với đồng thời cao trong tâm trí, có thể được sử dụng như HTTP / HTTPS máy chủ , đảo ngược proxy server , mail server Proxy , cân bằng tải phần mềm , TLS terminator , máy chủ bộ nhớ đệm …

Nó là một phần cực kỳ mô-đun của phần mềm. Ngay cả một số phần mềm dường như “tích hợp”, chẳng hạn như GZIP hoặc SSL, thực sự đượ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ô-đun lõi ( nguyên gốc ) và mô-đun của bên thứ ba (bên ngoài) được tạo bởi cộng đồng. Ngay bây giờ, có hơn một trăm mô-đun của bên thứ ba mà chúng tôi 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ễ dàng” – tải xuống phiên bản mới nhất của mã nguồn Nginx, định cấu hình, xây dựng và cài đặt nó.

Bạn sẽ cần chọn tải xuống phiên bản chính hay phiên bản ổ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 tôi 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 tôi sẽ sử dụng phiên bản chính tuyến  ở mức 1.15.8 tạ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.

Ổn định so với phiên bản chính

Nginx Open Source có sẵn trong hai phiên bản:

  • Mainline  – Bao gồm các tính năng mới nhất và sửa lỗi và luôn cập nhật. Nó đáng tin cậy, nhưng nó có thể bao gồm một số mô-đun thử nghiệm và nó 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 sửa lỗi nghiêm trọng luôn được đưa vào phiên bản chính.

Mô-đun 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 lõi và mô-đun của bên thứ ba .

Các mô-đun 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.

Các 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 Nginx. Có rất nhiều mô-đun 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

Các mô-đun tĩnh tồn tại trong Nginx từ phiên bản đầu tiên. Các mô-đun động đã được giới thiệu với Nginx 1.9.11+ vào tháng 2 năm 2016.

Với các mô-đun tĩnh, tập hợp các mô-đun cấu thành nhị phân Nginx được cố định tại thời điểm biên dịch bởi tập lệnh. Mô-đun tĩnh sử dụng hoặc cú pháp. ./configure  –with-foo_bar_module  –add-module=PATH

Ví dụ, để biên dịch mô-đun lõi (tiêu chuẩn) thành động, chúng tôi thêm vào . =dynamic –with-http_image_filter_module=dynamic

Để biên dịch mô-đun của bên thứ ba thành động, chúng tôi sử dụng cú pháp và sau đó chúng tôi tải chúng bằng cách sử dụng chỉ thị trong ngữ cảnh toàn cầu của tệp. –add-dynamic-module=/path/to/module  load_module  nginx.conf

Yêu cầu xây dựng Nginx từ nguồn

So với một số phần mềm UNIX / Linux khác, Nginx khá nhẹ và không có nhiều phụ thuộc thư viện. 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 , Zlib và PCRE .

  • Những yêu cầu bắt buộc:
    • GNU Compiler Collection (GCC)
    • OpenSSL library version từ 1.0.2 – 1.1.1 hoặc LibreSSL library hoặc BoringSSL library
    • Zlib library version between 1.1.3 – 1.2.11
    • PCRE library version between 4.4 – 8.42
  • Yêu cầu tùy chọn:
    • Perl
    • LibGD
    • MaxMind GeoIP Legacy C Library
    • libxml2
    • libxslt

LƯU Ý : Nginx cũng có thể được biên dịch dựa  trên các thư viện tiền điện tử LibreSSL  và  BoringSSL  thay vì  OpenSSL .

Yêu cầu

  • Một máy chủ chạy Debian 9 (kéo dài).
  • Một người dùng không root với đặc quyền sudo.

Các bước ban đầu

Kiểm tra phiên bản Debian:

lsb_release -ds 
# Debian GNU/Linux 9.6 (stretch)

Cài đặt  wget,  curl và  sudo các gói.

apt install -y wget curl sudo

Thiết lập múi giờ:

sudo dpkg-reconfigure tzdata

Cập nhật các gói hệ điều hành của bạn:

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ằng  C , 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 build-essential gói và các gói cần thiết khác :

sudo apt install -y build-essential git tree software-properties-common dirmngr apt-transport-https ufw

Tải xuống phiên bản chính tuyến mới nhất của mã nguồn Nginx và giải nén nó. Mã nguồn Nginx được phân phối dưới dạng lưu trữ nén (tarball được nén), như hầu hết các phần mềm Unix và Linux:

wget https://nginx.org/download/nginx-1.15.8.tar.gz && tar zxvf nginx-1.15.8.tar.gz
# PCRE version 8.42
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz && tar xzvf pcre-8.42.tar.gz

# zlib version 1.2.11
wget https://www.zlib.net/zlib-1.2.11.tar.gz && tar xzvf zlib-1.2.11.tar.gz

# OpenSSL version 1.1.1a
wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz && tar xzvf openssl-1.1.1a.tar.gz

Cài đặt phụ thuộc Nginx tùy chọn:

sudo apt install -y perl libperl-dev libgd3 libgd-dev libgeoip1 libgeoip-dev geoip-bin libxml2 libxml2-dev libxslt1.1 libxslt1-dev

Dọn dẹp tất cả  .tar.gz các tập tin. Chúng tôi không cần chúng nữa:

rm -rf *.tar.gz

Nhập thư mục nguồn Nginx:

cd ~/nginx-1.15.8

Đối với các thư mục danh sách đo lường tốt và các tệp soạn mã nguồn Nginx với  tree tiện ích:

tree -L 2 .

Sao chép trang hướng dẫn Nginx vào  /usr/share/man/man8/ thư mục:

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
# Check that Man page for nginx is working:
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ập nhật bằng cách chạy:

./configure --help
# To see want core modules can be build as dynamic run:
./configure --help | grep -F =dynamic

Định cấu hình, biên dịch và cài đặt Nginx:

./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=dynamic \
            --with-mail_ssl_module \
            --with-stream=dynamic \
            --with-stream_ssl_module \
            --with-stream_realip_module \
            --with-stream_geoip_module=dynamic \
            --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

Sau khi xây dựng Nginx, điều hướng đến thư mục home ( ~):

cd ~

Symlink  /usr/lib/nginx/modules đến  /etc/nginx/modules thư mục.  etc/nginx/modules là nơi tiêu chuẩn cho các mô-đun Nginx:

sudo ln -s /usr/lib/nginx/modules /etc/nginx/modules

In phiên bản Nginx, phiên bản trình biên dịch và định cấu hình các tham số tập lệnh:

sudo nginx -V
# nginx version: nginx/1.15.8 (Debian)
# built by gcc 6.3.0 (Debian 6.3.0-18+deb9u1)
# built with OpenSSL 1.1.1a  20 Nov 2018
# TLS SNI support enabled
# configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules
# . . .
# . . .

Tạo nhóm hệ thống và người dùng Nginx:

sudo adduser --system --home /nonexistent --shell /bin/false --no-create-home --disabled-login --disabled-password --gecos "nginx user" --group nginx

Kiểm tra cú pháp Nginx và các lỗi tiềm ẩn:

sudo nginx -t
# Will throw this error -> nginx: [emerg] mkdir() "/var/cache/nginx/client_temp" failed (2: No such file or directory)

# Create nginx cache directories and set proper permissions
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/*

# Re-check syntax and potential errors.
sudo nginx -t

Tạo tập tin đơn vị hệ thống Nginx:

sudo vim /etc/systemd/system/nginx.service

Sao chép / dán nội dung dưới đây vào  /etc/systemd/system/nginx.service tập tin:

[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

Cho phép Nginx khởi động khi khởi động và khởi động Nginx ngay lập tức:

sudo systemctl enable nginx.service
sudo systemctl start nginx.service

Kiểm tra xem Nginx sẽ tự động bắt đầu sau khi khởi động lại:

sudo systemctl is-enabled nginx.service
# enabled

Kiểm tra xem Nginx có chạy không bằng cách chạy một trong các lệnh sau:

sudo systemctl status nginx.service
# or
ps aux | grep nginx
# or
curl -I 127.0.0.1

Bạn cũng có thể mở trình duyệt của mình và điều hướng đến địa chỉ tên miền / IP của bạn để xem trang Nginx mặc định. Đó là một chỉ báo cho thấy Nginx đang hoạt động.

Tạo hồ sơ ứng dụng Nginx tường lửa không biến chứng ( UFW ):

sudo vim /etc/ufw/applications.d/nginx

Sao chép / dán nội dung dưới đây vào  /etc/ufw/applications.d/nginx tập tin:

[nginx HTTP]
title=Web Server (nginx, HTTP)
description=Small, but very powerful and efficient web server
ports=80/tcp

[nginx HTTPS]
title=Web Server (nginx, HTTPS)
description=Small, but very powerful and efficient web server
ports=443/tcp

[nginx Full]
title=Web Server (nginx, HTTP + HTTPS)
description=Small, but very powerful and efficient web server
ports=80,443/tcp

Xác minh rằng hồ sơ ứng dụng UFW đã được tạo và công nhận:

sudo ufw app list

# Available applications:
 # nginx Full
 # nginx HTTP
 # nginx HTTPS

nginx theo mặc định, tạo  .default tập tin  sao lưu trong /etc/nginx. Xóa  .default tệp khỏi thư mục /etc/nginx:

sudo rm /etc/nginx/*.default

Đặt tô sáng cú pháp cấu hình nginx cho trình soạn thảo Vim vào  ~/.vim:

# For regular non-root user
mkdir ~/.vim/
cp -r ~/nginx-1.15.8/contrib/vim/* ~/.vim/
# For root user
sudo mkdir /root/.vim/
sudo cp -r ~/nginx-1.15.8/contrib/vim/* /root/.vim/

LƯU Ý : Bằng cách thực hiện bước trên, bạn sẽ có được một cú pháp tô sáng đẹp khi chỉnh sửa các tệp cấu hình Nginx trong trình chỉnh sửa Vim.

Tạo  conf.d,  snippets,  sites-available và  sites-enabled thư mục trong  /etc/nginx thư mục:

sudo mkdir /etc/nginx/{conf.d,snippets,sites-available,sites-enabled}

Thay đổi quyền và quyền sở hữu nhóm của tệp nhật ký nginx:

sudo chmod 640 /var/log/nginx/*
sudo chown nginx:adm /var/log/nginx/access.log /var/log/nginx/error.log

Tạo cấu hình logrotation cho Nginx.

sudo vim /etc/logrotate.d/nginx

Điền tệp với văn bản bên dưới, sau đó lưu và thoát:

/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
}

Xóa tất cả các tệp đã tải xuống từ thư mục chính:

cd ~
rm -rf nginx-1.15.8/ openssl-1.1.1a/ pcre-8.42/ zlib-1.2.11/

Và 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 đối 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ật mã mới như  CHACHA20_POLY1305 và giao thức như TLS 1.3  có sẵn trong OpenSSL  1.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ể điều 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 cài đặt nhị phân dựng sẵn.

Leave a Reply

Your email address will not be published. Required fields are marked *