Сборка NginX 1.18 на Ubuntu 16.04


Доброго времени суток, коллеги. Понадобилось собрать NginX из исходников. Собственно, шпаргалка.

Я ни в коем случае не претендую на звание ГУРУ. То, что я здесь излагаю является не более, чем записной книжкой и пособием по настройке оборудования. Если это послужит кому-нибудь подспорьем, то добро пожаловать

Итак, начинаем

Сборка из исходников будет происходить на Ubuntu server 16.04. Все команды выполнял от рута. Ставим и закачиваем зависимости, распаковываем и убираем за собой.

apt install mc htop sudo vim build-essential zip unzip software-properties-common ufw git tree -y
wget https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz && tar xzvf pcre-8.44.tar.gz
wget https://www.zlib.net/zlib-1.2.11.tar.gz && tar xzvf zlib-1.2.11.tar.gz
wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz && tar xzvf openssl-1.1.1g.tar.gz
rm -rf *.tar.gz
apt install -y perl \
libperl-dev \
libgd3 \
libgd-dev \
libgeoip1 \
libgeoip-dev \
geoip-bin \
libxml2 \
libxml2-dev \
libxslt1.1 \
libxslt1-dev \
net-tools \
libpcre3 \
libpcre3-dev \
libpcrecpp0v5 \
libssl-dev \
zlib1g-dev

Скачиваем stable версию NginX (на момент написания статьи 1.18), компилируем и устанавливаем

wget https://nginx.org/download/nginx-1.18.0.tar.gz && tar zxvf nginx-1.18.0.tar.gz && cd nginx-1.18.0 && tree -L 2 .
./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.18.0 \
            --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.28.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.44 \
            --with-pcre-jit \
            --with-zlib=../zlib-1.2.11 \
            --with-openssl=../openssl-1.1.1g \
            --with-openssl-opt=no-nextprotoneg \
            --with-debug
make && make install

Создаем ссылку /usr/sbin/nginx в /bin/nginx. Это стандартное место для модулей Nginx.

ln -s /usr/sbin/nginx /bin/nginx

Создаем пользователя Nginx

useradd -s /usr/sbin/nologin nginx

Создаем каталоги необходимые для работы сервера.

mkdir -p /etc/nginx/{conf.d,snippets,sites-available,sites-enabled,common}
mkdir -p /var/cache/nginx/{client_temp,fastcgi_temp,proxy_temp,scgi_temp,uwsgi_temp}
chmod 700 /var/cache/nginx/*
chown nginx:root /var/cache/nginx/*
chmod 640 /var/log/nginx/*
chown nginx:adm /var/log/nginx/access.log /var/log/nginx/error.log

Создаем конфиг ротации логов

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

sudo nginx -t

Создаем файл сервиса

vi /lib/systemd/system/nginx.service

[Unit]
Description=A high performance web server and a reverse proxy server
After=network.target
[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /var/run/nginx.pid
TimeoutStopSec=5
KillMode=mixed
[Install]
WantedBy=multi-user.target

Добавление в автозагрузку и запуск.

systemctl enable nginx.service
systemctl start nginx.service

Создаем профиль UFW

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

Проверяем, что создался

ufw app list
Доступные приложения: Nginx Full Nginx HTTP Nginx HTTPS OpenSSH

Ставим CertBot. Идем на сайт certbot.eff.org, выбираем Nginx и Ubuntu 16.04, видим предложенный список команд

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
apt-get install certbot python3-certbot-nginx
Enter Enter Enter )

Предполагаю, что в файле /etc/nginx.conf уже прописаны нужные серверы, т.к. certbot изучит существующий файл и найдет в нем домен, параметр server_name your_domain.com

certbot --nginx

Если же нет, то

certbot certonly -d your_domain.com

Добавляем в крон ежедневную задачу проверки состояния сертификатов и обновления по необходимости

crontab -e

@daily certbot renew

Надеюсь, что у вас всё получилось.
Если же нет, то добро пожаловать в раздел КОНТАКТЫ

IT-admins

IT-admins

8.00 - 17.00

☎ +7 (905) 480-54-70
☎ +7 (917) 199-81-13
info@it-admins.ru


IT-admins © 2020