Создание виртуального хоста в Ubuntu с Nginx
При использовании веб-сервера Nginx вы можете использовать блоки сервера (аналогичные виртуальным хостам в Apache) для инкапсуляции данных конфигурации и размещения на одном сервере нескольких доменов.
По умолчанию включен один серверный блок, настроенный для вывода документов из директории /var/www/html.
Для обслуживания этого контента Nginx необходимо создать серверный блок с правильными директивами. Вместо того чтобы изменять файл конфигурации по умолчанию напрямую, мы создадим новый файл в директории /etc/nginx/sites-available/название_домена.com.
Скопируйте файл для домена:
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/название_домена.com
Откройте новый файл в редакторе с привилегиями root:
sudo nano /etc/nginx/sites-available/название_домена.com
Удаляем все что есть и пишем следующий блок конфигурации, который похож на заданный по умолчанию, но обновлен с учетом новой директории и доменного имени:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/название_домена.com/public_html;
index index.php index.html index.nginx-debian.html;
server_name название_домена.com www.название_домена.com;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Вот что делает каждая из этих директив и блоков местоположения:
listenопределяет, какой порт будет прослушивать Nginx. В этом случае он будет прослушивать порт80, порт по умолчанию для HTTP. Так же у директивы есть параметрdefault_server, который позволяет сделать виртуальный хост сайтом по умолчанию. В таком случае на него будут перенаправлятся все запросы, не относящеся к другим виртуальным хостам или поступающие напрямую на IP-адрес сервера. По умолчанию эта опция включена в настройках стандартного хостаdefault, поэтому чтобы избежать ошибки (сервер по умолчанию должен быть только один) нужно удалить этот параметр из файла настроекdefaultили отключить стандартно сконфигурированный сервер, удалив ссылку на него из папкиsites-enabled. Все параметры директивы являются опциональнымиrootопределяет корень документа, в котором хранятся файлы, обслуживаемые этим веб-сайтомindexопределяет, в каком порядке Nginx будет отдавать приоритет индексным файлам для этого веб-сайта. Обычной практикой является перечислениеindex.htmlфайлов с более высоким приоритетом, чемindex.phpфайлы, чтобы можно было быстро настроить целевую страницу обслуживания в приложениях PHP. Вы можете настроить эти параметры так, чтобы они лучше соответствовали потребностям вашего приложенияserver_nameопределяет, за какие доменные имена и/или IP-адреса должен отвечать этот серверный блок. Укажите в этой директиве доменное имя вашего сервера или общедоступный IP-адресlocation /первый блок location включаетtry_filesдирективу, которая проверяет наличие файлов или каталогов, соответствующих запросу URI. Если Nginx не может найти подходящий ресурс, он вернет ошибку 404.location ~ \.php$этот блок обрабатывает фактическую обработку PHP, указывая Nginx наfastcgi-php.confфайл конфигурации иphp7.4-fpm.sockфайл, который объявляет, какой сокет связан сphp-fpm. Обратите внимание, если в нашей системе будет установлена другая версия php, необходимо внести соответствующую корректировку./run/php/php7.4-fpm.sockпуть до сокетного файла для взаимодействия сphp-fpmlocation ~ /\.htпоследний блок location касается.htaccessфайлов, которые Nginx не обрабатывает. При добавленииdeny allдирективы, если какие-либо.htaccessфайлы попадут в корень документа, они не будут доступны посетителям.
Активируем файл создав ссылку в директории sites-enabled, который Nginx считывает при запуске:
sudo ln -s /etc/nginx/sites-available/название_домена.com /etc/nginx/sites-enabled/
Отключим файл конфигурации по умолчанию от /sites-enabled/:
sudo unlink /etc/nginx/sites-enabled/default
Убедимся в отсутствии ошибок синтаксиса в файлах Nginx:
sudo nginx -t
Если проблемы отсутствуют, перезапустите Nginx:
sudo systemctl restart nginx
Открываем конфигурационный файл PHP-FPM:
sudo nano /etc/php/7.4/fpm/pool.d/www.conf
Находим в конфигурационном файле переменную listen в ней должен быть указан путь до сокетного файла такой же, как мы задали в настройках NGINX, в противном случае меняем его и перезапускаем сервис:
listen = /run/php/php7.4-fpm.sock
Перезапускаем сервис:
sudo systemctl restart php7.4-fpm
Заходим в каталог настроенного сайта и создаем файл index.php:
nano /var/www/название_домена.com/public_html/index.php
Со следующим содержимым:
<?php phpinfo(); ?>
Если вам когда-нибудь понадобится восстановить конфигурацию по умолчанию, вы можете сделать это, заново создав символическую ссылку, например:
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/