Запуск нескольких сайтов 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 установлен):

  1. Создайте блоки серверов для обоих или всех ваших сайтов в /var/www/папка:

    sudo mkdir -p /var/www/mytest1.com/public_html
    sudo mkdir -p /var/www/mytest2.com/public_html
    
  2. Измените разрешения, чтобы разрешить обычным пользователям доступ для чтения и записи:

    sudo chown -R $(whoami):$(whoami) /var/www/mytest1.com/public_html
    sudo chown -R $(whoami):$(whoami) /var/www/mytest2.com/public_html
    
  3. Установите разрешения, чтобы страницы могли обслуживаться правильно:

    sudo chmod -R 755 /var/www
    
  4. Создайте две страницы для тестовых сайтов:

    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
    
  5. Создать серверные блоки:

    1. Скопируйте файл по умолчанию для домашней страницы nginx по умолчанию:

      sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/mytest1.com
      
    2. Отредактируйте скопированный файл:

      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;
  6. Сделать значение для 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
      
  7. Повторение 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, в какой блок следует вернуться, если запрошенное имя_сервера не соответствует ни одному из доступных блоков сервера.

  8. Создать символические ссылки:

    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/
    
  9. Удалите символическую ссылку для блока сервера по умолчанию:

    sudo rm /etc/nginx/sites-enabled/default
    
  10. Перезапустите 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/

https://devanswers.co/installing-php-nginx-ubuntu-18-04/

Другие вопросы по тегам