Cách xây dựng Nginx từ nguồn trên Fedora 29

theanh

Administrator
Nhân viên
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)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ính1.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õimô-đ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_modulehoặ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/modulevà sau đó chúng ta tải chúng bằng cách sử dụng load_modulechỉ 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,ZlibPCRE.
[*] Yêu cầu tùy chọn:

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)
Thiết lập múi giờ:
Mã:
timedatectl list-timezones
sudo timedatectl set-timezone 'Region/City'
Cập nhật các gói của hệ điều hành Fedora:
Mã:
sudo dnf upgrade-y
Cài đặt các gói vim, curl, wget và tree:
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'
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:
Mã:
wget https://nginx.org/download/nginx-1.15.8.tar.gz && tar zxvf nginx-1.15.8.tar.gz
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:
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
Cài đặt các phụ thuộc Nginx tùy chọn:
Mã:
sudo dnf 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ả các tệp .tar.gz vì chúng không còn cần thiết nữa:
Mã:
rm -rf *.tar.gz
Vào thư mục nguồn Nginx:
Mã:
cd ~/nginx-1.15.8
Để đả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 tree:
Mã:
tree -L 2 .
Sao chép trang hướng dẫn sử dụng Nginx vào /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
Cấu hình, biên dịch và cài đặt NGINX:
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
Sau khi xây dựng Nginx, điều hướng đến thư mục home (~):
Mã:
cd ~
Liên kết tượng trưng/usr/lib64/nginx/modulesđến/etc/nginx/modulesthư mục.etc/nginx/moduleslà một vị trí chuẩn cho các mô-đun Nginx:

Mã:
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à cấu hình các tham số tập lệnh:
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
# . . .
# . . .
Tạo nhóm hệ thống và người dùng Nginx:
Mã:
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:
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
Tạo tệp đơn vị systemd Nginx:
Mã:
sudo vim /etc/systemd/system/nginx.service
Sao chép/dán nội dung bên dưới vào tệp /etc/systemd/system/nginx.service:

LƯU Ý:Vị trí của tệp PIDvà 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
Cho phép Nginx khởi động khi khởi động và khởi động Nginx ngay lập tức:
Mã:
sudo systemctl enable nginx.service
sudo systemctl start nginx.service
Kiểm tra xem Nginx có tự động khởi tạo sau khi khởi động lại không:
Mã:
sudo systemctl is-enabled nginx.service
# enabled
Kiểm tra xem Nginxis có đang chạy không chạy một trong các lệnh sau:
Mã:
sudo systemctl status nginx.service
# hoặc
ps aux | grep nginx
#hoặc
curl -I 127.0.0.1
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.defaulttrong/etc/nginx. Xóa các tệp .defaultkhỏi thư mục /etc/nginx:
Mã:
sudo rm /etc/nginx/*.default
Đặt tô sáng cú pháp của cấu hình Nginx cho trình soạn thảo Vim vào ~/.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/
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ạoconf.d,snippets,sites-availablesites-enabledthư mục trong/etc/nginxthư mục:
Mã:
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:
Mã:
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 xoay vòng nhật ký cho Nginx.
Mã:
sudo vim /etc/logrotate.d/nginx
Điền văn bản bên dưới vào tệp, sau đó lưu và thoát:
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
}
Xóa tất cả các tệp đã tải xuống khỏi thư mục gốc:
Mã:
cd ~
rm -rf nginx-1.15.8/ openssl-1.1.1a/ pcre-8.42/ zlib-1.2.11/
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ưCHACHA20_POLY1305và 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.
 
Back
Bên trên