配置 Nginx 以根据同一域名下同一 EC2 上的路由为 Wordpress 或 Angular 应用程序提供服务

配置 Nginx 以根据同一域名下同一 EC2 上的路由为 Wordpress 或 Angular 应用程序提供服务

我的目标是为我的静态页面提供一个 Wordpress 网站,用于诸如/about-us和之类的路由/contact,然后为、和用户身份验证保护的路由提供捆绑的 Angular 应用/login/程序/signup/

我已经配置了 nginx 来为我的 Wordpress 网站提供服务,但是,当我尝试访问/login/将为用户提供 Angular 应用程序的页面时,我无法正确地重写 Web 根文件夹,并且服务器响应始终是默认的 nginx 404。

如何正确覆盖 Web 根文件夹以指向index.htmlAngular 代码库?我知道我误用了下面最后一个块中的 root 指令location

  • Wordpress index.php 位置 =/var/www/wordpress
  • Angular index.html 位置 =/var/www/dist/my-app

我的 nginx 配置:

server {
  listen 80 default_server; 
  listen [::]:80 default_server; 

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

  server_name www.example.com example.com;

  if ($http_x_forwarded_proto = 'http'){
    return 301 https://$host$request_uri;
  }

  ### STATIC PAGE ROUTES ###

  location = / {
    # Wordpress site log files
    error_log /var/log/nginx/wordpress-error.log;
    access_log /var/log/nginx/wordpress-access.log;
    try_files $uri $uri/ /index.php?$args;
  }

  # following by a bunch of other Wordpress routes ...

  location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    include fastcgi_params;
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
  }

  ### PORTAL ROUTES ###

  location = /login/ {
    # Portal error logs
    error_log /var/log/nginx/portal-error.log;
    access_log /var/log/nginx/portal-access.log;
    root /var/www/dist/my-app;
    try_files $uri $uri/ /index.html

  }

  # would be other Angular routes ...

}

当使用上述配置导航到时,www.example.com/login/我的 nginx 日志中会出现以下错误:

...
2019/05/07 20:42:14 [error] 3311#3311: *1280 open() "/var/www/wordpress/index.html" failed (2: No such file or directory),
...

答案1

我通过以下帮助找到了答案:

/app/通过更新最后一个位置块以从路由为 Angular 应用程序提供服务并将 nginx 定向到index.htmlviaalias而不是指令,我能够实现我的目标root

更新了 Angularlocation块:

location ^~/app/ {
  # Portal log files
  error_log /var/log/nginx/portal-error.log;
  access_log /var/log/nginx/portal-access.log;
  alias /var/www/dist/may-app/;
  try_files $uri$args $uri$args/ /index.html =404; 
}

相关内容