Перенаправление Nginx + PHP-FPM в статический файл PHP - PullRequest
0 голосов
/ 20 мая 2018

Сначала некоторые подробности о моей установке:

  • Я работаю со статическим веб-приложением (HTML + JS) из стандартного Nginx webroot
  • У меня работает сервер PHP-FPM на localhost: 9000
  • Файл назначения должен быть /api/webroot/index.php для FPM ( всегда , не нужно пытаться_файлами и т. Д.)
  • Мне нужно переслать все / api и / api-debug вызовы для достижения localhost: 9000, и /app/webroot/index.php должен обрабатывать все эти запросы.

У меня есть следующая рабочая конфигурация Nginx:

upstream fastcgi_backend {
    server localhost:9000;
    keepalive 30;
}

server {
    listen   80;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;

        location ~ ^/(api|api-debug)/ {
            root       /app/webroot;
            index      index.php;
            try_files  $uri /api/index.php$is_args$args;

            location ~ \.php$ {
                fastcgi_pass   fastcgi_backend;

                fastcgi_split_path_info ^(?:\/api\/)(.+\.php)(.*)$;
                fastcgi_param  SCRIPT_FILENAME /app/webroot/$fastcgi_script_name;

                include        fastcgi_params;
            }
        }
    }
}

Я просто хочу сделать это более простым и эффективным, потому что, как я вижу, теперь это беспорядок.Я попытался настроить, например,

try_files $ uri /api/index.php$is_args$args;

до

try_files $uri /api/webroot/index.php$is_args$args;

и это не удалось ... Единственная причина, по которой он работает, заключается в том, что /api/index.php включает / api / webroot / index.php, но я вижу, что это неэффективно.

Я обнаружил, что отладку конфигурации nginx сложно, потому что это нелегко проверить.

Большое спасибо за вашу помощь заранее!

1 Ответ

0 голосов
/ 20 мая 2018

Самое простое решение - подключить SCRIPT_FILENAME со значением /app/webroot/index.php и полностью удалить один из location блоков.

location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
}

location ~ ^/(api|api-debug)/ {
    include        fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME /app/webroot/index.php;
    fastcgi_pass   fastcgi_backend;
}

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

location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;

    rewrite ^/(api|api-debug)/ /index.php last;
}

location ~ \.php$ {
    include        fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME /app/webroot$uri;
    fastcgi_pass   fastcgi_backend;
}
...