У нас есть многосайтовый Drupal (с разными доменами для каждого сайта), работающий с одной базой кода Drupal 8 и Nginx в качестве веб-сервера. Теперь мы хотели настроить сайт Drupal Milti с подкаталогом для нескольких веб-сайтов в следующем формате, а «подкаталог» должен быть нечувствительным к регистру (т.е. сайт должен быть доступен как из «подкаталога», так и «подкаталога»):
Мы запускаем эти сайты на Nginx в CentOS. Нам удалось заставить подсайт работать в следующей структуре (но не со структурой выше):
Ниже представлена конфигурация виртуального хоста nginx, которую мы используем.
ПРИМЕЧАНИЕ. Я обновил конфигурацию nginx, чтобы удалить SSL.
# VHOST Config.
server {
listen 80;
server_name site1.com;
root /var/www/html;
index index.php index.html index.htm;
# Prevent files from being accessed.
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ /\.htaccess*$ {
return 403;
}
location ~ (^|/)\. {
return 403;
}
location ~ .*\.config$ {
return 403;
}
location ~ /composer.*$ {
return 403;
}
location ~ \..*/.*\.yml$ {
return 403;
}
location / {
try_files $uri $uri/ =404;
}
location @rewrite {
try_files $uri /subdirectory/index.php?$query_string;
}
location /subdirectory/ {
try_files $uri $uri/ @rewrite;
}
location ~ '\.php$|^/update.php' {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
proxy_cache_bypass 1;
}
}
Любая помощь приветствуется.
Ниже приводится рабочее решение для мультисайта Drupal с подкаталогом.
# VHOST Config.
server {
# Define server name and directory root.
server_name site1.com;
root /var/www/html/drupal;
index index.php;
# Listen to port
listen 80;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ^~ /subdirectory {
try_files $uri $uri/ @nested;
location ~ '\.php$|^/update.php' {
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
# include snippets/fastcgi-php.conf;
fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
fastcgi_pass 127.0.0.1:9000;
}
}
location @nested {
try_files $uri $uri/ /subdirectory/index.php?$query_string;
}
location @rewrite {
rewrite ^/(.*)$ /index.php?q=$1;
}
location ~ '\.php$|^/update.php' {
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
# include snippets/fastcgi-php.conf;
fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
fastcgi_pass 127.0.0.1:9000;
}
location ~ ^/sites/.*/files/styles/ {
try_files $uri @rewrite;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
proxy_cache_bypass 1;
}
}
НОТА :
Единственная нерешенная проблема: обновления Drupal не работают для site1.com/subdirectory с указанной выше конфигурацией (site1.com/subdirectory/update.php работает, но страницы после него не работают). Чтобы он работал, мне нужно внести следующие изменения в vhost
# Change try_files in 'location @nested' as below :
location @nested {
try_files $uri $uri/ /subdirectory/update.php?$query_string;
}
Любая помощь приветствуется, чтобы исправить вышеуказанную проблему и заставить все работать без необходимости менять location @nested
.
Надеюсь, это поможет кому-то, кому нужно запустить многосайтовый Drupal 8 в качестве подкаталога.
Почему бы тебе не настроить вещи по-другому? Моя идея о том, что это может сработать для вас:
server {
listen 80;
server_name site1.com;
root /var/www/sites/site1; #I suppose that in site1 it's the code for site1.com
index index.php index.html index.htm;
.
.
.#simple configuration here, don't care about site1.com/subdomain
.
}
server {
listen 80;
server_name site2.com;
root /var/www/sites/site2; #I suppose that in site2 it's the code for site2.com
index index.php index.html index.htm;
.
.
.#simple configuration here, don't care about site2.com/subdomain
.
}
И затем вы заходите в / var / www / sites / site1 и / var / www / sites / site2 и создаете символическую ссылку на ../site1.com.subdomain ../site2.com.subdomain следующим образом:
cd /var/www/sites/site1
ln -s ../site1.com.subdomain subdomain
cd /var/www/sites/site2
ln -s ../site2.com.subdomain subdomain
Таким образом, у вас есть код для каждого Drupal внутри / var / www / sites / site1 / var / www / sites / site2 /var/www/sites/site1.com.subdomain и /var/www/sites/site2.com .subdomain
Но когда осуществляется доступ к site1, он вводит / var / www / sites / site1, если осуществляется доступ к site1.com/subdomain, он вводит / var / www / sites / site1 / subdomain, который после символической ссылки, это ' установлю соединение с /var/www/sites/site1.com.subdomain.
Разве это не то, что тебе нужно? Или я неправильно прочитал вопрос?