GVKun编程网logo

为什么我的Nginx反向代理node.js + express服务器redirect到0.0.0.0?(nginx反向代理 503的原因)

31

本文将带您了解关于为什么我的Nginx反向代理node.js+express服务器redirect到0.0.0.0?的新内容,同时我们还将为您解释nginx反向代理503的原因的相关知识,另外,我们还

本文将带您了解关于为什么我的Nginx反向代理node.js + express服务器redirect到0.0.0.0?的新内容,同时我们还将为您解释nginx反向代理 503的原因的相关知识,另外,我们还将为您提供关于Express engine 学习笔记 - 工作在反向代理背后的 Express 设置、javascript-Expressjs / Node.js-res.redirect()无法加载页面、Linux服务器上最简单的Nginx反向代理配置、nginx 反向代理mysql及redis(TCP反向代理) 反向代理多个服务器的实用信息。

本文目录一览:

为什么我的Nginx反向代理node.js + express服务器redirect到0.0.0.0?(nginx反向代理 503的原因)

为什么我的Nginx反向代理node.js + express服务器redirect到0.0.0.0?(nginx反向代理 503的原因)

我有一台服务器configuration为通过Ngnix前端在多个域中托pipe多个node.js + express应用程序。 一切工作都很好,除了呼叫redirect的呼叫是通过快速路由进行时:

res.redirect(''/admin'');

然后客户端浏览器被redirect到http://0.0.0.0:8090

看起来这肯定是一个redirect头文件出来的问题,但为了防万一,这里是相关域的Nginx.conf文件:

server { listen 0.0.0.0:80; server_name *.example.com; access_log /var/log/Nginx_example_access.log; error_log /var/log/Nginx_example_error.log debug; # proxy to node location / { proxy_pass http://0.0.0.0:8090/; proxy_redirect off; proxy_set_header Host $proxy_host; proxy_max_temp_file_size 0; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } }

Nginx作为Node.js的代理

Heroku上的Node.js + SSL。 SSL由Nginx或Node.js处理?

使用Nginx + Express进行URL指纹识别/极速caching

nodejs + https + express – 错误324(net :: ERR_EMPTY_RESPONSE)

从子文件夹服务Express.JS应用程序

得到一个错误 – 在Windows机器上听EADDRINUSE ::: 3000

Webstorm无法识别Windows和Ubuntu上的节点Express

Express在Ubuntu上不起作用

Expressjs – Elastic Beanstalk 502错误的网关

卷毛和邮差给予不同的回应?

解决了。 我的Nginx conf文件中有个问题,导致node / express收到错误的请求头。 当一个相对路径被传入res.redirect ,它将主机从传入的req对象中res.redirect ,并将其设置在response-header中。

proxy_set_header Host $proxy_host;

本来应该

proxy_set_header Host $host;

$proxy_host是上游主机地址0.0.0.0:port

$host是传入的请求头主机example.com

UPDATE

正如Louis Chatriot在评论中指出的那样,新版本的Nginx已经用$http_host代替了$host ,在之前的版本中,它返回example.com:port但现在返回example.com 。

总结

以上是小编为你收集整理的为什么我的Nginx反向代理node.js + express服务器redirect到0.0.0.0?全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

Express engine 学习笔记 - 工作在反向代理背后的 Express 设置

Express engine 学习笔记 - 工作在反向代理背后的 Express 设置

第22行的 express,返回的是一个 express Application 实例。

再看该实例的 set 方法:

app.set(name, value)

将设置名称分配给值。 您可以存储您想要的任何值,但某些名称可用于配置服务器的行为。 这些特殊名称列在应用程序设置表中。

为布尔属性调用 app.set(‘foo’, true) 与调用 app.enable(‘foo’) 相同。 同样,为布尔属性调用 app.set(‘foo’, false) 与调用 app.disable(‘foo’) 相同。

使用 app.get() 检索设置的值。

Express behind proxies

在反向代理后面运行 Express 应用程序时,某些 Express API 可能返回与预期不同的值。 为了对此进行调整,可以使用 trust proxy 应用程序设置来公开 Express API 中反向代理提供的信息。

最常见的问题是公开客户端 IP 地址的 express API 可能会显示反向代理的内部 IP 地址。这并不是我们期望的。

server.set(''trust proxy'', ''loopback'');

trust proxy 的属性可以设置成以下几种类型:

设置成 boolean

如果为 true,则客户端的 IP 地址被理解为 X-Forwarded-For 标头中最左侧的条目。

如果为 false,则应用程序被理解为直接面向客户端,并且客户端的 IP 地址来自 req.socket.remoteAddress。 这是默认设置。

设置为 true 时,确保最后一个受信任的反向代理删除/覆盖以下所有 HTTP 标头很重要:X-Forwarded-For、X-Forwarded-Host 和 X-Forwarded-Proto,否则的话,客户可能为这几个字段提供任何价值。

设置成 ip 地址

作为反向代理信任的 IP 地址、子网或一组 IP 地址和子网。 以下列表显示了预配置的子网名称:

  • loopback - 127.0.0.1/8, ::1/128
  • linklocal - 169.254.0.0/16, fe80::/10
  • uniquelocal - 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7

一些例子:

app.set(''trust proxy'', ''loopback'') // specify a single subnet
app.set(''trust proxy'', ''loopback, 123.123.123.123'') // specify a subnet and an address
app.set(''trust proxy'', ''loopback, linklocal, uniquelocal'') // specify multiple subnets as CSV
app.set(''trust proxy'', [''loopback'', ''linklocal'', ''uniquelocal'']) // specify multiple subnets as an array

指定时,IP 地址或子网将被排除在地址确定过程之外,并且离应用服务器最近的不受信任的 IP 地址被确定为客户端的 IP 地址。 这通过检查 req.socket.remoteAddress 是否可信来工作。 如果是,则从右到左检查 X-Forwarded-For 中的每个地址,直到第一个不可信地址。

启用信任代理将产生以下影响:

  • req.hostname 的值来自 X-Forwarded-Host 头中设置的值,可以由客户端或代理设置。

  • X-Forwarded-Proto 可以由反向代理设置来告诉应用程序是 https 还是 http 甚至是无效名称。 该值由 req.protocol 反映。

  • req.ip 和 req.ips 值基于套接字地址和 X-Forwarded-For 标头填充,从第一个不受信任的地址开始。

更多Jerry的原创文章,尽在:“汪子熙”:

本文同步分享在 博客“汪子熙”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

javascript-Expressjs / Node.js-res.redirect()无法加载页面

javascript-Expressjs / Node.js-res.redirect()无法加载页面

我有一个页面,该页面的路线GET / team正在加载球队列表,而DEL / team则正在从/ team /:key中删除球队.因此,您导航到团队的资料页面并从那里删除它们,删除后,它应将您重定向到/ team页面.我已将日志放入控制台,并且它已成功删除了该团队,并且奇怪地说,它正在加载/ team,但浏览器不会加载它.我将代码放在下面,有什么想法吗?

路线:

  app.get(''/team''/*, lim("Must be logged in to see teams")*/, getAllTeams, function(req, res){
    util.log(''Serving request for url [GET] '' + req.route.path);
    // Pass it the list of all Teams
    res.render(''team'', {''teamsList'' : req.teamsList} );
  });

  app.get(''/team/:key'', function(req, res) {
    util.log(''Serving request for url [GET] '' + req.route.path);
    Team.findByKey(req.params.key, function(err, teamData){
      if(!err && teamData){
        teamData = teamData;
        res.render(''teamDetails'', { ''teamData'' : teamData } );
      } else {
        util.log(''Error in fetching Team by key : '' + req.params.key);
        res.json({
          ''retStatus'' : ''failure'',
          ''msg'' : ''Error in fetching Team by key '' + req.params.key
        });
      }
    });
  });

  /**
    * DEL /team/:key
    * Delete Team by key
    */
  app.del(''/team/:key'', getAllTeams, function(req, res) {
    util.log(''Serving request for url [DEL] '' + req.route.path);    
    Team.remove({key : req.params.key}, function(err){
      var message = '''';
      var retStatus = '''';
      if (!err) {
        util.log(''Successfully deleting Team with key: '' + req.params.key);
        message = ''Successfully deleting Team with key: '' + req.params.key;
        retStatus = ''Success'';
        res.redirect(''/team'');
      } else {
        util.log(''Error deleting Team with key: '' + req.params.key + ''Error: '' + util.inspect(err));
        res.json({
          ''retStatus'' : ''failure'',
          ''msg'' : ''Error in fetching Team with key '' + req.params.key
        });
      }
    });
  });

JavaScript HTML模板:

        button#teamDelete.btn.btn-danger.btn-mini(type="submit", value="Delete Team") Delete
        script(type=''text/javascript'')
            $(''#teamDelete'').live(''click'',function(){ 
                var teamId = #{teamData.key};
                $.post(''/team/'' + teamId, { _method : ''delete'' }, function(response) {
                    console.log(response);
                    if(response.retStatus === ''Success'') {
                        if(''/team'' && ''/team'' !== "") {
                            window.location = ''/team'';
                        }
                    }
                });
            });

控制台日志:

10 Mar 11:52:01 - Serving request for url [GET] /team
10 Mar 11:52:02 - Serving request for url [GET] /team/:key
10 Mar 11:52:03 - Serving request for url [DEL] /team/:key
10 Mar 11:52:03 - Successfully deleting Team with key: 1362855941128
10 Mar 11:52:03 - Serving request for url [GET] /team

getAllTeams:

var getAllTeams = function(req, res, next){
  Team.getAll(function(err, teamsList){
    if(!err && teamsList){
      req.teamsList = teamsList;
      return next();
    }
  });
};

Team.getAll(团队架构)

Team.statics.getAll = function(cb){
    var query = this.find({});
    query.sort({key : -1});
    return query.exec(cb);
  };

解决方法:

您的请求是POST($.post),而您的路由是app.del,因此它永远不会到达app.del路由内的res.redirect.

为什么不使用app.post?

更新:

假设$.post在这里发送HTTP DEL请求,这是怎么回事:服务器发送302响应但没有数据,但是浏览器从不按照服务器的指示向GET路由发送另一个请求(或者jQuery是否也处理重定向?不确定). res.redirect()是实际的HTTP响应,不是一些内部服务器端指令来将请求重新路由到另一条路由,就像您在ASP.NET中所做的一样(实际上这是错误的)…路由旨在接收请求,回复并忘记它.您需要将路由与处理它们的实际函数分开,然后您将能够调用该函数而不是发送重定向.

代码建议

在app.del(‘/ team /:key’…

...
    retStatus = ''Success'';
    // res.redirect(''/team'');
    res.send({
      retStatus : retStatus,
      redirectTo: ''/team'',
      msg : ''Just go there please'' // this should help
    });
...

客户端在$.post(‘/ team /’…

...
    $.post(''/team/'' + teamId, { _method : ''delete'' }, function(response) {
        console.log(response);
        if(response.retStatus === ''Success'') {
            // not sure what did you mean by (''/team'' && ''/team'' !== "")
            // if(''/team'' && ''/team'' !== "") {
            if (response.redirectTo && response.msg == ''Just go there please'') {
                window.location = response.redirectTo;
            }
        }
    });
...

但不确定是否能正常工作,因为我不知道您的getAllTeams会做什么以及为什么将teamList存储在req中.如果要存储在会话中,则除了假设正确配置了中间件外,还需要使用req.session.如果您只需要在请求中存储它,并且getAllTeams准备此团队列表,则最好将其存储在res.locals中(例如res.locals.teamList).
并确保接下来调用getAllTeams.因此,基本上,您的getAllTeams应该如下所示:

function getAllTeams (req, res, next) {
    res.locals.teamList = [/* whatever */];
    next();
}

然后,您可以在路由处理程序中使用res.locals.teamList而不是req.teamList.

res.render(''team'', {teamsList : res.locals.teamsList} );

而且“团队”模板也可能有问题…

表达建议:)

同样,使用Express的方式使扩展/管理应用程序变得非常困难.我不记得确切的位置了,但是他们在文档中的某个地方写道,应该将Express用作应用程序框架的基础,而不是像大多数PHP框架一样用作完整的框架.它不仅为您提供了强大的功能和灵活性,而且还需要提前仔细考虑您的应用程序体系结构.

express的最强大功能是,您可以让许多特定于路由的处理程序/中间件处理任何路由,这些处理程序/中间件通过next()相互传递控制权.我有一个静态表,该表定义每个路由上使用了哪些处理程序,从而可以在一页上查看包含30条左右路由的整个应用程序.该表用于在应用程序启动时动态组装路由.它带来了很大的灵活性,可管理性(我可以在路由之间移动/复制粘贴处理程序-每个处理程序表示为一个单词)和代码重用.我还将客户端中路由定义的相同哈希用于客户端路由.

总结

以上是小编为你收集整理的javascript-Expressjs / Node.js-res.redirect()无法加载页面全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

原文地址:https://codeday.me/bug/20191031/1973585.html

Linux服务器上最简单的Nginx反向代理配置

Linux服务器上最简单的Nginx反向代理配置

Nginx不但是一款高性能的Web服务器,也是高性能的反向代理服务器。简单的可以理解为直接让当前的访问地址跳转到其他的网站上去。

反向代理指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部或其他网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端。

实现方法:

1、在我的域名解析管理中定义一个域名 login.hitoky.com 并且指定到我的服务器;

2、在nginx中进行配置操作:

server
{
    listen 80;
    server_name login.hitoky.com;
    location / {
        proxy_pass http://www.baidu.com/;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

4、重新或者刷新服务器,是配置生效:

    /etc/init.d/nginx restart/reload

5、可以直接访问当前域名  login.hitoky.com   会直接的跳转到百度;

 

nginx 反向代理mysql及redis(TCP反向代理) 反向代理多个服务器

nginx 反向代理mysql及redis(TCP反向代理) 反向代理多个服务器

stream {        #定义stream;TCP模块是和HTTP一样的一个独立模块,所以不能设置在HTTP里面。
   upstream mysql-server {    #定义后端服务器
       server 192.168.38.37:3306 max_fails=3 fail_timeout=30s;     #定义具体server
   }

   upstream redis-server {
       server 192.168.38.47:6379 max_fails=3 fail_timeout=30s;
   }

   server {     #定义server
       listen 3306;                  #监听本机所有IP的3306端口
       proxy_connect_timeout 30s;    #连接超时时间
       proxy_timeout 30s;            #转发超时时间
       proxy_pass mysql-server;      #转发到具体服务器组
   }

   server {
       listen 192.168.38.27:6379;    #监听在本机的192.168.38.27的6379端口
       proxy_connect_timeout 30s;
       proxy_timeout 30s;
       proxy_pass redis-server;
   }
}
TCP反向代理是基于IP和端口号;这个设置不要设置在http模块中,tcp和http是两个独立的模块,不要设置在一起。

  

示例配置:

stream{
    #proxy 192.168.1.222
	upstream proxy222{
        server 192.168.1.222:502 weight=1 max_fails=2 fail_timeout=60s;
    }
	server{
			listen 512;
			proxy_connect_timeout 30s;
			proxy_timeout 30s;
			proxy_pass proxy222;
	}
	#proxy 192.168.1.224
    upstream proxy224{
        server 192.168.1.224:502 weight=1 max_fails=2 fail_timeout=60s;
    }
	server{
			listen 513;
			proxy_connect_timeout 30s;
			proxy_timeout 30s;
			proxy_pass proxy224;
	}
	#proxy 192.168.1.225
    upstream proxy225{
        server 192.168.1.225:502 weight=1 max_fails=2 fail_timeout=60s;
    }
	server{
			listen 514;
			proxy_connect_timeout 30s;
			proxy_timeout 30s;
			proxy_pass proxy225;
	}
}

  

今天的关于为什么我的Nginx反向代理node.js + express服务器redirect到0.0.0.0?nginx反向代理 503的原因的分享已经结束,谢谢您的关注,如果想了解更多关于Express engine 学习笔记 - 工作在反向代理背后的 Express 设置、javascript-Expressjs / Node.js-res.redirect()无法加载页面、Linux服务器上最简单的Nginx反向代理配置、nginx 反向代理mysql及redis(TCP反向代理) 反向代理多个服务器的相关知识,请在本站进行查询。

本文标签: