nginx nodejs express反向代理问题

发布于 2022-09-05 07:55:08 字数 1024 浏览 12 评论 0

1.我有一个nodejs程序,使用express开发,在本地测试环境是直接使用express做静态资源和路由转发的
2.现在迁移到生产环境,有nginx 做反向代理,负责静态资源

问题:

问题1.配置好之后我发现静态资源都是404,然后我在nginx的配置文件里面加了

 location ~ \.(css)$ {
        expires 2d;
    root /app/www/nodejs-blog-demo/public;
    }
    location ~ \.(js)$ {
        expires 2d;
    root /app/www/nodejs-blog-demo/public;
    }

之后,起码可以访问静态资源了,但是如果我的静态资源是多级目录的话,这样的匹配规则会很繁复,请问大家是怎么处理的呢?

问题2.我的nginx是这么配的反向代理,3000是nodejs,不过现在处理/目录可以访问,但是我的/admin/aaa这样的路径就提示404

    location / {
        proxy_pass              http://127.0.0.1:3000;
        proxy_redirect          off;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }

我想可能是我是用nodejs做的路由处理导致的,但是不明白怎么解决

我的nodejs路由如下

module.exports = function (app) {
  app.use('/admin', router);
}

router.get('/aaa', auth.requireLogin, function (req, res, next) {})

谢谢.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

两相知 2022-09-12 07:55:08

express做静态路由不是很方便的吗,我最近也是直接把本地博客迁移到了服务器上,我的静态路由还是用的express

app.use(express.static(path.join(__dirname, 'public')));
欢烬 2022-09-12 07:55:08

我刚做了这个,给你做个参考吧。。不知道能不能帮你解决,或者可能你已经解决了。

前提

nodejs项目: 监听3000端口,express自己做路由,静态服务。
目标:访问80端口,nginx做端口转发。

nginx 反向代理配置

我只是做了些简单配置,因为我也是初学。

  1. /etc/nginx/sites-availabe/ 下添加一个配置文件,比如 mySite。这里可以直接copy一份default。

  2. 在mySite下配置站点信息。

    server {
     # 监听的端口
     listen 80;
    
     # 监听的域名
     server_name a.b.com; 
    
     location / {
        proxy_pass http://a.b.com:3000;
     }
    }
    
    # 这样就已经可以了。这里是直接将所有的请求全部转发给node。node自己做路由服务及静态服务。 
    
    # 如果你需要 nginx 做反向代理, 负责静态资源,可以在location / {...} 上面 再加一个 
    
    location /public/ {
       root /home/wwwroot/a.b.com/public/
    }
    
    # url匹配可以正则。你可以自己修改下。
  3. 然后在/etc/nginx/sites-enabled/下新建一个symbol link到刚才的配置文件。

  4. nginx reload就可以了。

另外你的问题2

问题 2. 我的 nginx 是这么配的反向代理, 3000 是 nodejs, 不过现在处理 / 目录可以访问, 但是我的 / admin/aaa 这样的路径就提示 404

我也是遇到这个问题,我的解决方法是在location / {...}里,加了 try_files $uri $uri/ =404; ,我把这行注释了就好了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文