Хобрук: Ваш путь к мастерству в программировании

nginx несколько файлов PHP в инструкции try_files

Доброе утро, я хочу сделать такой же виртуальный хост nginx, который может работать с разными приложениями php (symfony и Thelia). Моя проблема связана с инструкцией try_files. В symfony файлы try_file должны быть нацелены на app.php, но в Thelia они должны быть нацелены на index.php. Поэтому я хотел изменить инструкцию try_files следующим образом:

server {
    listen 80;
    server_name *.tld;

    root /var/www/web;

    location / {
        try_files $uri /app.php$is_args$args /index.php$is_args$args;
    }

    location ~ ^/(app|app_dev|config|index|index_dev)\.php(/|$) {
        fastcgi_pass php_alias:9000;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param APP_ENV dev;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTPS off;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 256 16k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
    }

}

К сожалению, это не работает. Php больше не интерпретируется. Итак, как я могу зарегистрировать несколько файлов php в операторе try_files?

11.07.2018

  • У вас есть конкретная причина для использования данного регулярного выражения для файлов PHP вместо стандартного location ~ \.php(/|$)? 11.07.2018
  • @IVOGELOV Да, мне нужна эта конкретная конфигурация, но я не вижу связи с try_files. 12.07.2018

Ответы:


1

Директива try_files может иметь только один URI по умолчанию, который является последним элементом и идет после всех элементов file. Проблема, с которой вы столкнулись, заключается в том, что элементы file вызывают обработку запроса в текущем location. Дополнительные сведения см. в этом документе.

Вы можете использовать именованный location для обработки необязательного URI по умолчанию, например:

location / {
    try_files $uri @rewrite;
}
location @rewrite {
    if (-f $document_root/app.php ) {
        rewrite ^ /app.php last;
    }
    rewrite ^ /index.php last;
}

См. это предупреждение об использовании if.

12.07.2018
Новые материалы

Шлюз с лицензией OSS, совместимый с Apollo Federation v2, появится в WunderGraph
Сегодня мы рады сообщить, что мы сотрудничаем с поддерживаемой YC Tailor Technologies, Inc. для внедрения Apollo Federation v2. Реализация будет лицензирована MIT (Engine) и Apache 2.0..

Это оно
Ну, я официально уволился с работы! На этой неделе я буду лихорадочно выполнять последние требования Думающего , чтобы я мог сосредоточиться на поиске работы. Что именно это значит?..

7 полезных библиотек JavaScript, которые вы должны использовать в своем следующем проекте
Усильте свою разработку JavaScript Есть поговорка «Не нужно изобретать велосипед». Библиотеки — лучший тому пример. Это поможет вам написать сложные и трудоемкие функции простым способом...

Базовое руководство по переносу концепций обучения в глубокое обучение
Обзор По мере того, как машинное обучение становится все более мощным и продвинутым, модели, обеспечивающие эту расширенную возможность, становятся все больше и начинают требовать огромного..

C в C.R.U.D с использованием React-Redux
Если вы использовали React, возможно, вы знакомы с головной болью, связанной с обратным потоком данных. Передача состояния реквизитам от родительских компонентов к дочерним компонентам может..

5 обязательных элементов современного инструмента конвейера данных
В цифровом мире предприятия используют конвейеры данных для перемещения, преобразования и хранения огромных объемов данных. Эти конвейеры составляют основу бизнес-аналитики и играют..

Случай использования npm3 вместо npm2 для разработки библиотеки
Некоторое время назад я создал библиотеку на NodeJS, чтобы упростить рендеринг на стороне сервера и клиента. Он использует React и React Router для отображения соответствующего HTML на веб-сайте...