nginx: несколько хостов на один index.php

Есть несколько директорий типа /var/www/site_n/на которые смотрит virtual host и в которых лежат пользовательские файлы и логи.

Есть директория /usr/lib/cms/ с движком CMS и файлом index.php, который должен запускаться с разным окружением в зависимости от настроек хоста в nginx.

Пытаюсь настроить вот таким конфигом на примере одного домена:
server {

        server_name site1.com; 
        root /var/www/site1.com/public_html/;
        set $app_root /usr/lib/cms/;
        set $app_key 454647;

        access_log /var/www/site1.com/logs/access.log;
        error_log /var/www/site1.com/logs/error.log;
        
        location / {
            index index.php index.html index.htm;
            try_files $uri $uri/ $app_root/index.php?$args;
        }

        location ~ \.php$ {
            try_files $uri @php;        
            fastcgi_pass   php5-fpm-sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $app_root$fastcgi_script_name;
            fastcgi_param app-key $app_key;
            include  fastcgi_params;
        }        
        
        location @php {
            fastcgi_pass php5-fpm-sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $app_root/index.php;
            fastcgi_param SCRIPT_NAME /index.php;
            fastcgi_param QUERY_STRING q=$uri&$args;
            include fastcgi_params;
           }

}

При попытке запроса адреса site1.com получаю 403 ошибку. Nginx в логах пишет, что ищет файл в директории сайта, а не в папке движка.
Помогите пожалуйста настроить правильно. И вообще, на сколько такой подход корректен?
  • Вопрос задан
  • 3645 просмотров
Пригласить эксперта
Ответы на вопрос 4
Anonym
@Anonym
Программирую немного )
Что-то не нравится мне ваш конфиг.
Попробуйте так:
        location / {
            index index.php index.html index.htm;
            try_files $uri $uri/ @php;
        }

        location ~ \.php$ {
            fastcgi_pass   php5-fpm-sock;
            fastcgi_index  /;
            fastcgi_param SCRIPT_NAME index.php;
            fastcgi_param  SCRIPT_FILENAME  $app_root/index.php;
            fastcgi_param app-key $app_key;
            include  fastcgi_params;
        }        
        
        location @php {
            fastcgi_pass php5-fpm-sock;
            fastcgi_index /;
            fastcgi_param SCRIPT_NAME index.php;
            fastcgi_param SCRIPT_FILENAME $app_root/index.php;
            fastcgi_param QUERY_STRING q=$uri&$args;
            include fastcgi_params;
           }
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Я так понял смысл этого действия — экономия на спичках в виде отсутствия дублирования кода самой cms. Как минимум так делать не стоит, ибо вы не можете на 100% гарантировать то, что версия cms для каждого из сайтов будет одной и той же. В крайнем случае сделайте симлинк.
Ответ написан
Комментировать
@rozhik
try_files $uri $uri/ $app_root/index.php?$args У файла нет параметров — по этому. Но никто не мешает поменять сие на try_files $uri php.
Ответ написан
Комментировать
Diam0n
@Diam0n
просто ссылку на index.php попробуйте
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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