以下是我目前拥有的配置,用于基于用户代理在同一域上提供三个不同的React应用。此外,该API托管在特定子路由的同一域下。
upstream app {
server localhost:3000;
}
server {
index index.html;
server_name xyz.com;
location / {
root /var/www/html/desktop/build;
if ( $uri ~ "^(.*)/manage(.*)"){
root /var/www/html/admin/build;
/* this returns 404 page when directly loading /manage/login */
break;
}
set $mobile_rewrite do_not_perform;
if ($http_user_agent ~* ("Mobile agents match"){
set $mobile_rewrite perform;
}
if ($mobile_rewrite = perform) {
root /var/www/html/mobile/build;
break;
}
try_files $uri /index.html;
/* this try files never gets used because of if directive*/
}
location /api {
root /home/user/api-app;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://app;
proxy_read_timeout 600;
}
在配置上可能无法在同一个域上运行4个不同的应用程序,但是这是我目前的需要,有没有更好的方法来做到这一点。尝试使用alias
而不是root指令没有运气。我了解问题在于try_files
未被执行,这是在URL栏中直接输入路由时为React应用提供服务所必需的(如果未启用服务器端渲染,则我不使用服务器端)在这种情况下呈现)。