zoukankan      html  css  js  c++  java
  • Nginx使用ngx_zeromq模块返回502错误的解决方法

    /*********************************************************************
     * Author  : Samson
     * Date    : 06/23/2015
     * Test platform:
     *              gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
     *              GNU bash, 4.3.11(1)-release (x86_64-pc-linux-gnu) 
     * Nginx version:
     *              Nginx 1.6.2
     *              Nginx 1.8.0
     * *******************************************************************/

    当使用了ngx_zeromq模块在nginx中,使用下面命令进行编译安装:

    ./configure --with-debug --add-module=./zeromq_module/ngx_zeromq/ --with-http_ssl_module


    开启一个zero_mq的ZMQ_REP模式的服务端程序,那么在web中输入http://127.0.0.1/时,返回502页面,再查看默认编译安装文件夹/usr/local/nginx/logs/error.log日志中,能够看到下面的错误导致的:

    2015/06/22 23:46:28 [alert] 43143#0: *1 connect() failed (88: Socket operation on non-socket) while connecting to upstream, client: 127.0.0.1, server: , request: "GET / HTTP/1.1", upstream: "http://tcp://127.0.0.1:5555/", host: "127.0.0.1"


    找到此行错误的代码所在文件为:

    src/http/ngx_http_upstream.c中的ngx_http_upstream_test_connect函数中。原来是因为getsockopt造成的,那么怎样解决问题呢?

    经过自己写zeromq的REQ和REP模式的方法后,相同使用zeromq创建的连接的socketfd来使用getsockopt来进行使用,也会出现这种错误,可是这并没有影响zeromq本身的通信。那也即是说nginx中的upstream模块中的getsockopt这种方法出错了对于zeromq来说无关紧要,那么将ngx_http_upstream_test_connect函数直接返回NGX_OK就可以解决问题。再进行安装測试就可以正常看到页面了。


    REF:

    ngx_zeromq模块:

    https://github.com/FRiCKLE/ngx_zeromq

    測试ngx_zeromqproject:

    https://github.com/jamesmarlowe/ngx-zmq-sample

  • 相关阅读:
    Java:Excel文件上传至后台
    JDK1.8中的HashMap实现
    Redis远程连接报错解决
    Redis操作命令总结
    HashMap实现原理及源码分析
    谈谈对Spring IOC的理解
    centos 7.3 服务器环境搭建——MySQL 安装和配置
    Linux系统下 docker安装命令
    JS求两个数组的交集 (假设数组已经经过排序)
    作用域和作用域链
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5161254.html
Copyright © 2011-2022 走看看