Обратный прокси-сервер Nginx, обслуживающий статический файл приложения Node.js - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть приложение Laravel, в котором один route / onlineAds перенесет меня в другое приложение (SPA), созданное с Vue.Js в качестве фронта и Node.js в качестве назад. Поэтому я пытаюсь использовать Nginx в качестве обратного прокси-сервера для обслуживания статических файлов моего SpaApp, но безуспешно.

Мой конфиг следующий:

/                   =>      will be serverd from "C:/laragon/www/laravel_App/public/"
/onlineAds/(*)      =>      will be serverd from "C:/laragon/www/VueNodeApp/dist/"
/api/(*)            =>      will be proxied to nodeJs server

Вот что я пытался сделать с Nginx:

server {
  listen 8080;
  server_name domain.test *.domain.test;
  root "C:/laragon/www/laravel_App/public/";

  index index.html index.htm index.php;

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

  location ~* ^\/onlineAds(.*)$ {
      alias "C:/laragon/www/craiglist/dist/";
      #try_files $uri $uri/ /index.html;
  }

  location ~* ^\/api(.*)$ {
      proxy_set_header        Host $host;
      proxy_set_header        Upgrade $http_upgrade;
      proxy_set_header        Connection 'upgrade';
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header        X-Forwarded-Proto $scheme;

      proxy_read_timeout      300;
      proxy_pass              http://localhost:8081;
  }

  location ~ \.php$ {
      include snippets/fastcgi-php.conf;
      fastcgi_pass php_upstream;        
      #fastcgi_pass unix:/run/php/php7.0-fpm.sock;
  }


  charset utf-8;

  location = /favicon.ico { access_log off; log_not_found off; }
  location = /robots.txt  { access_log off; log_not_found off; }
  location ~ /\.ht {
      deny all;
  }
}

Что я делаю не так?

1 Ответ

0 голосов
/ 14 ноября 2018

Для оператора alias в регулярном выражении location требуется полный путь к файлу. Подробнее см. в этом документе .

Например:

location ~* ^\/onlineAds(.*)$ {
    alias "C:/laragon/www/craiglist/dist$1";
    if (!-e $request_filename) { rewrite ^ /onlineAds/index.html last; }
}

Использование try_files с alias исключено из-за этой проблемы . См. это предупреждение об использовании if.


Предполагая, что URI /js/foo.js может находиться в C:/laragon/www/laravel_App/public/js/foo.js или C:/laragon/www/craiglist/dist/js/foo.js, вы можете попросить Nginx попробовать оба местоположения, используя try_files с общим каталогом root.

Например:

location /js/ {
    root "C:/laragon/www";
    try_files /laravel_App/public$uri /craiglist/dist$uri =404;
}
location /css/ {
    root "C:/laragon/www";
    try_files /laravel_App/public$uri /craiglist/dist$uri =404;
}
...