Запуск нескольких сайтов Nginx на Ubuntu 18.04
Я новичок в Nginx (также использую PHP 7.2) и не знаю, как получить доступ к нескольким сайтам, используя отдельные папки.
Так что в качестве папки по умолчанию я установил /home/user/php;
,
Там у меня есть несколько папок с именем: site1, site2, site3 etc
,
Используя терминал, я запускаю сервер в папке по умолчанию командой php -S localhost:8000
,
И вот проблема, когда я печатаю в браузере localhost:8000/site1/
он показывает, что находится в файле index.php, но мешает другим файлам в этом месте. Например картинки. У меня есть папка с png файлами, расположенными в /php/site1/images/
, Но они не отображаются на странице в браузере, потому что, согласно журналу терминала, он ищет эти файлы PNG в /php/images/
(которого не существует), а не в /php/site1/images/
, Все ищется в папке сервера по умолчанию, а не в подпапках с сайтами. Как изменить конфигурационный файл или что сделать, чтобы он читал отдельные папки??
Вот моя конфигурация Nginx (/etc/nginx/sites/available/default
): https://pastebin.com/pZHgPkCZ
1 ответ
Шаги будут следующие (предположения:- Nginx установлен):
Создайте блоки серверов для обоих или всех ваших сайтов в
/var/www/
папка:sudo mkdir -p /var/www/mytest1.com/public_html sudo mkdir -p /var/www/mytest2.com/public_html
Измените разрешения, чтобы разрешить обычным пользователям доступ для чтения и записи:
sudo chown -R $(whoami):$(whoami) /var/www/mytest1.com/public_html sudo chown -R $(whoami):$(whoami) /var/www/mytest2.com/public_html
Установите разрешения, чтобы страницы могли обслуживаться правильно:
sudo chmod -R 755 /var/www
Создайте две страницы для тестовых сайтов:
sudo echo "Welcome to mytest1.com!" > /var/www/mytest1.com/public_html/index.html sudo echo "Welcome to mytest2.com!" > /var/www/mytest2.com/public_html/index.html
Создать серверные блоки:
Скопируйте файл по умолчанию для домашней страницы nginx по умолчанию:
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/mytest1.com
Отредактируйте скопированный файл:
sudo nano /etc/nginx/sites-available/mytest1.com
- Прокрутите вниз и измените это
root /var/www/html;
вroot /var/www/mytest1.com/public_html;
- Изменить это
server_name _;
вserver_name mytest1.com www.mytest1.com;
- Изменить это
index index.html index.htm index.nginx-debian.html;
к этомуindex index.php index.html index.htm index.nginx-debian.html;
- Прокрутите вниз и измените это
Сделать значение для
fastcgi_pass socket
путь правильный:Бежать:
ls /var/run/php/
Результаты:
php7.2-fpm.pid php7.2-fpm.sock
Добавить
php7.2-fpm.socket
расположение в файле блока сервера, если заметка указывает в правильном направлении и видит, что часть расположения файла выглядит так, удалите#
добиться этого в некоторых областях:... location ~ \.php$ { include snippets/fastcgi-php.conf; # # # With php-fpm (or other unix sockets): fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; # # With php-cgi (or other tcp sockets): # fastcgi_pass 127.0.0.1:9000; } ...
Закройте редактор и протестируйте конфигурацию nginx с
sudo nginx -t
, Смотрите любые ошибки, повторяет шаги в обратном направлении. Для правильного синтаксиса вы увидите:nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Повторение
step 5 and 6
для другого сайта, использующегоmytest2.com
где мы имелиmytest1.com
для первого сайта, дополнительно для второго сайта при редактировании/etc/nginx/sites-available/mytest2.com
файл изменить это:listen 80 default_server; listen [::]:80 default_server;
к этому:
listen 80; listen [::]:80;
- Причина:
Только один блок сервера может иметь спецификацию default_server. Это сообщает Nginx, в какой блок следует вернуться, если запрошенное имя_сервера не соответствует ни одному из доступных блоков сервера.
- Причина:
Создать символические ссылки:
sudo ln -s /etc/nginx/sites-available/mytest1.com /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/mytest2.com /etc/nginx/sites-enabled/
Удалите символическую ссылку для блока сервера по умолчанию:
sudo rm /etc/nginx/sites-enabled/default
Перезапустите Nginx:
sudo service nginx restart
11: Необязательно: Изменить файл Hosts:
127.0.0.1 mytest1.com
127.0.0.1 mytest2.com
Теперь перейдите в ваш браузер и введите localhost
, или же mysite1.com
если вы сделали записи в /etc/hosts
файл. Теперь также обратите внимание, что nginx прослушивает порт 80
не 8080
, Не сервер php.
Ресурс:
https://devanswers.co/installing-nginx-ubuntu-18-04-multiple-domains/