Увод
Нгинк је софтвер за веб сервер отвореног кода дизајниран са великом конкурентношћу на уму, који се може користити као ХТТП/ХТТПС сервер, обрнути прокси сервер, прокси сервер за пошту, балансатор оптерећења софтвера, ТЛС терминатор, сервер за кеширање и још много тога!
То је веома модуларан комад софтвера. Чак су и неки од наизглед „уграђених“ делова софтвера, као што су ГЗИП или ССЛ, заправо креирани као модули који се могу омогућити и онемогућити током времена израде.
Има основне (нативне) модуле и модуле треће стране (екстерне) које је креирала заједница. Тренутно постоји преко стотину модула независних произвођача које можемо да користимо.
Написан на Ц, то је брз и лаган комад софтвера.
Инсталирање Нгинк-а из изворног кода је релативно једноставно - преузмите најновију верзију Нгинк-овог изворног кода, конфигуришите га, изградите и инсталирајте га.
Мораћете да изаберете да ли ћете преузети главну или стабилну верзију, али њихова израда је иста.
У овом водичу ћемо саставити главну верзију Нгинк-а на Дебиан 10 (бустер). Користићемо све доступне модуле у отвореној верзији Нгинк-а.
Зашто компајлирати и инсталирати Нгинк из извора
Вероватно се питате зашто би компајлирали Нгинк из извора када можете да користите припремљене пакете. Ево неколико разлога зашто бисте можда желели да сами саставите одређени софтвер:
- За контролу опција конфигурације.
- Да инсталирате софтвер где год желите. Можете чак инсталирати неколико различитих верзија истог софтвера.
- Да бисте контролисали верзију коју инсталирате. Дистрибуције не остају увек ажурне са најновијим верзијама свих пакета, посебно додатака софтверским пакетима.
- Да бисте боље разумели како софтвер функционише.
Стабилна у односу на главну верзију
Нгинк Опен Соурце је доступан у две верзије:
- Маинлине – Укључује најновије функције и исправке грешака и увек је ажуриран. Поуздан је, али може укључивати неке експерименталне модуле, а може имати и одређени број нових грешака.
- Стабилан – Не укључује све најновије функције, али има критичне исправке грешака које се увек враћају на главну верзију.
Основни модули у односу на модуле треће стране
Нгинк има две врсте модула које можете да користите: основне модуле и модуле треће стране.
Основни Нгинк програмери граде основне модуле и они су део самог софтвера.
Заједница гради модуле независних произвођача и можете их користити за проширење функционалности. Постоји много корисних модула независних произвођача.
Статички модули наспрам динамичких модула
Статички модули постоје у Нгинк-у од прве верзије. Динамички модули су представљени са Нгинк-ом 1.9.11+ у фебруару 2016.
Код статичких модула, скуп модула који чине Нгинк бинарни ./configureфајл је фиксиран у време компајлирања помоћу скрипте. Статички модули користе --with-foo_bar_moduleили --add-module=PATHсинтаксу.
За компајлирање основног (стандардног) модула као динамичког додајемо =dynamic, на пример --with-http_image_filter_module=dynamic.
Да бисмо саставили модул треће стране као динамички, користимо --add-dynamic-module=/path/to/moduleсинтаксу, а затим их учитавамо коришћењем load_moduleдирективе у глобалном контексту nginx.confдатотеке.
Захтеви за прављење Нгинк-а из извора
У поређењу са неким другим УНИКС/Линук софтвером, Нгинк је прилично лаган и нема много зависности од библиотеке. Подразумевана конфигурација изградње зависи од само 3 библиотеке које треба инсталирати: ОпенССЛ/ЛибреССЛ/БорингССЛ, Злиб и ПЦРЕ.
- Обавезни захтеви:
- Опциони захтеви:
НАПОМЕНА : Нгинк се такође може компајлирати са ЛибреССЛ и БорингССЛ крипто библиотекама уместо ОпенССЛ-а.
Пре него што почнете
Проверите верзију Дебиана.
lsb_release -ds # Debian GNU/Linux 10 (buster)
Креирајте редовног корисника са sudoприступом.
adduser johndoe --gecos "John Doe" usermod -aG sudo johndoe
НАПОМЕНА : Замените johndoeсвојим корисничким именом .
Пребаците се на новог корисника.
su - johndoe
Подесите временску зону.
sudo dpkg-reconfigure tzdata
Ажурирајте софтвер свог оперативног система.
sudo apt update && sudo apt upgrade -y
Инсталирајте потребне пакете.
sudo apt install -y software-properties-common ufw
Направите Нгинк из извора
Нгинк је програм написан у Ц-у, тако да ћете прво морати да инсталирате алатку за компајлер. Инсталирати build-essential, gitи tree.
sudo apt install -y build-essential git tree
Преузмите најновију главну верзију Нгинк изворног кода и распакујте архиву изворног кода. Нгинк изворни код се дистрибуира као компримована архива, као и већина Уник и Линук софтвера.
wget https://nginx.org/download/nginx-1.17.2.tar.gz && tar zxvf nginx-1.17.2.tar.gz
Преузмите обавезни изворни код Нгинк зависности и распакујте га.
# PCRE version 8.43 wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz && tar xzvf pcre-8.43.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.1c wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz && tar xzvf openssl-1.1.1c.tar.gz
Инсталирајте опционе Нгинк зависности.
sudo apt install -y perl libperl-dev libgd3 libgd-dev libgeoip1 libgeoip-dev geoip-bin libxml2 libxml2-dev libxslt1.1 libxslt1-dev
Очистите све .tar.gzдатотеке. Не требају нам више.
rm -rf *.tar.gz
Унесите Нгинк изворни директоријум.
cd ~/nginx-1.17.2
За добру листу мера директоријуме и датотеке које сачињавају Нгинк изворни код са tree.
tree -L 2 .
Копирајте страницу приручника на /usr/share/man/man8/.
sudo cp ~/nginx-1.17.2/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
За помоћ, можете видети комплетну листу ажурираних опција времена компајлирања Нгинк-а тако што ћете покренути следеће.
./configure --help # To see want core modules can be built as dynamic run: ./configure --help | grep -F =dynamic
Конфигуришите, компајлирајте и инсталирајте Нгинк.
./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.17.2 \ --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.26.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.43 \ --with-pcre-jit \ --with-zlib=../zlib-1.2.11 \ --with-openssl=../openssl-1.1.1c \ --with-openssl-opt=no-nextprotoneg \ --with-debug make sudo make install
Након компилације, идите на свој почетни ( ~) директоријум.
cd ~
Симболна веза /usr/lib/nginx/modulesдо /etc/nginx/modules. Ово је стандардно место за Нгинк модуле.
sudo ln -s /usr/lib/nginx/modules /etc/nginx/modules
Одштампајте верзију Нгинк-а, верзију компајлера и конфигуришите параметре скрипте.
sudo nginx -V # nginx version: nginx/1.17.2 (Debian) # built by gcc 8.3.0 (Debian 8.3.0-6) # built with OpenSSL 1.1.1c 28 May 2019 # TLS SNI support enabled # configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules . . . # . . . # . . .
Креирајте Нгинк системску групу и корисника.
sudo adduser --system --home /nonexistent --shell /bin/false --no-create-home --disabled-login --disabled-password --gecos "nginx user" --group nginx # Check that user and group are created sudo tail -n 1 /etc/passwd /etc/group /etc/shadow
Проверите Нгинк синтаксу и потенцијалне грешке.
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
Направите Нгинк системску јединичну датотеку.
sudo vim /etc/systemd/system/nginx.service
Попуните /etc/systemd/system/nginx.serviceдатотеку следећим садржајем.
[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
Омогућите Нгинк да се покрене при покретању и одмах покрените Нгинк.
sudo systemctl enable nginx.service sudo systemctl start nginx.service
Проверите да ли ће се Нгинк аутоматски покренути након поновног покретања.
sudo systemctl is-enabled nginx.service # enabled
Проверите статус.
sudo systemctl status nginx.service
НАПОМЕНА : Можете да проверите да ли Нгинк ради тако што ћете отићи на домен или ИП адресу вашег сајта у веб прегледачу. Видећете Нгинк страницу добродошлице. То је показатељ да је Нгинк покренут и ради на вашем ВПС-у.
Креирајте УФВ Нгинк профил апликације.
sudo vim /etc/ufw/applications.d/nginx
Копирајте/налепите следећи садржај у /etc/ufw/applications.d/nginxдатотеку.
[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
Потврдите да су профили УФВ апликација креирани и препознати.
sudo ufw app list # Available applications: # Nginx Full # Nginx HTTP # Nginx HTTPS # OpenSSH
Нгинк, подразумевано, генерише .defaultдатотеке резервних копија у /etc/nginx. Уклоните .defaultдатотеке из /etc/nginxдиректоријума.
sudo rm /etc/nginx/*.default
Поставите истицање синтаксе Нгинк конфигурације за Вим едитор у ~/.vim.
# For regular non-root user mkdir ~/.vim/ cp -r ~/nginx-1.17.2/contrib/vim/* ~/.vim/ # For root user sudo mkdir /root/.vim/ sudo cp -r ~/nginx-1.17.2/contrib/vim/* /root/.vim/
НАПОМЕНА : Ако урадите горњи корак, добићете лепо истицање синтаксе када уређујете Нгинк конфигурационе датотеке у Вим едитору.
Креирајте conf.d, snippets, sites-availableи sites-enabledдиректоријуме у /etc/nginx.
sudo mkdir /etc/nginx/{conf.d,snippets,sites-available,sites-enabled}
Промените дозволе и власништво групе над Нгинк датотекама евиденције.
sudo chmod 640 /var/log/nginx/* sudo chown nginx:adm /var/log/nginx/access.log /var/log/nginx/error.log
Направите конфигурацију ротације дневника за Нгинк.
sudo vim /etc/logrotate.d/nginx
Попуните датотеку следећим текстом, а затим сачувајте и изађите.
/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 }
Уклоните све преузете датотеке из кућног директоријума.
cd ~ rm -rf nginx-1.17.2/ openssl-1.1.1c/ pcre-8.43/ zlib-1.2.11/
Резиме
То је то. Сада имате инсталирану најновију верзију Нгинк-а. Саставља се статички у односу на неке важне библиотеке као што је ОпенССЛ. Често је системска верзија ОпенССЛ-а застарела. Коришћењем овог метода инсталирања са новијом верзијом ОпенССЛ-а, можете искористити предности модерних шифара као што су CHACHA20_POLY1305и протоколи попут ТЛС 1.3 који су доступни у ОпенССЛ-у 1.1.1. Штавише, компајлирањем сопственог бинарног фајла, у могућности сте да прилагодите функционалност коју ће ваш Нгинк пружити, што је много флексибилније од инсталирања унапред изграђеног бинарног фајла.