Nginx 与节点应用程序和现有应用程序

Nginx 与节点应用程序和现有应用程序

我对 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 路由器

相关内容