Начало работы с 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/