1seo-popap-it-industry-kids-programmingSkysmart - попап на IT-industry
2seo-popap-it-industry-it-englishSkyeng - попап на IT-английский
3seo-popap-it-industry-adults-programmingSkypro - попап на IT-industry

Установка и настройка Nginx на Ubuntu

Для кого эта статья:
  • Системные администраторы и DevOps-инженеры, настраивающие веб-серверы на Ubuntu
  • Разработчики и технические специалисты, заинтересованные в оптимизации и безопасности Nginx
  • IT-специалисты, работающие с виртуальными хостами и балансировкой нагрузки на веб-серверах
Установка и настройка Nginx на Ubuntu
NEW

Преобразите сервер с Nginx: пошаговое руководство по установке и настройке на Ubuntu для максимальной производительности!

Nginx — это не просто веб-сервер, а мощный швейцарский нож в арсенале современного системного администратора. За свою историю я развернул сотни серверов на Ubuntu и могу с уверенностью сказать: правильная установка и настройка Nginx может превратить ваш сервер из посредственного в молниеносный. В этом руководстве я проведу вас через все этапы установки и настройки Nginx на Ubuntu — от обновления системы до тонкой оптимизации производительности. Готовы превратить свой сервер в надежную крепость для веб-приложений? 🚀


Работа с серверными технологиями требует не только технических знаний, но и уверенного владения английским языком. Большинство документации, форумов поддержки и команд терминала используют английскую терминологию. Курс "Английский для IT-специалистов" от Skyeng поможет вам читать официальную документацию Nginx, понимать сообщения об ошибках и эффективно общаться в международном сообществе разработчиков. Инвестиция в технический английский окупается уже на первой серьезной проблеме с сервером!

Подготовка системы Ubuntu к установке Nginx

Перед установкой Nginx необходимо подготовить систему Ubuntu, чтобы избежать конфликтов и обеспечить стабильную работу веб-сервера. Правильная подготовка системы — это фундамент, на котором будет строиться вся дальнейшая работа.


Алексей Воронин, DevOps-инженер Однажды я был вызван в компанию, где пользователи жаловались на постоянные сбои в работе внутреннего корпоративного портала. Сайт работал на старой версии Ubuntu с устаревшими пакетами. Админ до меня установил Nginx без предварительного обновления системы, в результате чего возникли конфликты с библиотеками OpenSSL. Первое, что я сделал — полное обновление системы с использованием команд, которые приведу ниже. После этого пришлось переустановить Nginx из официального репозитория, правильно настроить файрвол и перенастроить виртуальные хосты. Результат превзошел ожидания: время отклика сервера сократилось на 68%, а сбои прекратились полностью. С тех пор я всегда начинаю работу с тщательной подготовки системы, и это экономит десятки часов на последующем устранении проблем.

Прежде всего необходимо обновить индексы пакетов и установить все доступные обновления для вашей Ubuntu. Это гарантирует совместимость пакетов и безопасность системы:

sudo apt update && sudo apt upgrade -y

После обновления системы рекомендуется установить дополнительные пакеты, которые могут потребоваться для оптимальной работы Nginx:

  • build-essential — включает компиляторы и библиотеки, необходимые для сборки программного обеспечения
  • curl — утилита для передачи данных по различным протоколам
  • gnupg2 — пакет для работы с шифрованием и цифровыми подписями
  • ca-certificates — пакет сертификатов CA для проверки SSL-соединений
  • lsb-release — предоставляет информацию о дистрибутиве

Установите эти пакеты одной командой:

sudo apt install build-essential curl gnupg2 ca-certificates lsb-release -y

Следующий важный шаг — настройка файрвола UFW (Uncomplicated Firewall) для разрешения HTTP и HTTPS трафика:

sudo ufw allow 'Nginx Full'

Эта команда открывает порты 80 (HTTP) и 443 (HTTPS), необходимые для работы веб-сервера. Если вы хотите разрешить только HTTP или только HTTPS трафик, используйте соответственно:

sudo ufw allow 'Nginx HTTP' sudo ufw allow 'Nginx HTTPS'

Проверьте статус файрвола, чтобы убедиться, что нужные порты открыты:

sudo ufw status

Если файрвол не активирован, включите его:

sudo ufw enable

Существует несколько источников установки Nginx на Ubuntu, каждый из которых имеет свои преимущества и недостатки:

Источник Преимущества Недостатки Рекомендуется для
Официальный репозиторий Ubuntu Простота установки, автоматические обновления Не всегда самая свежая версия Начинающих администраторов, стабильных проектов
Официальный репозиторий Nginx Более свежие версии, дополнительные модули Требует ручного добавления репозитория Продакшн-серверов, требующих новейших функций
Компиляция из исходного кода Максимальная гибкость, оптимизация под конкретные задачи Сложность, ручное управление обновлениями Экспертов, высоконагруженных систем

Для большинства случаев рекомендуется использовать официальный репозиторий Nginx, так как он предлагает оптимальный баланс между актуальностью версий и простотой управления. В данном руководстве мы сосредоточимся именно на этом способе установки.

Пошаговая установка Nginx на Ubuntu через терминал

После подготовки системы переходим непосредственно к установке Nginx. Я рекомендую использовать официальный репозиторий Nginx вместо стандартного репозитория Ubuntu, так как он содержит более свежие версии и дополнительные модули. 🛠️

Шаг 1: Добавление официального репозитория Nginx

Сначала импортируем ключ подписи Nginx, чтобы apt мог проверять целостность пакетов:

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

Теперь добавим репозиторий Nginx в систему. Для этого создадим новый файл источника:

sudo nano /etc/apt/sources.list.d/nginx.list

В открывшийся редактор вставьте следующие строки (для Ubuntu 22.04 Jammy):

deb https://nginx.org/packages/ubuntu/ jammy nginx deb-src https://nginx.org/packages/ubuntu/ jammy nginx

Если у вас другая версия Ubuntu, замените "jammy" на соответствующее кодовое имя вашего дистрибутива:

  • Ubuntu 20.04 — focal
  • Ubuntu 18.04 — bionic
  • Ubuntu 16.04 — xenial

Сохраните файл, нажав Ctrl+O, затем Enter, и выйдите из редактора с помощью Ctrl+X.

Шаг 2: Установка Nginx

Обновите индексы пакетов и установите Nginx:

sudo apt update sudo apt install nginx -y

Шаг 3: Проверка установки

После завершения установки проверьте, что Nginx успешно установлен и запущен:

sudo systemctl status nginx

Вы должны увидеть сообщение о том, что сервис активен (running). Также можно проверить версию установленного Nginx:

nginx -v

Шаг 4: Настройка автозапуска

Чтобы Nginx автоматически запускался при загрузке системы, выполните:

sudo systemctl enable nginx

Шаг 5: Базовое управление Nginx

Вот основные команды для управления сервисом Nginx:

Команда Действие Когда использовать
sudo systemctl start nginx Запуск сервиса После установки или если сервис остановлен
sudo systemctl stop nginx Остановка сервиса При обслуживании сервера или внесении критических изменений
sudo systemctl restart nginx Перезапуск сервиса После изменения конфигурации, требующего полного перезапуска
sudo systemctl reload nginx Перезагрузка конфигурации без остановки сервиса После большинства изменений конфигурации (предпочтительный метод)
sudo nginx -t Проверка синтаксиса конфигурационных файлов Перед применением изменений конфигурации

Шаг 6: Проверка работоспособности

Откройте веб-браузер и введите IP-адрес вашего сервера или localhost, если вы устанавливаете Nginx на локальную машину:

http://ваш_ip_адрес

Вы должны увидеть приветственную страницу Nginx, что означает успешную установку и запуск сервера. Если страница не отображается, проверьте следующие моменты:

  • Статус сервиса Nginx (должен быть активен)
  • Настройки файрвола (порты 80/443 должны быть открыты)
  • Сетевые настройки (если вы подключаетесь удаленно)
  • Логи ошибок: sudo tail -f /var/log/nginx/error.log

Теперь, когда Nginx установлен и работает, можно переходить к его настройке под конкретные задачи. 💪

Настройка конфигурации Nginx для различных сценариев

Структура конфигурации Nginx хорошо организована и модульна, что позволяет легко адаптировать сервер под различные сценарии использования. Разберем основные файлы конфигурации и их предназначение.


Дмитрий Савельев, технический директор Полгода назад наш проект испытывал серьезные проблемы с производительностью. PHP-приложение с высокой нагрузкой регулярно "падало" под наплывом пользователей. Традиционный подход с масштабированием серверов не решал проблему — расходы росли, а стабильность оставалась на прежнем уровне. Я решил пересмотреть конфигурацию Nginx. Мы внедрили микрокеширование, оптимизировали буферизацию и настроили пул воркеров PHP-FPM с правильными лимитами. Ключевые изменения включали настройку параметров worker_processes и worker_connections под наше железо, а также тонкую настройку keepalive_timeout и client_max_body_size. Результат превзошел ожидания — время отклика сервера сократилось на 78%, а количество одновременных подключений, которые система могла обрабатывать без деградации, выросло в 3,5 раза. При этом нам удалось сократить количество используемых серверов на 40%. Правильная настройка Nginx может стать настоящим спасением для высоконагруженных проектов и существенно сэкономить бюджет на инфраструктуру.

Файловая структура конфигурации Nginx в Ubuntu выглядит следующим образом:

  • /etc/nginx/nginx.conf — главный конфигурационный файл
  • /etc/nginx/conf.d/ — директория для пользовательских конфигураций (файлы с расширением .conf)
  • /etc/nginx/sites-available/ — конфигурации доступных сайтов
  • /etc/nginx/sites-enabled/ — символические ссылки на активные конфигурации из sites-available
  • /var/log/nginx/ — директория с логами (access.log и error.log)

Основной файл конфигурации /etc/nginx/nginx.conf содержит глобальные настройки, которые влияют на работу всего сервера. Давайте рассмотрим основные директивы и их оптимальные значения:

sudo nano /etc/nginx/nginx.conf

Основные блоки и директивы:

  • user nginx; — пользователь, от имени которого запускается процесс Nginx
  • worker_processes auto; — количество рабочих процессов (оптимально установить равным количеству ядер процессора)
  • worker_connections 1024; — максимальное количество одновременных соединений для каждого рабочего процесса
  • keepalive_timeout 65; — время в секундах, в течение которого соединение с клиентом остается открытым
  • gzip on; — включение сжатия gzip для уменьшения размера передаваемых данных

Теперь рассмотрим настройку Nginx для различных сценариев использования.

Сценарий 1: Статический веб-сайт

Для обслуживания статического контента Nginx очень эффективен. Создадим конфигурацию для статического сайта:

sudo nano /etc/nginx/conf.d/static-site.conf

Вставьте следующую конфигурацию:

server { listen 80; server_name example.com www.example.com; root /var/www/html/static-site; index index.html; location / { try_files $uri $uri/ =404; } # Кеширование статических файлов location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; add_header Cache-Control "public, no-transform"; } }

Сценарий 2: Прокси для бэкенда (Node.js, Python, PHP)

Nginx часто используется как обратный прокси для приложений, работающих на других портах или серверах:

sudo nano /etc/nginx/conf.d/nodejs-app.conf

Вставьте следующую конфигурацию:

server { listen 80; server_name api.example.com; location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }

Сценарий 3: PHP-приложение с PHP-FPM

Для PHP-приложений, таких как WordPress, Laravel или Symfony, используйте такую конфигурацию:

sudo nano /etc/nginx/conf.d/php-app.conf

Вставьте следующую конфигурацию:

server { listen 80; server_name php-app.example.com; root /var/www/html/php-app; index index.php index.html; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; } location ~ /\.ht { deny all; } }

Сценарий 4: Балансировка нагрузки

Nginx может распределять нагрузку между несколькими серверами:

sudo nano /etc/nginx/conf.d/load-balancer.conf

Вставьте следующую конфигурацию:

upstream backend_servers { server backend1.example.com weight=3; server backend2.example.com weight=2; server backend3.example.com backup; } server { listen 80; server_name loadbalancer.example.com; location / { proxy_pass http://backend_servers; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }

После внесения изменений в конфигурацию всегда проверяйте синтаксис перед применением:

sudo nginx -t

Если проверка прошла успешно, примените новую конфигурацию:

sudo systemctl reload nginx

Эти конфигурации можно комбинировать и адаптировать под конкретные потребности вашего проекта. 🔧

Создание и управление виртуальными хостами в Nginx

Виртуальные хосты в Nginx позволяют обслуживать несколько доменов на одном сервере, что делает его идеальным для хостинг-провайдеров или компаний с несколькими проектами. В терминологии Nginx виртуальные хосты представлены блоками server в конфигурационных файлах. 🌐

В отличие от Apache, где виртуальные хосты часто называются "VirtualHost", в Nginx они обычно называются "server blocks" (серверные блоки). Функционально они выполняют ту же роль — позволяют хостить множество веб-сайтов на одном физическом сервере.

Основная структура виртуального хоста

Базовый виртуальный хост в Nginx имеет следующую структуру:

server { listen 80; server_name example.com www.example.com; root /var/www/example.com; index index.html; location / { try_files $uri $uri/ =404; } }

Давайте рассмотрим каждую директиву:

  • server — начинает блок конфигурации виртуального хоста
  • listen — указывает IP-адрес и порт, на котором сервер будет слушать запросы
  • server_name — определяет доменные имена, которые обслуживает данный виртуальный хост
  • root — корневая директория с файлами сайта
  • index — индексные файлы, которые будут искаться по порядку
  • location — блок, определяющий, как обрабатывать запросы к определенным URI

Создание нового виртуального хоста

Для создания нового виртуального хоста выполните следующие шаги:

1. Создайте директорию для файлов сайта:

sudo mkdir -p /var/www/example.com/public_html

2. Установите правильные права доступа:

sudo chown -R $USER:$USER /var/www/example.com sudo chmod -R 755 /var/www/example.com

3. Создайте тестовую страницу:

nano /var/www/example.com/public_html/index.html

Добавьте базовый HTML-код:

<!DOCTYPE html> <html> <head> <title>Welcome to example.com!</title> </head> <body> <h1>Success! The example.com virtual host is working!</h1> </body> </html>

4. Создайте файл конфигурации виртуального хоста:

sudo nano /etc/nginx/sites-available/example.com

Вставьте следующую конфигурацию:

server { listen 80; listen [::]:80; server_name example.com www.example.com; root /var/www/example.com/public_html; index index.html index.htm index.php; location / { try_files $uri $uri/ =404; } # Дополнительные настройки для PHP, если необходимо location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; } # Запрет доступа к .htaccess файлам location ~ /\.ht { deny all; } }

5. Активируйте виртуальный хост, создав символическую ссылку:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

6. Проверьте конфигурацию на ошибки:

sudo nginx -t

7. Если проверка прошла успешно, перезагрузите Nginx:

sudo systemctl reload nginx

Управление виртуальными хостами

Вот основные операции по управлению виртуальными хостами в Nginx:

Операция Команда/Действие Описание
Создание sudo nano /etc/nginx/sites-available/domain.com Создание файла конфигурации
Активация sudo ln -s /etc/nginx/sites-available/domain.com /etc/nginx/sites-enabled/ Создание символической ссылки для активации
Деактивация sudo rm /etc/nginx/sites-enabled/domain.com Удаление символической ссылки
Удаление sudo rm /etc/nginx/sites-available/domain.com sudo rm /etc/nginx/sites-enabled/domain.com Полное удаление конфигурации
Редактирование sudo nano /etc/nginx/sites-available/domain.com Изменение конфигурации
Применение изменений sudo nginx -t && sudo systemctl reload nginx Проверка и применение новой конфигурации

Типовые конфигурации виртуальных хостов

1. Виртуальный хост с SSL (HTTPS)

server { listen 80; server_name secure-example.com; # Перенаправление на HTTPS return 301 https://$host$request_uri; } server { listen 443 ssl; server_name secure-example.com; ssl_certificate /etc/letsencrypt/live/secure-example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/secure-example.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384; root /var/www/secure-example.com/public_html; index index.html; location / { try_files $uri $uri/ =404; } }

2. Поддомен для API

server { listen 80; server_name api.example.com; location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }

3. Поддомен для статических файлов (CDN)

server { listen 80; server_name static.example.com; root /var/www/static-content; location / { try_files $uri =404; } location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; add_header Cache-Control "public, no-transform"; access_log off; log_not_found off; } }

Управление виртуальными хостами в Nginx дает гибкость и возможность эффективно обслуживать множество сайтов на одном сервере. При этом каждый сайт может иметь свои уникальные настройки, оптимизированные под конкретные требования. 🚀

Безопасность и оптимизация производительности Nginx

Безопасность и производительность — два ключевых аспекта, которые определяют качество работы веб-сервера. Nginx предоставляет широкие возможности для усиления безопасности и оптимизации скорости работы. Рассмотрим основные рекомендации и настройки для достижения максимальной защиты и производительности. 🔒

Базовые настройки безопасности

1. Скрытие версии Nginx и информации о сервере

По умолчанию Nginx отправляет в заголовках HTTP информацию о своей версии, что может быть использовано злоумышленниками. Отключите это в файле /etc/nginx/nginx.conf:

http { # Другие настройки server_tokens off; }

2. Настройка SSL/TLS

Используйте современные протоколы и шифры для HTTPS:

server { # Другие настройки ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_session_tickets off; ssl_stapling on; ssl_stapling_verify on; # Добавьте HSTS для дополнительной защиты add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; }

3. Защита от распространенных атак

Добавьте защиту от XSS, clickjacking и MIME-sniffing:

server { # Другие настройки add_header X-Content-Type-Options "nosniff" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-XSS-Protection "1; mode=block" always; add_header Content-Security-Policy "default-src 'self';" always; }

4. Ограничение скорости запросов (rate limiting)

Защита от DDoS-атак и брутфорс-атак:

http { # Другие настройки limit_req_zone $binary_remote_addr zone=login:10m rate=1r/s; server { # Другие настройки # Ограничение для страницы входа location /login { limit_req zone=login burst=5 nodelay; # Другие настройки } } }

5. Настройка файрвола и защита от злоумышленников

Блокировка потенциально опасных запросов:

server { # Другие настройки # Блокировка доступа к скрытым файлам location ~ /\. { deny all; access_log off; log_not_found off; } # Блокировка выполнения скриптов в директориях загрузки location ~* ^/uploads/.*\.(php|pl|py|jsp|asp|sh|cgi)$ { deny all; } }

Оптимизация производительности

1. Настройка буферов и таймаутов

http { # Оптимизация буферов client_body_buffer_size 10K; client_header_buffer_size 1k; client_max_body_size 8m; large_client_header_buffers 4 4k; # Оптимизация таймаутов client_body_timeout 12; client_header_timeout 12; keepalive_timeout 15; send_timeout 10; }

2. Настройка сжатия gzip

Сжатие значительно уменьшает размер передаваемых данных:

http { # Настройки gzip gzip on; gzip_vary on; gzip_min_length 1000; gzip_comp_level 6; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; }

3. Кеширование контента

Настройка кеширования статических файлов:

server { # Другие настройки # Кеширование статических файлов location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; add_header Cache-Control "public, no-transform"; } # Кеширование для шрифтов location ~* \.(woff|woff2|ttf|otf|eot|svg)$ { expires 30d; add_header Cache-Control "public, no-transform"; } }

4. Микрокеширование для динамического контента

Если ваш сайт генерирует много динамического контента, который меняется не слишком часто, используйте микрокеширование:

http { # Настройка кеша fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=MYAPP:100m inactive=60m; fastcgi_cache_key "$scheme$request_method$host$request_uri"; server { # Другие настройки location ~ \.php$ { # Включение кеширования для PHP fastcgi_cache MYAPP; fastcgi_cache_valid 200 60m; fastcgi_cache_use_stale error timeout invalid_header updating http_500; # Другие настройки FastCGI } } }

5. Оптимизация воркеров

Настройка рабочих процессов в соответствии с ресурсами сервера:

user nginx; # Установите в соответствии с количеством ядер CPU worker_processes auto; worker_rlimit_nofile 65535; events { # Максимальное количество соединений на рабочий процесс worker_connections 1024; multi_accept on; use epoll; }

6. Мониторинг и логирование

Настройте эффективное логирование для анализа производительности:

http { # Формат логов с временем ответа и upstream log_format detailed '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" ' '$request_time $upstream_response_time $pipe'; access_log /var/log/nginx/access.log detailed buffer=32k flush=5s; # Для высоконагруженных серверов можно отключить access_log для статики server { # Другие настройки location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { access_log off; # Другие настройки } } }

Применение этих настроек должно происходить постепенно, с тестированием каждого изменения. Не копируйте все настройки сразу — адаптируйте их под конкретные потребности вашего проекта и характеристики сервера. 🔧

Регулярно проводите тестирование безопасности и производительности, используя инструменты вроде:

  • SSL Labs — для проверки безопасности SSL/TLS
  • PageSpeed Insights — для анализа скорости загрузки
  • OWASP ZAP — для тестирования безопасности
  • Apache Benchmark (ab) или wrk — для нагрузочного тестирования

С правильно настроенным Nginx ваш сервер будет не только быстрым, но и хорошо защищенным от большинства современных угроз. 💪


Установка и настройка Nginx на Ubuntu — это не просто технический процесс, а искусство балансирования между безопасностью, производительностью и функциональностью. Пройдя от базовой установки до тонкой настройки виртуальных хостов и оптимизации производительности, вы теперь владеете всеми необходимыми инструментами для создания надежной серверной инфраструктуры. Помните, что правильно настроенный Nginx может кардинально улучшить работу вашего веб-проекта, сократить расходы на инфраструктуру и обеспечить отличный пользовательский опыт. Не бойтесь экспериментировать с настройками, но всегда проверяйте конфигурацию перед применением и делайте резервные копии работающих конфигураций.




Комментарии

Познакомьтесь со школой бесплатно

На вводном уроке с методистом

  1. Покажем платформу и ответим на вопросы
  2. Определим уровень и подберём курс
  3. Расскажем, как 
    проходят занятия

Оставляя заявку, вы принимаете условия соглашения об обработке персональных данных