Google App Engine, 2 службы, dispatch.yaml: nginx-app.conf, похоже, больше не учитывается - PullRequest
1 голос
/ 04 апреля 2019

Я пытаюсь переместить существующее приложение на GoogleAppEngine PHP / Flex в GoogleAppEngine PHP / Standard, чтобы воспользоваться функциями стандартного движка.

Мой проект настроен следующим образом:

  • server / public_html / rest / index.php: Slim Framework, front_controller_file
  • server / src: код приложения php
  • server / public_html / index.html: приложение angularjs (+ другое файлы в этом каталоге.

В GAE PHP Flex мой app.yaml был следующим:

api_version: 1

runtime: php
env: flex

skip_files:
        - ^db$
        - ^vendor$
        - ^Spotfire$
        - ^complete-sync\.sh$
        - ^phinx\.yml$
        - ^phinx-template\.yml$
        - ^selective-sync\.sh$

runtime_config:
  document_root: /app/public_html
  front_controller_file: /app/public_html/rest/index.php
  enable_stackdriver_integration: true
...

И так, что Slim Framework работает

файл nginx-app.conf находился в /server/nginx-app.yaml

location / {
  # try to serve file directly, fallback to front controller
  try_files $uri /index.html$is_args$args;
}
location /rest {
  # try to serve file directly, fallback to front controller
  try_files $uri /rest/index.php$is_args$args;
}

location ~ \.php {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param SCRIPT_NAME $fastcgi_script_name;
    fastcgi_index index.php;
    fastcgi_pass 127.0.0.1:9000;
}

Теперь в GAE PHP Standard мой app.yaml для бэкэнда выглядит так:

runtime: php72
entrypoint: serve public_html/rest/index.php

runtime_config:
        document_root: public_html
        enable_stackdriver_integration: true

и мой dispatch.yaml выглядит следующим образом:


dispatch:
  # Send all rest traffic to the backend
  - url: "*/rest/*"
    service: default

  # Send the rest to the front (angularjs)
  - url: "*/*"
    service: front

и nginx-app.conf остается прежним.

Когда я достигаю URL (example.com) приложения, приложение angularjs загружается правильно, я вижу экран входа в систему.

если я пойду в example.com/rest/index.php

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

Однако, если я пойду на

example.com / отдых / аутентификации

Я получаю 404, и я все равно должен получить ошибку приложения вместо 404. С помощью правила перезаписи nginx он должен преобразовать URL-адрес в следующее:

example.com / отдых / index.php? Аутентификации

Кроме того, в моем коде я проверяю путь, чтобы исключить какой-либо путь проверки подлинности, для некоторой общедоступной страницы (и аутентификации)

Когда я нажимал кнопку входа в систему, в моем гибком развертывании $ path был «authenticate», а здесь «/rest/authenticate".

$path   = $request->getUri()->getPath   ();

Есть идеи, как это отладить?

Мне кажется, я мог бы использовать только один сервис (по умолчанию), но example.com/ указывает на public_html / rest / index.php что не очень хорошо для меня, так как я хочу / буду приложением angularjs и REST-частью с отдыхом / в пути.

1 Ответ

1 голос
/ 05 апреля 2019

Возможно, в вашем файле index.php есть неверное направление.Посмотрите на ваши разные случаи и на какой файл .php ссылаются для страницы аутентификации, убедившись, что он идентичен для аутентификации, чем другие страницы.Поскольку dispatch.yaml имеет приоритет над всеми другими методами маршрутизации, между index.php и dispatch.yaml может возникнуть конфликтное поведение.Вы можете провести некоторое тестирование обработки ваших сервисов непосредственно из index.php, если у вас возникли проблемы с его устранением.Возможно, у вас есть authentic.php в другой подпапке.

Если вы получаете 200 при прямом доступе к example.com/rest/authenticate.php, виновным может быть index.php.Поскольку стандартная среда для App Engine отличается от Flex, вот несколько документов, относящихся к вашей ситуации:

Фронтальные контроллеры: https://cloud.google.com/appengine/docs/standard/php7/building-app/#initializing Dispatch.yaml: https://cloud.google.com/appengine/docs/standard/php7/reference/dispatch-yaml Точка входа: https://cloud.google.com/appengine/docs/standard/php7/runtime#application_startup

Кроме того, более пристальное внимание на трассировку, ведущую к 404, может дать вам несколько советов.

Вот несколько общих указателей при миграции из одной среды в другую (в обратном порядке, но все же полезно): https://cloud.google.com/appengine/docs/flexible/php/migrating

Приветствия

...