【问题标题】:Nginx configuration for a static Vue SPA and PHP app静态 Vue SPA 和 PHP 应用程序的 Nginx 配置
【发布时间】:2020-03-07 13:41:58
【问题描述】:

我知道这无论如何都不是一个理想的设置,但我希望有人可以帮助我使这个场景发挥作用。本质上,我有两个:

  • Vue SPA 应用程序

    • 营销前端
    • 只有几个 URI:
      • hxxps://domain.com
      • hxxps://domain.com/#/{首页|联系方式|登录}
  • Codeigniter (CI) PHP 应用程序

    • 主要应用
    • 具有多个 URI 端点的集中式路由器和类似 Laravel (index.php?$uri):
    • hxxps://domain.com/{仪表板|帐户|}

我真的试图避免在 Codeigniter 中嵌入静态 Vue 应用程序(似乎是额外的开销)并避免使用代理方法,因为它是静态内容并且不需要运行 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 和重定向请求,因为我收到了 404 - 可能是因为松散的 URI 检查。

Nginx 禁止条件 (if) try_files 语句,所以我觉得我的手很紧。想知道是否有人可以在这里提供更优雅的解决方案:)

【问题讨论】:

  • 而不是 if( $uri ~ '' ),你试过 location = / { 吗?
  • @PavelLint 我尝试了一个 location = / 并删除了 $uri 检查(针对 SPA)并为 PHP 应用程序设置了默认位置 /,但现在它现在只默认为 PHP 应用程序,不幸的是
  • 这是用于生产的吗?您使用的是哪个托管服务提供商?
  • 好的,但是这个配置现在可以工作了,除了 post-requests? IE。您在/ 上获得 SPA 应用程序,在其他路线上获得 PHP?
  • @PavelLint 是的,我奇怪的那个似乎同时加载了两者,只是 POST 请求返回 404。

标签: laravel codeigniter vue.js nginx vue-router


【解决方案1】:

如果您已经为您提供的配置很好并且只在 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;
     }
  }
}

未经测试,但我认为你可以让它工作。干杯!

【讨论】:

    猜你喜欢
    • 2017-01-17
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 2020-01-14
    • 2020-07-22
    • 1970-01-01
    相关资源
    最近更新 更多