Создание виртуального хоста в 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-fpm
location ~ /\.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/