Как сконфигурировать сервер на CentOS 7 так, чтобы разные веб-сайты открывались в зависимости от IP-адреса или имени сайта, указанных в запросе?

Как настроить на одном сервере CentOS 7 с Apache 2.4.6, PHP 8 и MySQL хостинг нескольких независимо работающих сайтов Laravel, расположенных в директориях /var/www/laravel_1 и /var/www/laravel_2, чтобы сайт из laravel_1 был доступен по адресу 1.1.1.1/laravel_1 и сайт из laravel_2 по адресу 1.1.1.1/laravel_2? В настоящее время при обращении к 1.1.1.1 в браузере отображается содержимое /var/www/laravel_1, но при попытке доступа к 1.1.1.1/laravel_1 или 1.1.1.1/laravel_2 возникает ошибка 404.
  • 4 декабря 2023 г. 11:59
Ответы на вопрос 2
Для того чтобы на одном сервере с CentOS 7 и Apache 2.4.6 разные сайты открывались в зависимости от запрашиваемого IP-адреса или имени сайта, необходимо настроить виртуальные хосты (Virtual Hosts) в Apache. Однако, если вы хотите разделить два Laravel-приложения по разным путям у одного и того же домена или IP (как указано в вашем примере), тогда потребуется немного другая конфигурация.

В вашем конкретном случае, чтобы сделать сайт из `/var/www/laravel_1` доступным по адресу `1.1.1.1/laravel_1` и сайт из `/var/www/laravel_2` по адресу `1.1.1.1/laravel_2`, вам нужно будет конфигурировать Apache следующим образом:

1. Откройте главный конфигурационный файл Apache на изменение:
  
   ```bash
   sudo nano /etc/httpd/conf/httpd.conf
   ```

2. Модифицируйте или убедитесь, что `DocumentRoot` указывает на корневую папку по умолчанию, например:

   ```
   DocumentRoot "/var/www/html"
   ```

3. Ниже в этом же файле, добавьте конфигурацию `Alias` для каждого из Laravel-приложений, чтобы они были доступны по заданным путям:

   ```apache
   Alias /laravel_1 "/var/www/laravel_1/public"
   Alias /laravel_2 "/var/www/laravel_2/public"

   <Directory "/var/www/laravel_1/public">
       AllowOverride All
       Require all granted
   </Directory>

   <Directory "/var/www/laravel_2/public">
       AllowOverride All
       Require all granted
   </Directory>
   ```

4. Сохраните и закройте конфигурационный файл.

5. Вам также потребуется разрешить перезапись `.htaccess` внутри каждой директории Laravel. Убедитесь, что файл `.htaccess` находится в папке `public` каждого проекта Laravel.

6. Перезапустите сервер Apache, чтобы изменения вступили в силу:

   ```bash
   sudo systemctl restart httpd
   ```

Теперь при доступе по адресу `1.1.1.1/laravel_1` должно открываться приложение Laravel, расположенное в `/var/www/laravel_1`, а при доступе к `1.1.1.1/laravel_2` - приложение из `/var/www/laravel_2`.

Если у вас всё ещё возникает ошибка 404, проверьте:

- Существуют ли корректные `.htaccess` файлы внутри папок `public` Laravel-приложений.
- Включён ли модуль `mod_rewrite` в Apache и разрешена ли директива `AllowOverride` для этих директорий.
- Правильно ли настроены права доступа к файлам и папкам Laravel-приложений.

Обратите внимание, что использование IP-адреса в пути может быть не лучшим решением для продакшн окружения. Обычно в продакшне используют DNS-имена для доступа к разным сайтам на одном сервере, что подразумевает настройку виртуальных хостов.
Настройте nginx как обратный прокси-сервер и используйте директивы location в конфигурации виртуального хоста для перенаправления трафика на несколько сайтов, запущенных на Apache через разные порты на локальном сервере. 
Похожие вопросы