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