NGINX - создание виртуальных хостов

  • 02 августа 2017
  • 10974
0%

Помогло?

Всем привет! Сегодняшний урок посвящен теме,без которой практически невозможно начать разработку сайта - это настройка web-сервера и виртуальных хостов. В качестве операционной системе мы будем использовать Ubuntu, а web-сервера - nginx. 

Виртуальные хосты

Для начала нужно разобраться, что из себя представляет виртуальный хост. Это адресное пространство веб-сервера. Оно нужно для того, чтобы пользователь мог создавать несколько сайтов на своем сервере. Выглядит это примерно так: предположим у вас есть блог, интернет-магазин, сайт-визитка, корпоративный портал. Вы можете создать разные виртуальные хосты под каждый сайт, например: local.blog, local.shop, local.vizitka, local.korp-portal.

Установка

Сначала давайте убедимся, установлен ли у вас nginx и какой он версии. Для этого нужно ввести команду:

nginx -v

Если у вас nginx установлен, то ответ будет примерно такой:

nginx version: nginx/1.10.1

Если же ответа не последовало, то, в таком случае, его придется установить. Делается это с помощью следующей команды:

sudo apt-get install -y nginx

опцию "-y" мы используем, чтобы ответить на все вопросы "да", и установка сразу же началась.

Создание директории

Теперь нам нужно создать директорию для виртуального хоста. Это, по сути, будет как файловое хранилище для нашего сайта. Воспользуемся командой:

sudo mkdir -p /var/www/mysite.ru/public_html

Обратите внимание на ключ "-p". Это означает следующее: если нет родительской папки, то он ее создает автоматически. Название "mysite.ru" выбрано не случайно. Здесь мы используем реальное доменное имя, и в дальнейшем сможем понимать, где какой сайт находится.

Создание тестовой страницы

Нам необходимо добавить какой-нибудь файл, чтобы создать иллюзию настоящего сайта. Сформировать файл можно через редактор nano. Для этого выполним команду:

sudo nano /var/www/mysite.ru/public_html/index.php

Внутри редактора, чтобы сохранить файл, нажмите комбинацию "ctrl+o" (буква "о" Олег). Чтобы выйти "ctrl+x"

теперь наполним файл текстом, скопируйте html код:

<html>
  <head>
    <title>mysite.ru</title>
  </head>
  <body>
    <h1>Ура! Вы смогли настроить Virtual Host в nginx!</h1>
  </body>
</html>

Настройка прав

Скорее всего, после создания папок у вашего сервера не будет доступа на запись в них данных. Очень часто различные CMS или фрэймворки используют системы кэширования и логирования, которые пишут данные в файлы. Если у сервера будут проблемы с правами, то он будет выдавать ошибки, что, согласитесь, не есть хорошо. Чтобы разрешить проблему с правами, нужно поменять пользователя папки, ведь ее мы создавали от пользователя root, а nginx работает от пользователя www-data, чтобы изменить пользователя папки выполним следующую команду:

sudo chown -R www-data:www-data /var/www/mysite.ru/public_html

Ключ "-R" означает, что мы выполняем команду рекурсивно на все вложенные папки, что в данном случае очень логично. Бывают еще ситуации, когда нужно дать права на чтение (при моем варианте это не пригодилось), но на всякий случай:

sudo chmod -R 775 /var/www

Вообще, тему с правами на папки я бы советовал почитать отдельно, так как от этого напрямую зависит безопасность сервера. Зачастую хватает просто смены пользователя на папку, а все права внутри приложения (если вы используете готовое коробочное решение) уже давно разрулены.

Установка php 5.6

Пройдя все этапы выше, переходим к установке php. Для начала убедимся, что данной версии у нас нет. Переходим в папку по адресу:

cd /etc/php/

Посмотрите, если видите следующую картину:

5.6/ 7.0/ 7.1/ 

И папка 5.6 не пустая, значит php5.6 версии у вас уже установлена. И устанавливать ее заново уже не нужно. Если же ее нет, то установить можно с помощью следующих команд:

sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php5.6 php5.6-fpm php5.6-curl php5.6-common php5.6-mcrypt php5.6-xml php5.6-gd php5.6-mbstring php5.6-mysql php5.6-pdo php5.6-imagick -y

Подобная установка поставит все необходимые библиотеки для успешной работы php на вашем сервере и избавит вас от дальнейшей головной боли.

Настройка php-fpm

FastCGI Process Manager, "Менеджер процессов FastCGI". Это альтернативная реализация FastCGI режима в PHP с несколькими дополнительными возможностями, которые обычно используются для высоконагруженных сайтов. Настройка fpm делается в файле по следующему адресу:

sudo nano /etc/php/5.6/fpm/pool.d/www.conf

Чтобы воспользоваться поиском в nano, нужно нажать комбинацию горячих клавиш "ctrl+w"

[www]

user = www-data
group = www-data
listen = /var/run/php/php5.6-fpm.sock

listen.owner = www-data
listen.group = www-data
listen.allowed_clients = 127.0.0.1

Конфигурация виртуального хоста

И, самое главное - конфигурация виртуального хоста. Здесь важно не накосячить, а, иначе, ничего не заработает. Переходите в директорию, где они находятся:

cd /etc/nginx/sites-available/

Существует несколько вариантов создания виртуальных хостов:

  1. Можно под каждый конфиг создать отдельный файл. Важно только не забыть создать символьную ссылку в папке sites-enabled
  2. Занести все конфиги сайтов в один в файл default, и каждый виртуальных хост хранить в конструкции server {} server {} server {}

Мне нравится вариант 2. Все изменения делаем в файле default. Зайдя в этот файл, вы вероятнее всего уже увидите закомментированный кусок кода ниже, начинающийся со слова server ... Вы можете либо создать новый хост ниже, либо заменить этот текст. Обязательно сделайте все по инструкции и обратите внимание на важные моменты, и я уверен, у вас все получится. Это оффициальная рекомендуемая конфигурация для настройки под фрэймворк yii2 (но я немного изменил под свои нужды), найти оригинал можно тут: https://github.com/nginx-configuration

server {
    charset utf-8;
    client_max_body_size 128M;

    listen 80; ## listen for ipv4
    #listen [::]:80 default_server ipv6only=on; ## listen for ipv6

    server_name mysite.ru;
root /var/www/mysite.ru/public_html;
index index.php; access_log /var/log/nginx/mysite.ru.access.log; error_log /var/log/nginx/mysite.ru.error.log;
location / { # Redirect everything that isn't a real file to index.php try_files $uri $uri/ /index.php$is_args$args; } # uncomment to avoid processing of calls to non-existing static files by Yii #location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ { # try_files $uri =404; #} #error_page 404 /404.html; # deny accessing php files for the /assets directory location ~ ^/assets/.*\.php$ { deny all; } location ~ \.php$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #fastcgi_pass 127.0.0.1:9000; fastcgi_pass unix:/var/run/php/php5.6-fpm.sock; try_files $uri =404; } location ~* /\. { deny all; } }

В данной настройке нужно обратить внимание на следующие поля:

  • server_name - это доменное имя, после ввода которого в адресную строку, пользователь сможет получить информацию из папки root, о ее настройке ниже
  • root - это директория, в которой хранится сайт
  • access_log и error_log - это логирование всех заходов и ошибок на сайте. Мы указываем путь до файлов
  • fastcgi_pass - Задаёт адрес FastCGI-сервера. Адрес может быть указан в виде доменного имени или IP-адреса, порта.

Чтобы проверить наличие файла, воспользуйтесь командой:

find / -name php5.6-fpm.sock

После того, как все заполнено, вам нужно перезагрузить сервер и fpm. Делается с помощью следующих команд:

/etc/init.d/nginx restart
/etc/init.d/php5.6-fpm restart

 Если во время перезагрузки произошли какие-нибудь ошибки, то можно запустить команду проверки nginx:

nginx -t

В случае успеха должно быть выдано следующее сообщение:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Если же какие-то ошибки, то нужно внимательно почитать ее текст и разобраться... Вероятнее всего, с первого раза сервер запустить не удасться, но если же вам удалось, то вы везунчик :)

Настройка файла hosts

Теперь остался последний момент. Если вы сейчас введете в адресной строке mysite.ru, то, вероятно, получите ошибку. Но, если настроить файл hosts и указать, что по этому домену он должен отправляться на наш сервер, то сайт заработает. Для этого откроем файл:

sudo nano /etc/hosts

В этом файле вы увидите примерно следующее:

127.0.0.1       localhost
127.0.0.1       site.loc

Нам сюда нужно добавить еще одну строчку:

127.0.0.1 mysite.ru

Обязательно обратите внимание, что между IP адресом и Доменным именем должна быть табуляция, а не пробел

Теперь можете попробовать зайти на ваш сайт по новому адресному имени http://mysite.ru и получите такую долгожданную фразу - "Ура! Вы смогли настроить Virtual Host в nginx!" 

Секреты в настройке виртуальных хостов

Есть одна хитрость, которую я очень часто использую при создании сайтов. Чтобы все ваши сайты лежали в домашней директории пользователя, можно создать там папку, например: www. Получится что-то следующее: /home/mylocalComputer/www/mysite.ru

Чтобы эта папка заработала, нужно создать символьную ссылку на нее:

ln -s /var/www/ /home/mylocalComputer/

Теперь пользователь может управлять сайтами из своей домашней директории.
Опция "-s" - позволяет нам создать символическую ссылку.

В общем, что знал - рассказал. Если у вас остались вопросы - задавайте их в комментариях. Спасибо за прочтение. Надеюсь у вас все получилось :)  

Облако тегов

Следующая статья

Отличие MyISAM от InnoDB

При создании таблиц нужно понимать разницу между MyISAM и InnoDB, так как у каждой из этих систем хранения данных есть как плюсы, так и минусы. В этой статье я постараюсь простым языком рассказать об отличиях. Зачастую этот вопрос задается на собеседованиях, и ответ знать на него, безусловно, нужно.

Сообщения: (2)

?
Публикуя сообщение, вы соглашаетесь с пользовательским соглашением
SSkuLappy4 года назад
Очень полезная статья. Как настроить nginx на docker?
Ответить
?
Публикуя сообщение, вы соглашаетесь с пользовательским соглашением
Скрыть ответы: (1)
ААдминистратор4 года назад
Спасибо. Тоже ничего сложного.
Ответить

Читайте также