【问题标题】:Static sites with nginx and express.js - Authentification使用 nginx 和 express.js 的静态站点 - 身份验证
【发布时间】:2017-06-14 14:19:47
【问题描述】:

我的计划

在我的应用程序中,我想将后端与前端分开。我有多个使用 vue.js 访问快速服务器提供的 api 的静态站点。所有静态文件都应由 nginx 提供。
所以现在我的 nginx 配置文件看起来像这样:

http {
  ...
  upstream backend {
    server localhost:3000;
    keepalive 64;
  }
  ...
  server {
    ...
    location /api {
      ...
      proxy_pass http://backend;
    }
  }
}

所以对/api 的所有请求都由在端口3000 上运行的express 处理。用户可以通过访问后端 api 的前端登录。

现在到问题

我有一些网站(例如/dash)也是静态的,但只能由经过身份验证(身份验证由快速会话处理)和具有特定用户角色(例如editor)的用户访问。
不是editor 的用户在访问/dash 时应该得到error 403,而对于其他用户,/dash 应该由nginx 提供服务。

我希望我足够清楚,正确表达我的问题并不容易。我感谢任何帮助和建议,也许我的方法不是一个好主意或不好的做法。

编辑

答案可以在正确答案的cmets中找到。

【问题讨论】:

    标签: node.js express authentication nginx


    【解决方案1】:

    对于初学者来说,一些静态文件的授权应该在后端服务器而不是 nginx 中处理。 Nginx 只是一个代理,而不是授权处理程序。如果您使用的是 express,请查看passport

    其次,我认为您对静态文件有错误的想法。一个提示是编译它们以使它们更小(查看http://nginx.org/en/docs/http/ngx_http_gzip_module.html)。但这就是 nginx 处理静态文件的程度。

    【讨论】:

    • 感谢您的回答。我已经实施了身份验证,它是由快递处理的,我用的是护照。 Nginx 不应该渲染而只提供文件。这些文件比使用 ajax 访问 API。我想使用 nginx 来提供文件,因为它应该更快。但是我仍然想限制对某些站点的访问,我必须使用中间件检查用户是否被允许。对于每个其他站点,每个人都是允许的,所以只对那些使用 nginx。很抱歉造成混乱...
    • 我相信你应该在这件事上为你的整个网站使用 nginx。授权中间件应该确保正确的静态文件被渲染并提供给用户,nginx 只是你的服务器的反映,而不是实际的服务器
    • 好吧,您将服务器传递给代理。看看这个视频(英语有点糟糕,但足以达到这个目的):youtube.com/watch?v=OuRhaSQljsc
    • 好的!这是我之前的 nginx-setup 使用的:gist.githubusercontent.com/thajo/d5db8e679c1237dfdb76/raw/… - 如果有任何不清楚的地方,也许它会提供更多的理解!但是,是的,你应该只处理后端的授权,让 nginx 编译静态文件并提供 ssl-requests
    • Aaaah 好的,所以您使用 nginx 提供静态文件,例如图像、*.css、*.js 等(为了性能),对于其他一切,您通过代理来表达?太完美了!
    猜你喜欢
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 2019-09-16
    • 2016-07-26
    • 1970-01-01
    • 2020-12-15
    相关资源
    最近更新 更多