Hướng dẫn cài đặt Nginx từ mã nguồn trên server CentOs 7

0

Nginx  (phát âm “engine x” ) là một phần mềm máy chủ web mã nguồn mở có thể được sử dụng như HTTP / HTTPS máy chủ, đảo ngược proxy server , proxy server email , cân bằng tải phần mềm , TLS terminator , bộ nhớ đệm máy chủ . ..

Nó là một phần theo dạng 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à một 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.7 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:
    • Bộ sưu tập trình biên dịch GNU ( GCC )
    •  Phiên bản thư viện OpenSSL giữa thư viện 1.0.2 – 1.1.1 hoặc LibreSSL hoặc thư viện BoringSSL
    •  Phiên bản thư viện Zlib trong khoảng 1.1.3 – 1.2.11
    •  Phiên bản thư viện PCRE trong khoảng 4.4 – 8.42
  • Yêu cầu tùy chọn:
    • 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 hệ thống CentOS 7.
  • 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 CentOS:

cat /etc/centos-release
# CentOS Linux release 7.6.1810 (Core)

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

timedatectl list-timezones
sudo timedatectl set-timezone 'Region/City'

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

sudo yum update -y

Cài đặt gói vim, curl, wget và cây:

sudo yum 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ằng  C , vì vậy trước tiên bạn sẽ cần cài đặt công cụ biên dịch :

sudo yum groupinstall -y 'Development Tools'

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.7.tar.gz && tar zxvf nginx-1.15.7.tar.gz

Tải xuống mã nguồn phụ thuộc Nginx bắt buộc và trích xuất chúng:

# 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 phiên bản 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

sudo yum install -y perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel GeoIP GeoIP-devel

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.7

Đố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 thư mục /usr/share/man/man8/:

sudo cp ~/nginx-1.15.7/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 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/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=CentOS \
            --builddir=nginx-1.15.7 \
            --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=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/lib64/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/lib64/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.7 (CentOS)
# built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
# 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/lib64/nginx/modules
# . . .
# . . .

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

sudo useradd --system --home /var/cache/nginx --shell /sbin/nologin --comment "nginx user" --user-group nginx

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

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:

LƯU Ý :  Vị trí của  PID tệp và nhị phân Nginx có thể khác nhau tùy thuộc vào cách Nginx được biên dịch.

[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.

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

sudo rm /etc/nginx/*.default

Đặt highlight 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.7/contrib/vim/* ~/.vim/
# For root user
sudo mkdir /root/.vim/
sudo cp -r ~/nginx-1.15.7/contrib/vim/* /root/.vim/

LƯU Ý : Bằng cách thực hiện bước trên, bạn sẽ nhận được một cú pháp highlight đẹp khi chỉnh sửa 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.7/ openssl-1.1.1a/ pcre-8.42/ zlib-1.2.11/

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à các giao thức như  TLS 1.3  được hỗ trợ 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 của mình Nginx 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 *