这个问题已经回答过多次了,但就我而言有一个转折。
我有一个在端口 3000 上运行的节点应用程序。我正在使用 nginx 进行反向代理。现在,该应用程序只有在末尾有斜杠时才能工作。
因此这是可行的:https://example.com/main/site/react/
这不会:https://example.com/main/site/react
以下是我正在使用的配置:
location /main/site/react {
error_log /var/log/nginx/app.error.log;
rewrite ^/main/site/react/(?:|[\w\/]+)(\/static.*)$ $1 break;
rewrite ^/main/site/react/?(.*)$ /$1 break;
proxy_pass http://127.0.0.1:3000/;
}
在检查了其他相关问题后,添加以下重写规则(之后error_log
)对我有用:
rewrite ^(.*[^/])$ $1/ permanent;
上述规则渲染了我的节点应用程序,但静态资源失败。我有一些静态资源重写不起作用。
因此此 URL 不起作用:https://example.com/main/site/react/static/js/bundle.js
。它始终呈现索引 HTML 页面。
答案1
您的配置看起来不错。只需在末尾添加重写:
location /main/site/react {
rewrite ^/main/site/react$ https://$host/main/site/react/ permanent;
rewrite ^/main/site/react/(?:|[\w\/]+)(\/static.*)$ $1 break;
rewrite ^/main/site/react/?(.*)$ /$1 break;
proxy_pass http://127.0.0.1:3000;
}
还修改了正则表达式,它将处理查询参数前的斜线。