GNU/Linux >> Belajar Linux >  >> Ubuntu

Cara Membangun NGINX dari sumber di Ubuntu 18.04 LTS

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.0 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 terhadap LibreSSL dan MembosankanSSL pustaka kripto alih-alih OpenSSL .

Persyaratan

  • Server yang menjalankan Ubuntu 18.04 LTS.
  • Pengguna non-root dengan hak istimewa sudo.

Langkah Awal

Periksa versi Ubuntu:

lsb_release -ds 
# Ubuntu 18.04 LTS

Siapkan zona waktu:

timedatectl list-zona waktu
sudo timedatectl set-timezone 'Region/City'

Perbarui paket sistem operasi Anda:

sudo apt update && sudo apt upgrade -y

Buat NGINX dari sumber

NGINX adalah program yang ditulis dalam C , jadi Anda harus menginstal alat kompiler terlebih dahulu. Instal build-essentialgit dan tree paket:

sudo apt install -y build-essential git tree

Unduh versi arus utama terbaru dari 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.0.tar.gz &&tar zxvf nginx-1.15.0.tar.gz

Unduh kode sumber dependensi NGINX wajib dan ekstrak:

# PCRE versi 8.42
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz &&tar xzvf pcre-8.42.tar.gz

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

# OpenSSL versi 1.1.0h
wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz &&tar xzvf openssl-1.1.0h.tar.gz

Instal dependensi NGINX opsional:

sudo add-apt-repository -y ppa:maxmind/ppa
sudo apt update &&sudo apt upgrade -y
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.0

Untuk direktori ukuran yang baik dan file yang menyusun kode sumber NGINX dengan tree utilitas:

pohon -L 2 .

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

sudo cp ~/nginx-1.15.0/man/nginx.8 /usr/share/man/man8
sudo gzip /usr/share/man/man8/nginx.8
ls / usr/share/man/man8/ | grep nginx.8.gz
# Periksa apakah halaman manual untuk NGINX berfungsi:
man nginx

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

./configure --help
# Untuk melihat modul inti yang diinginkan dapat dibuat sebagai run dinamis:
./configure --help | grep -F =dinamis

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=Ubuntu \
            --builddir=nginx-1.15.0 \
            --with-select_module \
            --dengan polling -with-threads \
            --with-file-aio \
            --with-http_ssl_module \
            --with-http_v2_module \
           >            --with-http_addition_module \
            --with-http_xslt_module=dynamic \
            --with-http_image_filter_module=dynamic \
          =      ge --with-http_sub_module \
            --with-http_dav_module \
            --with-http_flv_module \
            --with-http_mp4_module \
     --with-http_gzip_static_module \
            --with-http_auth_request_module \
            --with-http_random_index_module \
            --with-http_secure_link --> --with-http_slice_module \
            --with-http_stub_status_module \
            --with-http_perl_module=dynamic \
            --with-perl_modules/share_path=/usr br />            --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 modul --with-stream_geoip_module=dynamic \
            --with-stream_ssl_preread_module \
            --with-compat \
            --with-pcre=../pcre-8 .42 \
            --with-zlib=../zlib-1.2.11 \
            --with-openssl=../openssl-1.1.0h \
            - -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
# versi nginx:nginx/1.15.0 (Ubuntu)
# dibuat oleh gcc 7.3.0 (Ubuntu 7.3.0-16ubuntu3)
# dibuat dengan OpenSSL 1.1.0j  27 Mar 2018
# dukungan TLS SNI diaktifkan
# konfigurasikan argumen:--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
# Akan memunculkan kesalahan ini -> nginx:[emerg] mkdir() "/var/cache/nginx/client_temp" gagal (2:Tidak ada file atau direktori seperti itu)

# Buat direktori cache NGINX dan atur izin yang sesuai
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/*

# Periksa kembali sintaks dan kemungkinan kesalahan.
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 - server web kinerja tinggiDocumentation=https://nginx.org/en/docs/After=network-online.target remote-fs.target nss-lookup.targetWants=network-online.target [Layanan]Tipe=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[Install]WantedBy=multi-user.target

Aktifkan NGINX untuk memulai saat boot dan segera memulai NGINX:

sudo systemctl aktifkan nginx.service
sudo systemctl start nginx.service

Periksa apakah NGINX akan dimulai secara otomatis setelah reboot:

sudo systemctl diaktifkan nginx.service
# diaktifkan

Periksa apakah NGINX berjalan dengan menjalankan salah satu perintah berikut:

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

Anda juga dapat membuka browser dan menavigasi ke domain/alamat IP 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=Server Web (Nginx, HTTP)description=Server web kecil, tapi sangat kuat dan efisienports=80/tcp[Nginx HTTPS]title=Server Web (Nginx, HTTPS)description=Kecil, tapi sangat web serverports yang kuat dan efisien=443/tcp[Nginx Full]title=Web Server (Nginx, HTTP + HTTPS)description=Serverport web kecil, tetapi sangat kuat dan efisien=80,443/tcp

Verifikasi bahwa profil aplikasi UFW dibuat dan dikenali:

daftar aplikasi sudo ufw

# Aplikasi yang tersedia:
 # Nginx Lengkap
 # Nginx HTTP
 # Nginx HTTPS
 # OpenSSH

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 :

# Untuk usermkdir non-root biasa ~/.vim/cp -r ~/nginx-1.15.0/contrib/vim/* ~/.vim/# Untuk root usersudo mkdir /root/.vim/sudo cp - r ~/nginx-1.15.0/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 ]; lalu bunuh -USR1 `cat /var/run/nginx.pid` fi endscript}

Hapus semua file yang diunduh dari direktori home:

cd ~
rm -rf nginx-1.15.0/ openssl-1.1.0h/ 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 akan 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.


Ubuntu
  1. Cara Mengkompilasi Brotli dari Sumber di Ubuntu 18.04 LTS

  2. Cara Meningkatkan Dari Ubuntu 20.04 ke Ubuntu 22.04 LTS (Panduan Langkah-demi-Langkah)

  3. Cara memutakhirkan dari Ubuntu 20.04/21.10 ke 22.04 LTS

  1. Cara Meningkatkan ke Ubuntu 18.10 dari Ubuntu 18.04 LTS

  2. Cara Menginstal Nginx dengan Kompresi Brotli di Ubuntu 18.04 LTS

  3. Cara Meningkatkan ke Ubuntu 22.04 LTS dari Ubuntu 20.04 LTS dan 21.10

  1. Cara Membangun Nginx dari sumber di Debian 9

  2. Cara Membangun Nginx dari sumber di CentOS 7

  3. Cara Membangun Nginx dari sumber di Fedora 29