Конфигурация Nginx для статического приложения Vue SPA и PHP - PullRequest
0 голосов
/ 12 ноября 2019

Я знаю, что это не идеальная установка, но я надеюсь, что кто-то может помочь мне заставить этот сценарий работать. По сути, у меня есть:

  • Vue SPA-приложение

    • Маркетинговый интерфейс
    • Только несколько URI:
      • hxxps: //domain.com
      • hxxps: //domain.com/#/ { home | контакт | логин }
  • Codeigniter (CI) PHP-приложение

    • Основное приложение
    • Централизованный маршрутизатор и Laravel-like(index.php? $ uri) с несколькими конечными точками URI:
    • hxxps: //domain.com/ { панель мониторинга | учетная запись | и т. д. }

Я действительно стараюсь избегать встраивания статического приложения Vue в Codeigniter (кажется, что это требует дополнительных затрат) и избегать прокси-подхода, так как это статический контент и не 'Не требуется Node для запуска.

Вот моя попытка с конфигурацией Nginx:

/ etc / nginx / sites-available / default

server {
  root /var/www;
  index index.php index.html;

  location / {
    # Codeigniter
    try_files $uri $uri/ /index.php?/$request_uri;

    # Vue SPA
    if ($uri ~ '') {
      root /var/www/path_to_spa/dist;
    }
  }
}

Пути ресурсовЯ успешно подключил оба приложения.

Это выглядит достаточно хорошо для маршрутизации между приложениями Vue и CI, но приложение CI не в состоянии обрабатывать запросы POST и перенаправления сейчас, потому что я получаю 404s - вероятно, потому чтосвободной проверки URI.

Nginx запрещает условные (если) try_files операторы, поэтому я чувствую, что мои руки довольно связаны. Хотите знать, если кто-нибудь сможет помочь с более элегантным решением здесь:)

1 Ответ

0 голосов
/ 12 ноября 2019

Если конфигурация, которая у вас уже работает, работает нормально и выдает только ошибки при запросах POST, может быть, вы можете просто проверить, является ли она POST?

server { 
  set $vue 0;

  root /var/www;
  index index.php index.html;

  location / {
     # Codeigniter
     try_files $uri $uri/ /index.php?/$request_uri;

     if( $uri = '' ) {
        set $vue 1;
     }
     if ($request_method = POST ) {
       set $vue 0; 
     }

     #Vue SPA
     if( $vue = 1 ) {
        root /var/www/path_to_spa/dist;
     }
  }
}

Не проверено, но я думаю, вы можете заставить ее работать. Ура! * * 1004

...