Реклама

Настройка мультисайтовости Битрикс

Недавно столкнулся со следующей проблемой – нужно было перенести корпоративный сайт  битрикс на новый хостинг.

Проблема была в том, что на одном движке работали несколько сайтов

Сделать архив через админку не составило труда, а вот заставить работать несколько сайтов с разными доменными именами на одном IP сразу не получилось. В связи с этим, хочу рассказать как настроить мультисайтовость на примере виртуальной машины bitrix, с развернутым бэкапом. И так – у нас есть несколько сайтов, с разными доменами, использующие одну копию нашей CMS.

Скачиваем виртуальную машину, запускаем ее в нашем гипервизоре, смотрим на то, какой IP она получила, и заходим в веб интрефейс, что бы развернуть бекап.

Ура, получилось, основной сайт работает. У нас остались папки с остальными сайтами. Допустим у нас есть папка и домен site2.com Для теста на локальной машине, правим файл hosts (c:\windows\system32\drivers\etc\hosts) и вносим запись IP_виртуальной машины site2.com

Далее копируем папку с нашим сайтом на веб-сервер, я для теста скопировал его в директорию bitrix, /home/bitrix/www/site2

Скопировать на сервер можно через SSH, используя утилиту PSCP

Утилита консольная,  и простая, синтаксис следующий:

c:\pscp.exe -r c:\site2 root@192.168.1.1:/home/bitrix/www/

Ключик -r нужен для папок, рекурсивно копирует все внутри. Если хотим скопировать только файлы из папки, в уже созданную папку на сервере то набираем

c:\pscp.exe -r c:\site2\* root@192.168.1.1:/home/bitrix/www/site2

Теперь нужно настроить конфиги сервера. В данном случае, nginx принимает запрос на порт 80, передает на внутренний веб сервер, который уже перенаправляет запрос на нужный сайт, в зависимости от имени. Каждый сайт внутри висит на своем порту.

Правим первый конфиг веб сервера /etc/httpd/bx/conf/default.conf, там уже есть настройки нашего первого сайта.

default.conf

Listen 127.0.0.1:8888

<VirtualHost 127.0.0.1:8888>
ServerAdmin webmaster@localhost
DocumentRoot /home/bitrix/www

<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

<DirectoryMatch .*\.svn/.*>
Deny From All
</DirectoryMatch>

<DirectoryMatch .*\.git/.*>
Deny From All
</DirectoryMatch>

<DirectoryMatch .*\.hg/.*>
Deny From All
</DirectoryMatch>

<Directory /home/bitrix/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
DirectoryIndex index.php index.html index.htm
Order allow,deny
allow from all
php_admin_value session.save_path /tmp/php_sessions/www
php_admin_value upload_tmp_dir /tmp/php_upload/www
</Directory>

<Directory /home/bitrix/www/bitrix/cache>
AllowOverride none
Order allow,deny
Deny from all
</Directory>

<Directory /home/bitrix/www/bitrix/managed_cache>
AllowOverride none
Order allow,deny
Deny from all
</Directory>

<Directory /home/bitrix/www/bitrix/local_cache>
AllowOverride none
Order allow,deny
Deny from all
</Directory>

<Directory /home/bitrix/www/bitrix/stack_cache>
AllowOverride none
Order allow,deny
Deny from all
</Directory>

<Directory /home/bitrix/www/upload>
AllowOverride none
AddType text/plain php,php3,php4,php5,php6,phtml,pl,asp,aspx,cgi,dll,exe,ico,shtm,shtml,fcg,fcgi,fpl,asmx,pht
php_value engine off
</Directory>

<Directory /home/bitrix/www/upload/support/not_image>
AllowOverride none
Order allow,deny
Deny from all
</Directory>

<Directory /home/bitrix/www/bitrix/images>

AllowOverride none
AddType text/plain php,php3,php4,php5,php6,phtml,pl,asp,aspx,cgi,dll,exe,ico,shtm,shtml,fcg,fcgi,fpl,asmx,pht
php_value engine off
</Directory>

<Directory /home/bitrix/www/bitrix/tmp>
AllowOverride none
AddType text/plain php,php3,php4,php5,php6,phtml,pl,asp,aspx,cgi,dll,exe,ico,shtm,shtml,fcg,fcgi,fpl,asmx,pht
php_value engine off
</Directory>

ErrorLog logs/error_log
# Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
LogLevel warn

CustomLog logs/access_log combined

<IfModule mod_rewrite.c>
#Nginx should have “proxy_set_header HTTPS YES;” in location
RewriteEngine On
RewriteCond %{HTTP:HTTPS} =YES
RewriteRule .* – [E=HTTPS:on,L] </IfModule>
</VirtualHost>

Копируем этот конфиг целиком в конец сайта. Что нам нужно в нем поменять для нового сайта:

Listen 127.0.0.1:8889
<VirtualHost 127.0.0.1:8889>
ServerAdmin webmaster@localhost
DocumentRoot /home/bitrix/www/site2

Меняем номер порта на единичку больше, и прописываем новый корень сайта (там где будет лежать сайт)

Правим  второй конфиг /etc/nginx/bx/site_avaliable/s1.conf

Примечание

Можно создать отдельный конфиг для каждого сайта, например s2.conf

данные конфиги подтягиваются в основной файл /etc/nginx/nginx.conf, если зайти в него, внизу можно увидеть строку:

# Set default website
include bx/site_enabled/*.conf;

В папке site_enabled лежат символические ссылки на конфиги в папке site_available

Предположим, в site_available мы создали второй конфиг s2.conf, что бы он заработал, создадим символическую ссылку на папку site_enable

ln -s /etc/nginx/bx/site_avaliable/s1.conf  etc/nginx/bx/site_enable

Но мы продолжим работать с одним конфигом s1.conf. В нем мы видим

s1.conf

server {

listen 80 default_server;
server_name _;
server_name_in_redirect off;

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host:80;

set $proxyserver “http://127.0.0.1:8888”;
set $docroot “/home/bitrix/www”;

index index.php;
root /home/bitrix/www;

# Redirect to ssl if need
if (-f /home/bitrix/www/.htsecure) { rewrite ^(.*)$ https://$host$1 permanent; }

# Include parameters common to all websites
include bx/conf/bitrix.conf;

# Include server monitoring locations
include bx/server_monitor.conf;
}

Копируем целиком эту конструкцию, вставляем в конец. Что нужно исправить:

server {

listen 80;                    здесь убираем default server
server_name mysite2.com www.mysite2.com;   Здесь прописываем наши домены, по ним будет открываться наш второй сайт
server_name_in_redirect off;

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host:80;

set $proxyserver “http://127.0.0.1:8889“; Правим на тот порт, который мы указали в /etc/httpd/bx/conf/default.conf
set $docroot “/home/bitrix/www/site2“; Указываем директорию к корню нашего сайта

index index.php;
root /home/bitrix/www/site2Указываем директорию к корню нашего сайта

# Redirect to ssl if need
if (-f /home/bitrix/www/.htsecure) { rewrite ^(.*)$ https://$host$1 permanent; }

# Include parameters common to all websites
include bx/conf/bitrix.conf;

# Include server monitoring locations
include bx/server_monitor.conf;
}

 

Готово. Теперь важный момент – для того что бы сайты заработали, и использовали ядро битрикса, нужно прописать ссылки на него, для нашего второго сайта.

ln -s /home/bitrix/www/bitrix /home/bitrix/www/site2

ln -s /home/bitrix/www/upload /home/bitrix/www/site2

Теперь в директории нашего второго сайта появились ссылки на каталоги битрикса.

Перезапускаем сервисы:

/etc/init.d/nginx restart

/etc/init.d/httpd restart

Прописываем в админке битрикса путь к корневой директории нашего второго сайта /home/bitrix/www/site2

Теперь в браузере по ссылке site2.com и www.site2.com должен открываться сайт из директории /home/bitrix/www/site2

Статья является не претендует на мануал по настройке nginx и bitrix, и написана из личного опыта.

Если у Вас есть вопросы, задавайте их на форуме, или ниже в комментариях.

 

 

 

Пока нет комментариев

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *