Конфигурация виртуального хоста Nginx для мультисайта Drupal с суб- directory

У нас есть Drupal мульти-сайт (с разными доменами для каждого сайта), работающий с одной базой кода Drupal 8 и Nginx в качестве веб-сервера. . Теперь мы хотели настроить сайт Drupal Milti с подкаталогом для нескольких веб-сайтов в следующем формате, а «подкаталог» должен быть нечувствительным к регистру (т.е. сайт должен быть доступен как с «подкаталогом», так и с «подкаталогом»):

  1. http://site1.com (мульти-сайт Drupal, обслуживаемый с "sites / site1.com")
  2. http://site1.com/subdirectory (мульти-сайт Drupal, обслуживаемый с " sites / site1.com.subdirectory ")
  3. http://site2.com (Drupal мульти-сайт, обслуживается с" sites / site2.com ")
  4. http://site2.com/subdirectory (Многосайтовый Drupal, обслуживаемый из "sites / site2.com.subdirectory")

Мы запускаем эти сайты на Nginx на CentOS. Нам удалось заставить подсайт работать со следующей структурой (но не со структурой выше):

  1. http://site1.com (Статическая HTML-страница)
  2. http: // site1. com / subdirectory (Drupal multi-site)

Ниже приводится конфигурация виртуального хоста 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;
  }
}

Приветствуем любую помощь.

0
задан 5 July 2019 в 08:44
2 ответа

Следующее работает решение на 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;
  }

}

ПРИМЕЧАНИЕ:

  1. Выше конфигурации работает и на "site1.com" и на "site1.com/subdirectory" к страницам сервера с помощью Drupal 8.
  2. Только ожидание проблемы, обновления 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.

Hope это помогает кому-то нуждающемуся получить Drupal 8, многоузловой как подкаталог и выполнение.

0
ответ дан 23 November 2019 в 23:06

Почему бы вам не настроить параметры по-другому? Моя идея о том, что это может сработать для вас:

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.

. Разве это не то, что вам нужно? Или я неправильно прочитал вопрос?

0
ответ дан 23 November 2019 в 23:06

Теги

Похожие вопросы