我的目标是为我的静态页面提供一个 Wordpress 网站,用于诸如/about-us
和之类的路由/contact
,然后为、和用户身份验证保护的路由提供捆绑的 Angular 应用/login/
程序/signup/
。
我已经配置了 nginx 来为我的 Wordpress 网站提供服务,但是,当我尝试访问/login/
将为用户提供 Angular 应用程序的页面时,我无法正确地重写 Web 根文件夹,并且服务器响应始终是默认的 nginx 404。
如何正确覆盖 Web 根文件夹以指向index.html
Angular 代码库?我知道我误用了下面最后一个块中的 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
我通过以下帮助找到了答案:
- nginx 的错误/访问日志 - @wombie
- 这个 stack overflow 答案很好地解释了 root 和 alias 之间的区别
- 官方 nginx 文档
/app/
通过更新最后一个位置块以从路由为 Angular 应用程序提供服务并将 nginx 定向到index.html
viaalias
而不是指令,我能够实现我的目标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;
}