Если вы только купили сервер:
Подключитесь к серверу
Выполните подготовку сервера к работе
Nginx есть в официальных репозиториях Ubuntu, поэтому достаточно выполнить команду
sudo apt update
sudo apt install nginx -y
apt update обновляет список пакетов, чтобы система точно знала, где взять актуальную версию.
Подробнее про apt: Как установить и удалить программу в Linux через терминал
После установки Nginx сразу запускается как сервис, поэтому дополнительно включать его не нужно.
sudo systemctl status nginx
Если увидите статус “active (running)”, то всё в порядке. Если нет, то ниже можно прочитать, что делать в ситуации.
Подробнее о systemctl можно узнать из статьи: Как перезапустить сервис в Linux
Чтобы сервер принимал запросы, нужно разрешить 80-й порт (HTTP).
sudo ufw allow 'Nginx HTTP'
UFW - это встроенный файрвол Ubuntu. Если у вас другой, то нужно открыть порт способом, который поддерживает ваш файрвол.
Про ufw: Защита сервера на Ubuntu или Debian с помощью ufw
iptables: Как открыть или закрыть порт в iptables
Если файрвола нет, то не нужно ничего делать
Nginx использует структуру каталогов.
Давайте разберём её:
/etc/nginx/nginx.conf - главный конфиг/etc/nginx/sites-available/ - здесь лежат конфигурации сайтов/etc/nginx/sites-enabled/ - здесь находятся активированные конфиги (симлинки).Такой подход позволяет хранить десятки конфигов и включать их по мере необходимости.
Предположим, ваш домен - example.com.
Вместо домена можно указать и ip адрес, но это подойдет только для тестов и разработки.
sudo nano /etc/nginx/sites-available/example.com
Как работать с nano писали в статье: Основы работы с редактором nano: команды, сохранение, выход
Если в дальнейшем планируется размещение нескольких сайтов, то на каждый сайт должен быть такой файл конфигурации.
На одном VDS с одним ip-адресом можно разместить несколько сайтов, количество не ограничено.
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
server_name говорит Nginx, для какого домена применять настройки.root - папка с файлами сайта.try_files проверяет наличие страниц и защищает от лишних ошибок.
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
Если увидите syntax is ok - можно перезагружать:
sudo systemctl reload nginx
reload мягко применяет изменения без остановки сервиса. Так сайты не "падают"
Если её нет, создаём:
sudo mkdir -p /var/www/example.com
sudo nano /var/www/example.com/index.html
Простейшая страница:
<h1>Hello</h1>
Так вы убедитесь, что конфигурация настроена правильно, прежде чем выкатывать настоящий проект.
На данный момент при переходе на домен или ip, который указан в конфиге в браузере вы увидите вашу страницу
Два основных файла:
/var/log/nginx/access.log - запросы/var/log/nginx/error.log - ошибкиЧтобы видеть ошибки в реальном времени:
tail -f /var/log/nginx/error.log
В 80% случаев там сразу видно причину.
Где и как смотреть логи в Linux - команды journalctl, tail и logrotate
Устанавливаем certbot:
sudo apt install certbot python3-certbot-nginx -y
Получаем сертификат:
sudo certbot --nginx -d example.com -d www.example.com
Certbot автоматически обновляет конфиги Nginx и создает задачу обновления сертификатов.
Если вдруг сертификат не обновится - certbot пришлёт письмо на почту, которую вы укажете.
Проверить обновление можно так:
sudo certbot renew --dry-run
Если тест прошёл - всё настроено правильно.
Вот короткий чек-лист, который я использую сам:
sudo nginx -t
tail -f /var/log/nginx/error.log
sudo lsof -i :80
Чаще всего порт занят другим сервисом, например, Apache. В этом нет ничего страшного, просто остановите то, что вам не нужно. или смените порт на нестандартный.
1. Быстрый перезапуск Nginx без падений
sudo systemctl reload nginx
2. Быстро проверить, что конфиг корректный
nginx -t
3. Сжать ответы и ускорить сайт
Добавьте в /etc/nginx/nginx.conf:
gzip on;
gzip_types text/plain text/css application/json application/javascript;
4. Увеличить скорость отдачи статических файлов
В блоке server:
location ~* \.(jpg|jpeg|png|css|js|ico)$ {
expires max;
access_log off;
}