Lab / Nginx

Начало работы с NGINX

Целью данной заметки стало обобщить полученную из многочисленных источников информацию о том как начать работу с nginx. Что-ж попытаемся сделать наши первые шаги и не свалить сервер =) Давайте сразу без прилюдий установим NIGINX в вашу убунту. Поочерёдно выполняем следующие команды в терминале:
sudo apt-get update
sudo apt-get install nginx
После этих простых действий на вашем ip или основном домене появится приветствие от nginx. Поздравляю, вы это сделали, ваш сервер получил самую быструю и современную версию веб сервера. По умолчанию у нас есть всего один хост (сайт) и он лежит в папке: /usr/share/nginx/html. Если у вас будет всего один сайт на сервере, то на этом можно закончить настройку виртуального сервера. Далее вам просто необходимо будет залить все необходимые фалы в данную дерикторию и наслаждаться жизнью.

Привязка доменов к дерикториям

Для тех же, кто не готов ограничится одним только доменом и хочет захостить на своём сервере несколько сайтов приглашаю продолжить ковыряться в nginx. Давайте для начала создадим папки для будущих сайтов, например для site1.com и site2.com В большинстве систем принято размещать все сайты в директории /var/www/ вы можете следовать этой логике. Разница с моим примером будет только в вписании этого пути в конфиги. Я же, переодически работая с node.js в терминале моего мака привык, что проекты хранятся в домашней директории моего юзера в папке projects, в нашем случае ради семантичности - буду использовать директорию www. Плюсом такого подхода будет то, что создав в системе юзера и заходя под ним на ftp вы по умолчанию попадаете в его домашнюю директорию, где нас и будет поджидать та самая папочка www со всеми нашими сайтами. И так приступим, создаём папки сайтов:
sudo mkdir -p /home/user/www/site1.com/public
sudo mkdir -p /home/user/www/site2.com/public
Флаг -р ставим для того, что бы создавалась иерархия каталогов по указанному пути. Теперь давайте зададим правильные права на корневой каталог следующей командой:
sudo chmod -R 755 /home/user/www
Теперь давайте расскажем nginx'у что вы создали новый хост и привяжем к данному хосту домен. Сделаем мы это на примере стандартного хоста, для начала просто скопируем его и в имя вставим ваш домен:
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/site1.com
Где user это имя вашего юзера у меня это ubuntu созданный амазоном по умолчанию. Далее внесём правки в этот документ с указанием расположения папки для этого домена.
sudo vi /etc/nginx/sites-available/site1.com
Очищенный от комментов файл будет выглядеть следующим образом:
server {
 listen 80;
 listen [::]:80;

 root /home/user/www/example.com/public;
 index index.html index.htm;

 server_name site1.com www.site1.com;

 location / {
 try_files $uri $uri/ =404;
 }
}
Обратите внимание, здесь не подключени ни php ни другие языки разработки, вы можете задать их как глобально для всех сайтов, так и вписывать здесь-же для каждого сайта отдельно. Таким образом один сайт может спокойно работать на новой версии php7 а другой ветеран на своём php5 или вообще на node.js Конечную директорию я тоже не просто так изменил со стандартного html на public. Таким образом я заложил возможность в дальнейшем без бубна закинуть Laravel в корневую директорию сайта и быстро приступить к разработке без дополнительной настройки окружения. Теперь создадим симлинк на новый виртуальный хост:
sudo ln -s /etc/nginx/sites-available/site1.com /etc/nginx/sites-enabled/
Теперь давайте изменим лимит на длину доменов, если у вас подразумеваются длинные домены или домены третьего уровня, отредактируем файл:
sudo nano /etc/nginx/nginx.conf
Необходимо найти и раскоментировать следующую строку (если по умолчанию там 32, замените на 64):
server_names_hash_bucket_size: 64;
Всё! Второй сайт делаем по точной аналогии. Затем перезагружаем nginx.
sudo service nginx restart
Далее я буду пополнять заметку интересными настройками и командами для nginx. Заметка будет обновляться по мере появления новых задач в моей практике.

Направить ip сервера на папку

Если вы не хотите что бы при вводе IP адреса открывался какой либо из сайтов, вы можете отправить IP на заглушку.
root /var/www/example.com/public;

Склейка доменов в NGINX

Этот простой код склеивает ваши домены переадресуя весь трафик на домен без WWW
if ($host ~* ^www\.(.+)$) {
 set $newhost $1;
 rewrite ^ http://$newhost$request_uri permanent;
}

Присвоить права текущему пользователю на каталог

Иногда некий системный каталог нужно дать на запись вашему пользователю, проще говоря передать ему в собственность. Выполняется простой командой:
sudo chown -R $USER:$USER /var/www/