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