Nginx (diucapkan "engine x" ) adalah perangkat lunak server web sumber terbuka yang dirancang dengan mempertimbangkan konkurensi tinggi, yang dapat digunakan sebagai server HTTP/HTTPS , server proxy terbalik , server proxy email , perangkat lunak penyeimbang beban , Terminator TLS , server 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 (asli ) modul 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 Membosankan , Zlib dan PCRE .
- Persyaratan wajib:
- Koleksi Kompilator GNU (GCC )
- Versi pustaka OpenSSL antara 1.0.2 - 1.1.1 atau pustaka LibreSSL atau perpustakaan BoringSSL
- Versi pustaka Zlib antara 1.1.3 - 1.2.11
- Versi pustaka PCRE antara 4.4 - 8.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 wget
, curl
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.d
, snippets
, sites-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.