我对 nginx 完全陌生,我正在尝试设置一些东西,以便可以从远程服务器上的现有应用程序导航到节点应用程序。节点应用程序将位于同一台服务器上。目前,一切都在我的本地计算机上,我已经启动了一个带有其默认索引页的简单 nginx 实例,即导航到https://localhost
将呈现默认Welcome to Nginx
页面。我希望能够使用 导航到我的节点应用程序https://localhost/app
,其中url 的一部分只是一个别名。实际上app
没有目录。这可能吗?app
目前,如果我localhost:3000
在浏览器中运行,localhost:3000/login
如果用户未通过身份验证,它将重定向到。因此https://localhost/app
也应该重定向到https://localhost/app/login
等等。我无法让它工作,因为我尝试app
在 uri 即 中请求静态资源时收到 404 错误.../public/app/css
。它应该是.../public/css
。js 和图像也一样。所以很明显我的别名不起作用。我的配置如下:
upstream nodeapp {
server localhost:3000;
}
server {
listen 80;
listen [::]:80;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
include snippets/snakeoil.conf; # Temp cert for testing
location /app/ {
alias /home/path/to/public;
proxy_pass http://nodeApp;
proxy_http_version 1.1;
proxy_set_header Upgrade websocket;
proxy_set_header Connection upgrade;
}
我看过很多类似的问题,也尝试过各种配置,但现在我完全没有主意了。任何帮助都将不胜感激!
编辑:如果我在 proxy_pass 末尾添加一个斜杠,proxy_pass http://nodeApp/;
它会重定向到localhost/login
我得到 404 的地方,因为显然那里没有设置页面。我真的必须为我的节点应用程序中的每个路由添加一个位置吗?一定有办法做到这一点。:-/
答案1
重定向问题可以通过以下方式轻松解决代理重定向指示:
proxy_redirect http://nodeApp/ /app/;
或者更容易:
location /app/ {
proxy_pass http://nodeApp/;
proxy_redirect default;
# rest of directives
}
但是,这将是您遇到的第一个不正确的问题URL
:应用程序生成的使用绝对路径的链接将缺少组件/app
。解决此问题最简单的方法是http://localhost:3000/app
通过调整Express 路由器。