【问题标题】:Nginx, Express Routing issuesNginx,快速路由问题
【发布时间】:2021-04-17 15:21:06
【问题描述】:

我有一个在 nginx 反向代理后面运行的应用程序,该应用程序运行良好。 该应用程序是使用 express 构建的,使用 ejs 作为模板引擎。 但是当我把它放在云上并将它设置在代理后面时,问题就发生了。

这是我的 nginx 配置:


 server{
     listen 80;
     listen [::]:80;
     error_log /var/log/nginx/reverse_proxy_error.log;
     access_log /var/log/nginx/reverse_proxy_access.log;

     # I put this to redirect traffic from / to /preview/app/
     location / {
       return 302 /preview/app/;
     }
     
     location /preview/app/{
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto https;
          proxy_redirect off;
          proxy_set_header Host $host;
          proxy_pass http://localhost:3000/;
          access_log /var/log/nginx/app_access.log; 
          error_log /var/log/nginx/app_client_error.log;
     }

}

这是我的视图模板(EJS):

<div class="container d-flex align-items-center justify-content-between">
    <h1 class="logo"><a href="/">AppName.</a></h1>
    <!-- Uncomment below if you prefer to use an image logo -->
    <!-- <a href="index.html" class="logo"><img src="assets/img/logo.png" alt="" class="img-fluid"></a>-->
    <nav class="nav-menu d-none d-lg-block">
        <ul>
            <li class="<%= active==='home'?'active':''%>"><a href="/">Home</a></li>
            <li class="<%= active==='contact'?'active':''%>"><a href="/contact" >Contact</a></li>
        </ul>
    </nav><!-- .nav-menu -->
</div>


问题是当我点击锚标签()时,nginx会解决它 类似于$host/[PATH_IN_ANCHOR_TAG],就我而言,我希望它是$host/[MY_APP_PATH]/[PATH_IN_ANCHOR_TAG] 例如,如果我单击联系人锚点,它将解析为 101.x.x.x/contact 而不是 101.x.x.x/preview/app/

我的第一个虽然是双斜线发生在某处,所以我尝试从 我的锚标签,变成:

<li class="<%= active==='contact'?'active':''%>"><a href="contact" >Contact</a></li>

现在它很好地解析为我期望的 url,但现在我必须更改我的应用程序菜单中的所有锚标记,这太多了。 而且,如果我尝试直接将其运行到外部(没有 nginx),则 url 也会中断。 所以我决定更好地设置 nginx 本身

我的配置有什么问题?

重要提示

  • /etc/nginx 设置中仅保留默认的 nginx.conf
  • 网站上的所有文件 - 可用已链接到启用的网站

【问题讨论】:

    标签: express nginx routes ejs reverse-proxy


    【解决方案1】:

    可能是个愚蠢的问题,但是为什么不在 nginx 文件中设置应用程序的根位置?

    示例:

    my app is in: /home/user/folder/app
    

    所以在我的 nginx 域文件中:

    root /home/user/folder/app
    

    通过代理进行的任何其他重定向:

    location / {
    proxy_pass 'PATH or IP with port'
    }
    

    【讨论】:

    • 而您的回答甚至与我的问题无关,这与根指令无关
    • 如果你这么说,好吧
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-26
    • 2021-03-08
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多