开发者社区> 问答> 正文

nginx+lua+memcached,报错:curl: (52) Empty ?报错

server {
  listen 80;
  server_name localhost;
  index index.html index.htm index.jsp;
  root /www;
  
  autoindex on;
  autoindex_exact_size on;
  autoindex_localtime on;

  location / {
    default_type text/html;

    access_by_lua '
      clinetIP = ngx.req.get_headers()["X-Real-IP"]
      if clinetIP == nil then
        clientIP = ngx.req.get_headers()["x_forwarded_for"]
      end
      if clinetIP == nil then
        clinetIP = ngx.var.remote_addr
      end
      ngx.say(clientIP)
      
      local memcached = require "resty.memcached"
      local memc, err = memcached:new()
      if not memc then
        ngx.say("failed to instantiate memc: ", err)
        return
      end
      local ok, err = memc:connect("127.0.0.1", 11211)
      if not ok then
        ngx.say("failed to connect: ", err)
        return
      end
      
      local res, flags, err = memc:get("id")
      ngx.say(res)
    
      if err then
        ngx.say("failed to get clientIP ", err)
        return
      end

      if res == "1" then
        ngx.exec("@client_test")
        return
      end

      ngx.exec("@client")
    ';
  }

  location @client{
    echo "client";
  }

  location @client_test{
    echo "client_test";
  }
}
nginx -t 通过

但是执行curl http://localhost/,报错:

curl: (52) Empty reply from server

这是什么意思?




展开
收起
爱吃鱼的程序员 2020-06-14 18:06:52 506 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    ngx.say() 即response

    ngx.exec()是内部重定向

    你不能响应后再内部重定向。

    1.用浏览器访问,看是否可以

    2.尝试用curlhttp://本机ip地址,是否可以

    3.尝试用curlhttp://127.0.0.1,是否可以

    如果可以,应该是权限问题。sudo,或者用root登录运行就可以了。

    我现在都是在root下操作的

    引用来自“char1st”的评论

    ngx.say() 即response

    ngx.exec()是内部重定向

    你不能响应后再内部重定向。

    去看tengine的error.log。PS最好把lua代码单独写一个文件。

    引用来自“char1st”的评论

    ngx.say() 即response

    ngx.exec()是内部重定向

    你不能响应后再内部重定向。

    我直接用的是openRestyhttp://openresty.org/cn/index.html这个打包好了很多lua组件。

    引用来自“char1st”的评论

    ngx.say() 即response

    ngx.exec()是内部重定向

    你不能响应后再内部重定向。

    2020-06-14 18:07:08
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
《Nginx 代理系统常用手册》 立即下载
CentOS Nginx PHP JAVA 多语言镜像使用手 立即下载
CentOS Nginx PHP JAVA多语言镜像使用手册 立即下载