Настройка Nginx, создание тестового хоста
Чтобы протестировать работоспособность сервера, необходимо придумать какой-нибудь хост и зарегистрировать его в файле hosts. Windows-пользователи могут найти этот файл по адресу C:\Windows\System32\drivers\etc\hosts. Необходимо открыть этот файл от имени администратора с помощью текстового редактора, затем добавить в его конец запись, в которой будет содержаться имя хоста и IP адрес, с которым она будет ассоциирована, то есть IP адрес вашего сервера:
Где server.dev — имя нашего тестового хоста, www.server.dev — его псевдоним, 11.222.333.44 — пример IP адреса, который необходимо заменить на IP адрес вашего сервера. После добавления записи и сохранения файла, при переходе в браузере по адресу http://server.dev вы попадёте на ваш сервер. Разумеется, это применимо только к вашему рабочему компьютеру. Никто из интернета на ваш сервер зайти пока не может. Чтобы сервер был доступен для интернет-аудитории, для него нужно делегировать настоящий домен. Однако в этом нет ничего сложного, домены делегируются по такому же принципу: пользователи направляются на IP адрес сервера по A-записи, прописанной в редакторе DNS, в личном кабинете, который предоставляется регистратором доменных имён.
Для того, чтобы вывести наш тестовый файл, необходимо сконфигурировать HTTP сервер Nginx. Конфигурационные файлы, как уже было отмечено выше, можно найти в каталоге /etc/nginx. В этом каталоге можно найти файл основной конфигурации nginx.conf. В изначальном варианте этот файл имеет следующее содержимое (комментарии опущены):
Конфигурация по умолчанию вполне пригодна для использования, однако чтобы сервер заработал для web, в его настройки всё же необходимо внести некоторые изменения (выделено красным):
Мы изменили пользователя, от которого запускается сервер, максимальный размер тела запроса, кодировку и индекс. Самое важное из изменений — последнее. Индекс — это файл, который будет открыт при корневых запросах или запросах к директориям, например http://site.com/, http://site.com/contents. Директива index может иметь несколько значений. При отсутствии первого индексного файла сервер проверит существование второго и откроет его, если он существует. Если файла с таким именем нет в каталоге, то сервер попытается открыть третий и т.д. При отсутствии индекса директория будет раскрыта в листинге, в котором будет находится список вложенных файлов. Так как мы создали файл index.html, то он и будет открыт при переходе в корневой каталог хоста http://server.dev.
Обратите внимание на последнюю строку главного конфигурационного файла include /etc/nginx/conf.d/*.conf; — эта директива подключает к конфигурации все файлы, находящиеся в каталоге conf.d, то есть объявленные хосты. После инсталляции в этом каталоге присутствует всего один файл default.conf — в нём находятся параметры конфигурации хоста по умолчанию. Общепринятой практикой считается создание для каждого хоста отдельного файла *.conf, однако в режиме тестирования можно обойтись без создания дополнительных файлов. По сути, конфигурация хостов — это продолжение главной конфигурации. Для подключения тестового хоста server.dev необходимо привести файл /etc/nginx/conf.d/default.conf к следующему виду:
Вы видите два серверных блока. Главные параметры, определяющие хосты, — это порт и имя хоста. Порт задаётся директивой listen. Nginx устроен так, что тот блок, в котором порт встречается в первый раз (то есть верхний) является блоком по умолчанию. Nginx отрабатывает его в том случае, если в конфигурации больше нет дальнейших совпадений хостов для этого порта. То есть независимо от того, какой домен будет подан на обработку, например aaa.bbb.ccc.ddd.server.dev, если он подан на 80-ый порт, то он будет отрабатываться в блоке по умолчанию. Обычно такой блок выключают из конфигурации — при попадании в него возвращается ошибка 403 с помощью директивы return
Второй серверный блок — это блок нашего тестового хоста. В нём так же задан 80-ый порт, используемый браузером для протокола http://, однако в отличие от серверного блока по умолчанию нижний блок идентифицируется именем сервера и его алиасом при помощи директивы server_name. Алиасов может быть сколько угодно (они могут также отсутствовать). Алиасы обычно разделяются пробелами. Третья важная директива — root, она определяет путь файловой системы до корневого каталога хоста. После изменения конфигурации сервера для вступления изменений в силу требуется его перезагрузка. На Debian перезагрузка процессов устроена хитро. Есть 2 основных команды:
Первая команда просто пытается перезагрузить сервер и не выводит никакого результата в случае успеха или неуспеха, вторая команда выводит положительный результат в случае успеха и уведомление об ошибке, если что-то пошло не так. Вторая команда — это путь до загрузчика процесса, ей мы вызываем загрузчик напрямую. Существуют также и другие важные команды, о которых необходимо знать: о назначении первых двух вы можете догадаться исходя из их названий, последняя команда показывает статус процесса (он может быть активным или неактивным):
После перезагрузки сервера перейдите на тестовый хост http://server.dev — браузер должен отобразить проверочную фразу Hello Universe!. Если вы её видите, значит всё получилось, и можно приступить к подключению PHP интерпретатора.
Создадим индексный файл index.php и поместим его в корневой каталог нашего сервера. Новый файл будет иметь более высокий приоритет, так как в главной конфигурации мы определили его на первое место, и при конкуренции между индексными файлами index.html и index.php, находящимися в одном каталоге, сервер выведет index.php. Для создания нового файла мы воспользуемся более продвинутой командой printf, которая в отличие от echo позволяет записывать в файлы специальные символы, например переносы строк:
Теперь перейдите на тестовый хост. Обратите внимание на то, что браузер ничего не отображает, при этом файл index.php вывелся на загрузку. Если вы его откроете, то увидите содержимое, которое мы в него записали. А чтобы интерпретатор заработал, необходимо указать серверу, чтобы все запросы к файлам PHP он передавал на исполнение интерпретатору. Добавьте к конфигурации тестового сервера блок локации, который по регулярному выражению будет обслуживать файлы PHP (выделено):
Настройки PHP-FPM по умолчанию, как правило, выставлены правильно. Откройте файл /etc/php/7.3/fpm/pool.d/www и проследите, чтобы следующие параметры были установлены корректно:
После изменения конфигурации перезагрузите Nginx:
Если вы изменили конфигурацию PHP, то перезагрузите также и PHP:
Перейдите на тестовый хост. Если всё прошло успешно, то сервер должен вывести исполненный индексный файл index.php.