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