Skip to content

Latest commit

 

History

History
324 lines (238 loc) · 5.5 KB

1-server.md

File metadata and controls

324 lines (238 loc) · 5.5 KB

Сервер

Подключает

ssh root@ip

Обновляет систему

apt update -y

Меняет пароль root

passwd

Ставит зависимости

apt install dpkg-dev build-essential gnupg2 git gcc cmake libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev curl unzip -y

Добавляет GPG ключ nginx

curl -L https://nginx.org/keys/nginx_signing.key | apt-key add -

Добавляет репозитории nginx

nano /etc/apt/sources.list.d/nginx.list
deb http://nginx.org/packages/ubuntu/ focal nginx
deb-src http://nginx.org/packages/ubuntu/ focal nginx

Обновляет репозитории

apt update -y

Скачивает исходники nginx

cd /usr/local/src
apt source nginx

Ставит зависимости для сборки

apt build-dep nginx -y

Скачивает Brotli

git clone --recursive https://github.com/google/ngx_brotli.git

Обновляет правила сборки

cd /usr/local/src/nginx-*/
nano debian/rules

Найти блоки

  • config.env.nginx
  • config.env.nginx_debug

Добавить новый ключ в каждом ./configure

--add-module=/usr/local/src/ngx_brotli

Компилирует и собирает nginx

dpkg-buildpackage -b -uc -us

Проверяет deb-файлы

ls /usr/local/src/*.deb

Устанавливает nginx из deb-файлов

dpkg -i /usr/local/src/*.deb

Настраивает nginx

nano /etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /var/run/nginx.pid;

events {
    worker_connections 768;
}

include /etc/nginx/sites-enabled/*.stream;

http {

    # Basic

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    types_hash_max_size 2048;
    server_tokens off;
    ignore_invalid_headers on;

    # Decrease default timeouts to drop slow clients

    keepalive_timeout 40s;
    send_timeout 20s;
    client_header_timeout 20s;
    client_body_timeout 20s;
    reset_timedout_connection on;

    # Hash sizes

    server_names_hash_bucket_size 64;

    # Mime types

    default_type  application/octet-stream;
    include /etc/nginx/mime.types;

    # Logs

    log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $bytes_sent "$http_referer" "$http_user_agent" "$gzip_ratio"';
    access_log /var/log/nginx/access.log main;
    error_log /var/log/nginx/error.log warn;

    # Limits

    limit_req_zone  $binary_remote_addr  zone=dos_attack:20m   rate=30r/m;

    # Gzip

    gzip on;
    gzip_disable "msie6";
    gzip_vary off;
    gzip_proxied any;
    gzip_comp_level 5;
    gzip_min_length 1000;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types
        application/atom+xml
        application/javascript
        application/json
        application/ld+json
        application/manifest+json
        application/rss+xml
        application/vnd.geo+json
        application/vnd.ms-fontobject
        application/x-font-ttf
        application/x-web-app-manifest+json
        application/xhtml+xml
        application/xml
        font/opentype
        image/bmp
        image/svg+xml
        image/x-icon
        text/cache-manifest
        text/css
        text/plain
        text/vcard
        text/vnd.rim.location.xloc
        text/vtt
        text/x-component
        text/x-cross-domain-policy;

    # Brotli

    brotli on;
    brotli_comp_level 6;
    brotli_types
        text/xml
        image/svg+xml
        application/x-font-ttf
        image/vnd.microsoft.icon
        application/x-font-opentype
        application/json
        font/eot
        application/vnd.ms-fontobject
        application/javascript
        font/otf
        application/xml
        application/xhtml+xml
        text/javascript
        application/x-javascript
        text/$;

    # Virtual Hosts

    include /etc/nginx/sites-enabled/*;

    # Configs

    include /etc/nginx/conf.d/*.conf;
    include /usr/share/nginx/modules/*.conf;

}

Проверяет конфиг nginx

nginx -t

Запускает nginx

systemctl start nginx
systemctl status nginx

Фиксит ошибку с PID

mkdir /etc/systemd/system/nginx.service.d
printf "[Service]\nExecStartPost=/bin/sleep 0.1\n" > /etc/systemd/system/nginx.service.d/override.conf
systemctl daemon-reload
systemctl restart nginx

Проверяет Brotli

curl -H 'Accept-Encoding: br' -I http://localhost
Content-Encoding: br

Устанавливает файрвол

apt install ufw

Добавляет nginx

nano /etc/ufw/applications.d/nginx.ini
[Nginx HTTP]
title=Web Server
description=Enable NGINX HTTP traffic
ports=80/tcp

[Nginx HTTPS] \
title=Web Server (HTTPS) \
description=Enable NGINX HTTPS traffic
ports=443/tcp

[Nginx Full]
title=Web Server (HTTP,HTTPS)
description=Enable NGINX HTTP and HTTPS traffic
ports=80,443/tcp

Проверяет список приложений

ufw app list

Включает файрвол

ufw enable

Разрешает сервисы

ufw allow 'Nginx Full'
ufw allow 'OpenSSH'

Проверяет статус

ufw status
Status: active

To                         Action      From
--                         ------      ----
Nginx Full                 ALLOW       Anywhere
OpenSSH                    ALLOW       Anywhere
Nginx Full (v6)            ALLOW       Anywhere (v6)
OpenSSH (v6)               ALLOW       Anywhere (v6)