GNU/Linux >> Belajar Linux >  >> Debian

Cara Membangun Nginx dari sumber di Debian 9

Nginx (diucapkan "engine x" ) adalah perangkat lunak server web sumber terbuka yang dirancang dengan mempertimbangkan konkurensi tinggi, yang dapat digunakan sebagai server HTTP/HTTPSserver proxy terbalikserver proxy emailperangkat lunak penyeimbang bebanTerminator TLSserver tembolok ...

Ini adalah perangkat lunak yang sangat modular. Bahkan beberapa bagian perangkat lunak yang tampaknya "terpasang", seperti GZIP atau SSL, sebenarnya dibuat sebagai modul yang dapat diaktifkan dan dinonaktifkan selama waktu pembuatan.

Ini memiliki inti (aslimodul dan modul pihak ketiga (eksternal) diciptakan oleh masyarakat. Saat ini, ada lebih dari seratus modul pihak ketiga yang dapat kami manfaatkan.

Ditulis dalam C bahasa, ini adalah perangkat lunak yang sangat cepat dan ringan.

Menginstal Nginx dari kode sumber relatif "mudah" - unduh versi terbaru kode sumber Nginx, konfigurasikan, bangun, dan instal.

Anda harus memilih apakah akan mengunduh jalur utama atau stabil versi, tetapi membangunnya sama persis.

Dalam tutorial ini, kita akan membangun Nginx dengan semua modul yang tersedia di Nginx versi open source dan kita akan menggunakan mainline  versi yang ada di 1.15.8 pada saat penulisan ini. Perbarui nomor versi saat versi yang lebih baru tersedia.

Versi stabil vs. arus utama

Nginx Open Source tersedia dalam dua versi:

  • Saluran utama – Termasuk fitur terbaru dan perbaikan bug dan selalu up to date. Ini dapat diandalkan, tetapi mungkin menyertakan beberapa modul eksperimental, dan mungkin juga memiliki sejumlah bug baru.
  • Stabil – Tidak menyertakan semua fitur terbaru, tetapi memiliki perbaikan bug penting yang selalu di-backport ke versi arus utama.

Modul inti vs. modul pihak ketiga

Nginx memiliki dua jenis modul yang dapat Anda manfaatkan: modul inti dan modul pihak ketiga .

Modul inti dibuat oleh pengembang inti Nginx dan merupakan bagian dari perangkat lunak itu sendiri.

Modul pihak ketiga dibuat oleh komunitas dan Anda dapat menggunakannya untuk memperluas fungsionalitas Nginx. Ada banyak modul pihak ketiga yang berguna, yang paling terkenal di antaranya adalah:PageSpeed, ModSecurity, RTMP, Lua dll...

Modul statis vs. modul dinamis

Modul statis ada di Nginx sejak versi pertama. Modul dinamis diperkenalkan dengan Nginx 1.9.11+ pada Februari 2016.

Dengan modul statis, kumpulan modul yang membentuk biner Nginx ditetapkan pada waktu kompilasi oleh ./configure naskah. Modul statis menggunakan --with-foo_bar_module atau --add-module=PATH sintaks.

Untuk mengkompilasi modul inti (standar) sebagai dinamis, kami menambahkan =dynamic , misalnya --with-http_image_filter_module=dynamic .

Untuk mengompilasi modul pihak ketiga sebagai dinamis, kami menggunakan --add-dynamic-module=/path/to/module sintaks dan kemudian kami memuatnya dengan menggunakan load_module direktif dalam konteks global nginx.conf berkas.

Persyaratan untuk membangun Nginx dari sumber

Dibandingkan dengan beberapa perangkat lunak UNIX/Linux lainnya, Nginx cukup ringan dan tidak memiliki banyak dependensi perpustakaan. Konfigurasi build default hanya bergantung pada 3 library yang akan diinstal: OpenSSL /LibreSSL /SSL MembosankanZlib dan PCRE .

  • Persyaratan wajib:
    • Koleksi Kompilator GNU (GCC )
    • Versi pustaka OpenSSL antara 1.0.21.1.1 atau pustaka LibreSSL atau perpustakaan BoringSSL
    • Versi pustaka Zlib antara 1.1.31.2.11
    • Versi pustaka PCRE antara 4.48.42
  • Persyaratan opsional:
    • Perl
    • LibGD
    • Perpustakaan MaxMind GeoIP Legacy C
    • libxml2
    • libxslt

CATATAN :Nginx juga dapat dikompilasi dengan LibreSSL dan MembosankanSSL pustaka kripto alih-alih OpenSSL .

Persyaratan

  • Server yang menjalankan Debian 9 (peregangan).
  • Pengguna non-root dengan hak istimewa sudo.

Langkah Awal

Periksa versi Debian:

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

Instal wgetcurl dan sudo paket.

apt install -y wget curl sudo

Siapkan zona waktu:

sudo dpkg-reconfigure tzdata

Perbarui paket sistem operasi Anda:

apt update && apt upgrade -y

Buat Nginx dari sumber

Nginx adalah program yang ditulis dalam C , jadi Anda harus menginstal alat kompiler terlebih dahulu. Instal build-essential paket, dan paket lain yang diperlukan:

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

Unduh versi arus utama kode sumber Nginx dan ekstrak. Kode sumber Nginx didistribusikan sebagai arsip terkompresi (tarball gzip), seperti kebanyakan perangkat lunak Unix dan Linux:

wget https://nginx.org/download/nginx-1.15.8.tar.gz && tar zxvf nginx-1.15.8.tar.gz

Unduh kode sumber dependensi Nginx wajib dan ekstrak:

# 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

Instal dependensi Nginx opsional:

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

Bersihkan semua .tar.gz file. Kami tidak membutuhkannya lagi:

rm -rf *.tar.gz

Masuk ke direktori sumber Nginx:

cd ~/nginx-1.15.8

Untuk ukuran yang baik, daftar direktori dan file yang menyusun kode sumber Nginx dengan tree utilitas:

tree -L 2 .

Salin halaman manual Nginx ke /usr/share/man/man8/ direktori:

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

Untuk bantuan, Anda dapat melihat daftar lengkap opsi waktu kompilasi Nginx terbaru dengan menjalankan:

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

Konfigurasi, kompilasi, dan instal 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

Setelah membangun Nginx, navigasikan ke beranda (~ ) direktori:

cd ~

Symlink /usr/lib/nginx/modules ke /etc/nginx/modules direktori. etc/nginx/modules adalah tempat standar untuk modul Nginx:

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

Cetak versi Nginx, versi kompiler, dan konfigurasikan parameter skrip:

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

Buat grup dan pengguna sistem Nginx:

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

Periksa sintaks Nginx dan potensi kesalahan:

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

Buat file unit sistem Nginx:

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

Salin/tempel konten di bawah ini ke /etc/systemd/system/nginx.service berkas:

[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

Aktifkan Nginx untuk memulai saat boot dan segera mulai Nginx:

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

Periksa apakah Nginx akan dimulai secara otomatis setelah reboot:

sudo systemctl is-enabled nginx.service
# enabled

Periksa apakah Nginx berjalan dengan menjalankan salah satu perintah berikut:

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

Anda juga dapat membuka browser dan menavigasi ke domain/alamat IP Anda untuk melihat halaman Nginx default. Itu adalah indikator bahwa Nginx aktif dan berjalan.

Buat Firewall yang Tidak Rumit (UFW ) Profil aplikasi Nginx:

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

Salin/tempel konten di bawah ini ke /etc/ufw/applications.d/nginx berkas:

[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

Verifikasi bahwa profil aplikasi UFW dibuat dan dikenali:

sudo ufw app list

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

nginx secara default, menghasilkan cadangan .default file di /etc/nginx . Hapus .default file dari /etc/nginx direktori:

sudo rm /etc/nginx/*.default

Tempatkan penyorotan sintaks dari konfigurasi nginx untuk editor Vim ke ~/.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/

CATATAN :Dengan melakukan langkah di atas, Anda akan mendapatkan penyorotan sintaks yang bagus saat mengedit file konfigurasi Nginx di editor Vim.

Buat conf.dsnippetssites-available dan sites-enabled direktori di /etc/nginx direktori:

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

Ubah izin dan kepemilikan grup file log nginx:

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

Buat konfigurasi logrotasi untuk Nginx.

sudo vim /etc/logrotate.d/nginx

Isi file dengan teks di bawah ini, lalu simpan dan keluar:

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

Hapus semua file yang diunduh dari direktori home:

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

Itu dia. Sekarang, Anda telah menginstal Nginx versi terbaru dengan membangunnya dari kode sumber. Itu dikompilasi secara statis terhadap beberapa perpustakaan penting seperti OpenSSL. Seringkali, versi OpenSSL yang disediakan sistem sudah usang. Dengan menggunakan metode penginstalan dengan versi OpenSSL yang lebih baru, Anda dapat memanfaatkan sandi baru seperti CHACHA20_POLY1305 dan protokol seperti TLS 1.3 yang tersedia di OpenSSL 1.1.1. Selain itu, dengan mengompilasi biner Anda sendiri, Anda dapat menyesuaikan fungsionalitas apa yang akan disediakan Nginx Anda, yang jauh lebih fleksibel daripada menginstal biner yang sudah dibuat sebelumnya.


Debian
  1. Cara mengkompilasi ulang server web nginx di Debian Linux

  2. Cara mengkompilasi dari sumber dan menginstal Nginx di VPS Debian 7 (Wheezy)

  3. Cara Menginstal Microweber di Debian 9

  1. Cara Mengkompilasi Alat Kompresi Brotli dari Sumber di Debian 9

  2. Cara Upgrade dari Debian 10 ke Debian 11

  3. Cara membuat nginx dengan modul Google PageSpeed ​​di Debian 8 (Jessie)

  1. Cara Menginstal Nginx di Debian 9

  2. Cara Membangun Paket Dari Sumber Menggunakan CheckInstall

  3. Bagaimana cara meningkatkan ke Debian 11 dari Debian 10