Подготовим nginx к получению сертификатов
В общем случае для получения сертификата необходимо во всех блоках server добавить следующий блок до других блоков location:
Понятно, что вписывать для каждого сайта такой блок явно — это моветон, потому создадим файл /etc/nginx/acme с содержанием блока выше.
Затем для каждого домена и поддомена, для которых нужно получить сертификаты, в блоке server перед всеми блоками location укажем:
Хосты-редиректоры (например, с голого домена на www) можно пропустить. ACME сервер обязан учитывать стандартную переадресацию. Подробней об этом ниже.
Перезагрузим nginx и проверим что наш тестовый файл виден:
Создаем свой VPN-сервер
Эта настройка сводится всего к нескольким шагам. От собственного VPN-сервера вас отделяет одна команда в терминале.
Шаг 1. В левом нижнем углу тапните по пиктограмме (а-ля меню Пуск в Windows). Выберите System Tools —> LXTerminal. В открывшемся терминале введите следующую команду (будьте внимательны):
Примечание: в команде указано -O (анлийская буква «O», не ноль).
Нажимайте Enter и ждите пару минут, пока окончится установка.
Шаг 2. В конце вы получите сообщение со всеми данными собственного VPN-сервера. ОБЯЗАТЕЛЬНО сохраните эти данные, запишите их и скопируйте в несколько потайных мест, чтобы потом не искать.
Все, VPN-сервер запущен. Теперь можно смело подключать его на любых устройствах.
5: Настройка виртуального хоста
На веб-сервере Nginx можно использовать виртуальные хосты (в контексте Nginx они называются блоками server) для изоляции настроек и размещения нескольких доменов на одном сервере. Здесь мы используем условный домен your_domain.com, но вы должны заменить его собственным доменом.
В Ubuntu 20.04 Nginx по умолчанию предоставляет один включенный виртуальный хост, который обслуживает каталог /var/www/html. Этого хватит для работы одного сайта, но если вы хотите разместить несколько сайтов, вам нужно создать новые виртуальные хосты. Создайте структуру каталогов в /var/www для сайта your_domain.com, а /var/www/html оставьте как каталог по умолчанию, который будет обслуживаться, если запрос клиента не соответствует другим сайтам.
Создайте каталог your_domain.com, используйте опцию -p для создания всех необходимых родительских каталогов:
Затем установите права на каталог с помощью переменной $USER:
Права должны быть установлены верно, если вы не поменяли unmask, но на всякий случай вы можете ввести такую команду:
Затем создайте образец страницы index.html с помощью nano или другого редактора:
Сохраните и закройте файл.
Чтобы Nginx смог обслуживать этот контент, необходимо создать файл виртуального хоста с правильным набором директив. Вместо того чтобы напрямую изменять конфигурации по умолчанию, создайте новый файл /etc/nginx/sites-available/your_domain.com.
Вставьте в файл следующие конфигурации. Они похожи на конфигурации по умолчанию, но содержат правильный домен и каталог:
Обратите внимание, что root содержит путь к новому каталогу, а server_name – новый домен. Сохраните и закройте файл
Сохраните и закройте файл.
Включите файл, создав симлинк в каталоге sites-enabled:
Теперь у вас есть два виртуальных хоста, которые будут обслуживать запросы клиентов на основе директив listen и server_name:
- your_domain будет обслуживать запросы для www.your_domain и your_domain.
- default будет отвечать на запросы по порту 80, если они не соответствуют остальным виртуальным хостам.
Чтобы избежать проблем с памятью, которые могут возникнуть в результате настройки дополнительных имен серверов, необходимо отредактировать одно значение в файле /etc/nginx/nginx.conf. Откройте файл:
Найдите строку server_names_hash_bucket_size и раскомментируйте ее, удалив символ #:
Сохраните и закройте файл.
Проверьте ошибки в конфигурационном файле Nginx:
Перезапустите Nginx, чтобы новые параметры вступили в силу:
Теперь Nginx обслуживает домен вашего сайта. Чтобы убедиться в этом, откройте ссылку http://your_domain в браузере.
Распределяйте прибыль правильно
При запуске бизнеса желательно обратиться к юристам. Они помогут определиться с организационно-правовой формой предпринимательской деятельности – ИП или ООО (о выборе организационно-правовой формы и системы налогообложения читайте в статье «Бизнес с нуля – после пандемии»), а также прописать договоренности с партнерами, контрагентами и клиентами.
Например, не все начинающие предприниматели знают, что, имея внешние инвестиции, лучше регистрировать свой проект под ООО. Хотя стартовать дешевле с регистрации в качестве самозанятого или ИП. Для последующего развития можно взять заемные деньги в банке без привлечения инвесторов. Для последних соглашение с ИП – это риск, так как нет гарантированного распределения долей. Потому подобные вопросы всегда решаются на базе планируемой капитализации предприятия.
1. Установка Nginx
В официальных репозиториях CentOS есть Nginx и он, скорее всего, уже установлен в вашей системе. Но мы хотим чтобы сайт работал по протоколу http2, который позволяет передавать все данные одним подключением, а это увеличивает производительность. Для работы по http2 вам понадобиться настроить SSL сертификат, но об этом уже написано в статье получение сертификата Lets Encrypt Nginx. Но это еще не все. для переключения с обычного SSL на HTTP2.0 в большинстве браузеров сейчас используется протокол ALPN, а он поддерживается начиная с OpenSSL 1.02. В то время, как в репозиториях есть только OpenSSL 1.01. Поэтому нам нужно установить версию Nginx, собранную с OpenSSL 1.02. Для этого можно использовать Broken Repo:
Если вы используете репозиторий EPEL, то нужно указать что не надо из него брать Nginx:
Теперь для установки правильной версии Nginx достаточно набрать:
Будет установлена самая последняя версия Nginx 1.13.2, с полной поддержкой ALPN. Дальше перейдем к настройке.
Установка NGINX
Для тюнинга установка из пакетов или портов не подходит. Лучше всего выполнять сборку и установку из исходников.
Скачайте последнюю стабильную версию nginx (актуальную ссылку можно посмотреть по адресу http://nginx.org/ru/download.html):
… и с помощью данной ссылки скачиваем исходник.
а) во FreeBSD:
fetch http://nginx.org/download/nginx-1.16.1.tar.gz
б) в Linux:
wget http://nginx.org/download/nginx-1.16.1.tar.gz
* На момент обновления статьи актуальная версия nginx — 1.16.1.
Распакуйте скачанный архив и сразу удалите его, чтобы не мешался:
tar -xvf nginx-*.tar.gz && \rm nginx-*.tar.gz
И перейдите в распакованную директорию:
cd nginx-*
Сконфигурируйте исходники для установки:
а) для FreeBSD:
Сначала устанавливаем пакеты, необходимые для сборки:
pkg install pcre
Приступаем к конфигурированию:
./configure \
—prefix=/usr/local/etc/nginx \
—with-cc-opt=’-I /usr/local/include’ \
—with-ld-opt=’-L /usr/local/lib’ \
—conf-path=/usr/local/etc/nginx/nginx.conf \
—sbin-path=/usr/local/sbin/nginx \
—pid-path=/var/run/nginx.pid \
—error-log-path=/var/log/nginx-error.log \
—user=www \
—group=www \
—http-client-body-temp-path=/var/tmp/nginx/client_body_temp \
—http-fastcgi-temp-path=/var/tmp/nginx/fastcgi_temp \
—http-proxy-temp-path=/var/tmp/nginx/proxy_temp \
—http-scgi-temp-path=/var/tmp/nginx/scgi_temp \
—http-uwsgi-temp-path=/var/tmp/nginx/uwsgi_temp \
—http-log-path=/var/log/nginx-access.log \
—with-http_ssl_module \
—with-file-aio \
—with-pcre \
—with-http_stub_status_module \
—without-http_charset_module \
—without-http_ssi_module \
—without-http_userid_module \
—without-http_autoindex_module \
—without-http_geo_module \
—without-http_map_module \
—without-http_split_clients_module \
—without-http_referer_module \
—without-http_empty_gif_module \
—without-http_browser_module \
—without-http_upstream_hash_module \
—without-http_upstream_ip_hash_module \
—without-http_upstream_least_conn_module \
—without-http_upstream_keepalive_module \
—without-mail_pop3_module \
—without-mail_imap_module \
—without-mail_smtp_module
а) для CentOS:
Сначала устанавливаем пакеты, необходимые для сборки:
yum install gcc pcre-devel openssl-devel make
Приступаем к конфигурированию:
./configure \
—prefix=/etc/nginx \
—sbin-path=/usr/sbin/nginx \
—pid-path=/var/run/nginx.pid \
—error-log-path=/var/log/nginx/error.log \
—lock-path=/var/run/nginx.lock \
—user=nginx \
—group=nginx \
—http-log-path=/var/log/nginx-access.log \
—with-http_ssl_module \
—with-file-aio \
—with-pcre \
—with-http_stub_status_module \
—without-http_charset_module \
—without-http_ssi_module \
—without-http_userid_module \
—without-http_autoindex_module \
—without-http_geo_module \
—without-http_map_module \
—without-http_split_clients_module \
—without-http_referer_module \
—without-http_empty_gif_module \
—without-http_browser_module \
—without-http_upstream_hash_module \
—without-http_upstream_ip_hash_module \
—without-http_upstream_least_conn_module \
—without-http_upstream_keepalive_module \
—without-mail_pop3_module \
—without-mail_imap_module \
—without-mail_smtp_module
* Данный список опций подойдет для большинства серверов, но не помешает узнать о всех возможностях при помощи команды ./configure —help
Теперь запустите сборку дистрибутива из исходника:
make
И установите nginx:
make install
Теперь можно запустить и проверить наш веб-сервер.
а) во FreeBSD необходимо разрешить запуск демона nginx:
echo ‘nginx_enable=»YES»‘ >> /etc/rc.conf
service nginx start
б) в CentOS действий больше.
Создаем учетную запись nginx и в качестве владельца каталога для его настроек:
useradd nginx
chown -R nginx:nginx /etc/nginx
Создаем юнит для systemd:
vi /etc/systemd/system/nginx.service
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
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/conf/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
Restart=on-failure
WantedBy=multi-user.target
Применяем изменения в systemd:
systemctl daemon-reload
Разрешаем автозапуск сервиса и стартуем его:
systemctl enable nginx
systemctl start nginx
Подключаемся к удаленному рабочему столу
Помните в начале инструкции я говорил, что благодаря облачному серверу вы получите доступ к удаленному компьютеру? Что ж, пора заняться этим.
Итак, несмотря на то, что у нас дистрибутив Ubuntu Virtual Desktop, нам вполне подойдет утилита от Microsoft.
Речь идет о RDP-клиенте Microsoft Remote Desktop 8.0, с помощью которого вы сможете подключиться к облачному компьютеру. Распространяется утилита бесплатно и доступна для macOS, iOS и Android. Короче, универсальное и доступное решение.
Шаг 1. В Mac App Store загружаем Microsoft Remote Desktop 8.0.
Шаг 2. Запускаем утилиту и проводим несложные настройки.
Сперва выбираете New и заполняете соответствующие поля, как расписано на скриншоте ниже.
Запускаете соединение и через пару секунд видите рабочий стол операционной системы Ubuntu Virtual Desktop.
Остается заключительный этап – создание собственного VPN.
Приоритеты
При настройке бэкендов мы можем указать, кому наш веб-сервер будет отдавать больше предпочтение, а кому меньше.
Синтаксис при указании веса:
server <имя сервера> weight=<числовой эквивалент веса>;
По умолчанию приоритет равен 1.
Также мы можем указать опции:
- backup, которая будет говорить о наличие резервного сервера, к которому будет выполняться подключение только при отсутствии связи с остальными.
- down, при указании которой, сервер будет считаться постоянно недоступным. Может оказаться полезной, чтобы остановить временно запросы для проведения обслуживания.
Давайте немного преобразуем нашу настройку upstreams:
vi /etc/nginx/conf.d/upstreams.conf
upstream dmosk_backend {
server 192.168.10.10 weight=100;
server 192.168.10.11 weight=10;
server 192.168.10.12;
server 192.168.10.13 backup;
}
* итак, мы указали нашему серверу:
- переводить на сервер 192.168.10.10 в 10 раз больше запросов, чем на 192.168.10.11 и в 100 раз больше — чем на 192.168.10.12.
- переводить на сервер 192.168.10.11 в 10 раз больше запросов, чем на 192.168.10.12.
- на сервер 192.168.10.13 запросы переводятся, только если не доступны все три сервера.
Оптимизация системы
Первая программа, которая нам потребуется – Auslogics BoostSpeed Premium (скачать можно на любом торрент-трекере). Программа очищает диск от ненужных файлов, дефрагментирует реестр, удаляет лишний мусор.
Устанавливается программа, как и любая другая для Windows, ничего сложного. В 9 версии сразу после запуска исполняемого файла начинается установка программы в каталог по-умолчанию – дополнительно ничего подтверждать не нужно. Принципиальной же разницы между новыми и старыми версиями нет, суть одна и та же. Это во-первых, очищение компьютера от мусора и, во-вторых, небольшая оптимизация в реальном времени.
При запуске программы осуществляется автоматическая проверка. Программа выдает оценку состояния системы (все плохо) и определяет, сколько и чего можно удалить. Чтобы исправить обнаруженные проблемы, нажимайте “Исправить все” (Repair all).
Программа ударяет сразу по трем фронтам: размер диска, стабильность работы и скорость ПК. Если вы захотите перезапустить проверку компьютера, это можно сделать с вкладки “Диагностика” (Diagnostics). Благо, делать это нужно не так часто – программа сама проводит анализ и напоминает о необходимости проверки примерно раз в неделю.
После сворачивания программы в трей, она будет продолжать работать над оптимизацией оперативной памяти, в чем можно убедиться, зайдя на вкладку “Ускорение” (Live Speedup). Справа от графика загрузки памяти можно включать/отключать дополнительные настройки ускорения, такие как: оптимизация памяти, оптимизация работы процессора, автоматическая дефрагментация и оптимизация сервисов.
Помимо основных функций программы, много полезных утилит содержит вкладка “Инструменты” (All Tools). Здесь расположен список вспомогательных инструментов для оптимизации работы системы.
- Disk Defrag – инструмент для дефрагментации диска. Данная операция может чуть-чуть ускорить работу жесткого диска.
- Internet Optimizer – оптимизация интернет соединения. Использовать данную функцию на VPS-сервере не стоит. Если вы не знаете, какое там интернет соединение, можно сделать только хуже.
- Registry Cleaner – очистка системного реестра. Слишком часто чистку проводить не нужно, но периодические проверки не помешают.
- Registry Defrag – дефрагментация реестра тоже позволяет немного увеличить производительность компьютера, но делать это особо часто также не нужно. Большинству пользователей периодичности раз в полгода будет вполне достаточно.
- Unistall Manager – менеджер удаления приложений. Если какая-либо программа не удаляется полностью, либо оставляет за собой кучу мусора, данный инструмент поможет полностью очистить ее с компьютера.
- Tweak Manager – здесь есть возможность оптимизации визуального интерфейса для достижения максимального быстродействия: визуальные эффекты, задержка на появление подменю, анимации и сглаживание шрифтов. Чтобы не настраивать все вручную, нажмите “Оптимизация” (Optimize) внизу окна и, когда программа выставит нужные галочки, нажмите “Применить” (Apply). Кроме визуального интерфейса, есть возможность оптимизации загрузки системы (Startup and Shutdown), но, как правило, сервер постоянно находится в рабочем режиме и перезагружать его нужно не так часто.
Шаг 6 — Настройка блоков сервера (опция)
Если вы хотите разместить несколько сайтов на одном и том же веб-сервере Nginx, вам придется создать блоки сервера. Блоки сервера Nginx работают аналогичным с виртуальными хостами Apache образом, позволяя одному серверу реагировать на запросы к нескольким доменным именам и предоставлять разное содержимое для каждого домена. В CentOS 8 серверные блоки определяются в файлах , расположенных в .
Мы создадим серверный блок для домена с именем your_domain. Чтобы узнать больше о настройке доменного имени с помощью DigitalOcean, пройдите наше обучающее руководство Введение в DigitalOcean DNS.
Создайте директорию для your_domain следующим образом, используя флаг для создания необходимых родительских каталогов:
Затем необходимо назначить права владения для директории с помощью переменной среды которая будет использоваться для текущего системного пользователя:
Затем мы создадим образец страницы для тестирования конфигурации блока сервера. Предоставляемый с CentOS 8 по умолчанию текстовый редактор — . очень мощный текстовый редактор, но освоить работу с ним неопытным пользователям достаточно сложно. Вы можете установить более удобный для пользователя редактор, например, , для облегчения редактирования файлов конфигурации на сервере CentOS 8:
Теперь вы можете использовать для создания файла
В этом файле добавьте следующий код HTML:
/var/www/your_domain/html/index.html
Сохраните файл и закройте его после завершения. Если вы ”“”.
Чтобы Nginx обслуживал это содержимое, нам нужно создать серверный блок с правильными директивами, которые указывают на наш настраиваемый корневой каталог. Мы создадим новый серверный блок в :
Вставьте следующий блок конфигурации:
/etc/nginx/conf.d/your_domain.conf
Сохраните и закройте файл после внесения изменений в его содержимое.
Чтобы убедиться, что в файлах Nginx нет синтаксических ошибок, запустите следующую команду:
Если проблем нет, вы увидите на экране следующие результаты:
После тестирования конфигурации перезапустите Nginx для активации изменений:
Прежде чем вы сможете проверить изменения в браузере, вам нужно будет обновить контексты безопасности SELinux вашего сервера, чтобы позволить Nginx обслуживать содержание из директории .
Следующая команда позволит использовать ваш настраиваемый корневой каталог документов в качестве содержимого HTTP:
Теперь вы можете проверить настройку вашего пользовательского домена, перейдя на , где вы увидите примерно следующее:
Эта страница отображает код HTML, который мы задали в корневой директории документов, созданной для серверного блока. Если вы увидите эту страницу, это означает, что ваш сервер Nginx настроен корректно для обслуживания вашего домена.
Безопасность
Помимо уменьшения времени отклика веб-сервера, необходимо позаботиться о безопасности. Разберем основные http заголовки, которые могут представлять угрозу.
X-XSS-Protection
Заголовок может предотвратить некоторые XSS-атаки.
Вы можете реализовать защиту XSS, используя три варианта в зависимости от конкретной потребности.
- Это полностью отключит фильтр
- Это включает фильтр, но очищает только потенциально вредоносные скрипты
- Это включает фильтр и полностью блокирует страницу.
X-Frame-Options
Заголовок позволяет снизить уязвимость вашего сайта для clickjacking-атак. Этот заголовок служит инструкцией для браузера не загружать вашу страницу в frame/iframe. Не все браузеры поддерживают этот вариант.
Настроить X-Frame-Options можно тремя способами:
- : это полностью отключит функции iframe.
- : iframe может использоваться только кем-то из того же источника.
- : Это позволит размещать страницы в окнах iframe только с определенных URL-адресов.
X-Permitted-Cross-Domain-Policies
Аналогично механизму браузеров блокировки стороннего контента Adobe Flash имеет свой. Он регулируется файлами crossdomain.xml сайта, начиная с корневого каталога. Проблема с механизмом в том, что на любом уровне вложенности корневой регулирующий файл (политика безопасности) может быть переопределен. Чтобы избежать таких ситуаций, необходимо задать этот HTTP-заголовок.
Доступно несколько вариантов настройки:
- — никакая политика не допускается
- — разрешить только главную политику
- — все позволено
- — Разрешить только определенный тип контента. Пример — XML
- — применимо только для FTP-сервера
Strict-Transport-Security
Заголовок Strict-Transport-Security запрещает использование незащищенного HTTP соединения на сайте, если есть защищенное HTTPS.
X-Content-Type-Options
Рейтинг наиболее опасных к использованию возможностей браузера возглавляет возможность Internet Explorer «угадывать» тип файла, игнорируя его MIME-тип.
При передаче от сервера к браузеру все файлы имеют тот или иной тип, который прямо указывает на суть содержимого файла. Однако, Internet Explorer имеет встроенный механизм, который позволяет по-содержимому файла переопределить его тип.
Таким образом, обычные текстовые файлы могут быть интерпретированы как JavaScript со всеми вытекающими последствиями. Например, если у вас на сайте запрещена загрузка текстовых файлов с расширениями .js пользователями, то они могут загрузить в виде картинок текстовый файл, содержащий JavaScript-код, который может быть исполнен браузером.
Правильный сертификат
Под этим подразумевается выполнение двух условий:
- Сертификат должен быть выпущен доверенным центром.
- Сертификат должен быть выдан для домена, к которому идет подключение.
Доверенный центр
Есть список центров сертификации, внесенные в общий реестр доверенных узлов, которые могут выпускать ключи безопасности. Данным центрам по умолчанию доверяют все основные операционные системы.
Для получения сертификата от правильного центра, необходимо за него заплатить или получить бесплатно от Let’s Encrypt. Купить сертификат можно у большинства хостеров или регистраторов доменных имен. Для получения бесплатного сертификата можно воспользоваться инструкцией Получение бесплатного SSL сертификата Let’s Encrypt.
И наоборот, сертификат может быть выпущен не доверенным центром или локально на компьютере (самоподписанный). В таком случае мы получим ошибку при проверке подлинности.
Сертификат для домена
Заказывая сертификат, мы обязательно указываем, для какого доменного имени его будем использовать. Это обязательное требование. Например, если мы хотим настроить SSL-подключение к узлу security.dmosk.ru, то необходимо указывать именно это имя при заказе ключа безопасности. В противном случае, браузер будет выдавать нам ошибку, что сертификат выдан для другого узла.
Также мы можем заказать сертификат типа wildcard — он применим к домену и все его поддоменам. Например, в нашем случае мы можем заказать ключ для *.dmosk.ru — он будет применять для любого доменного имени 3-го уровня с корнем dmosk.ru.
Ошибка восьмая: неумение делегировать полномочия
«Хочешь, чтобы всё было сделано хорошо – сделай сам!», — эта фраза погубила не один стартап. Что происходит, если предприниматель считает, что лучше него никто ничего не сделает? Ему приходится самому искать и обслуживать клиентов и покупателей, договариваться с поставщиками, принимать товар, заниматься бухгалтерией, документами и прочей рутиной. Работники же все, как на подбор, медлительные, безответственные и бестолковые.
Возможно, так оно и есть, но ведь наём неподходящих сотрудников – это ошибка самого бизнесмена. Вспомните Стива Джобса: «Мы нанимаем толковых людей, чтобы они говорили, что делать нам». Бизнес невозможно построить без слаженной команды профессионалов, поэтому поиск и привлечение таких людей — одна из основных задач начинающего предпринимателя.
Определите зоны ответственности и закрепите их за сотрудниками. Часть функций, например, бухгалтерию, можно отдать на аутсорсинг. Там, где это возможно, внедряйте гибкую систему оплаты труда — небольшой фиксированный оклад и проценты за выполнение показателей (объёма продаж, оказания услуг, объёма производства). И умерьте немного свой перфекционизм — даже если что-то будет сделано не так идеально, как вам представляется, но бизнес при этом развивается, то все в порядке.