GNU/Linux >> Belajar Linux >  >> Fedora

Cara Membangun Nginx dari sumber di Fedora 29

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, buat, dan instal.

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

Dalam tutorial ini, kita akan membuat 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

Persyaratan

  • Server yang menjalankan sistem Fedora 29.
  • Pengguna non-root dengan hak istimewa sudo.

Langkah Awal

Periksa versi Fedora Anda:

cat /etc/fedora-release
# Fedora release 29 (Twenty Nine)

Siapkan zona waktu:

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

Perbarui paket sistem operasi Fedora Anda:

sudo dnf upgrade -y

Instal paket vim, curl, wget, dan pohon:

sudo dnf install -y vim curl wget tree

Buat Nginx dari sumber

Nginx adalah program yang ditulis dalam C , jadi Anda harus menginstal alat kompiler terlebih dahulu:

sudo dnf groupinstall -y 'Development Tools'

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 dnf install -y perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel GeoIP GeoIP-devel

Bersihkan semua .tar.gz file, karena tidak diperlukan 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/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=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/lib64/nginx/modules ke /etc/nginx/modules direktori. etc/nginx/modules adalah tempat standar untuk modul Nginx:

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

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

sudo nginx -V
# nginx version: nginx/1.15.8 (Fedora)
# built by gcc 8.2.1 20150623 (Red Hat 8.2.1-6) (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
# . . .
# . . .

Buat grup dan pengguna sistem Nginx:

sudo useradd --system --home /var/cache/nginx --shell /sbin/nologin --comment "nginx user" --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:

CATATAN : Lokasi PID file dan biner Nginx mungkin berbeda bergantung pada cara Nginx dikompilasi.

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

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 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 rotasi log 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 didukung 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.


Fedora
  1. Cara Mengkompilasi Alat Kompresi Brotli dari Sumber di Fedora 29

  2. Cara Upgrade Fedora Linux ke Versi Terbaru

  3. Cara menginstal editor nano dari kode sumber

  1. Cara Membangun Paket Dari Sumber Menggunakan CheckInstall

  2. Cara Meningkatkan Fedora 34 dari Fedora 33 menggunakan DNF

  3. Bagaimana cara meningkatkan dari Fedora 32 ke Fedora 33

  1. Cara Membangun NGINX dari sumber di Ubuntu 18.04 LTS

  2. Cara Membangun Nginx dari sumber di Debian 9

  3. Cara Membangun Nginx dari sumber di CentOS 7