OpenResty - 使用 lua 进行 http 调用时没有响应

问题描述

从我的 Nginx 中向 url 发出请求时,始终不存在此请求的响应。好像没有发送请求。

这是我的 Nginx.conf

worker_processes  1;
error_log logs/error.log;
events {
    worker_connections 1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" "$http_clientid"';

    access_log  logs/access.log  main;

    server {
        listen 8080;

        location /token-test {
          access_log logs/token.log main;

          content_by_lua_block {
            local cjson = require "cjson"
            local http = require "resty.http"
            local httpc = http.new()
            local ngx = ngx
            
            local res,err = httpc:request_uri("http://www.google.de",{method="GET"})

            if not res then
               ngx.say(cjson.encode({message = "Error getting response",status = ngx.HTTP_INTERNAL_SERVER_ERROR }))
               return ngx.HTTP_INTERNAL_SERVER_ERROR
            end

            return ngx.HTTP_OK
          }
        }
  }
}

我收到了这个响应正文的 200 响应状态:

{
  "status": 500,"message": "Error getting response"
}

日志中没有错误

为什么我得到的是 200 响应而不是 500,为什么响应正文包含来自不存在条件块的消息?

更新 我记录了错误no resolver defined to resolve \"www.google.de\"

谢谢丹尼

解决方法

没有定义解析器来解析“www.google.de”

您需要配置resolver

https://github.com/openresty/lua-nginx-module#tcpsockconnect

如果是域名,这个方法会使用Nginx core的动态解析器​​来解析域名,不会阻塞,需要在nginx.conf文件中像这样配置resolver指令:

resolver 8.8.8.8;  # use Google's public DNS nameserver

为什么我得到的是 200 而不是 500

您应该调用 ngx.exit 来中断请求的执行并返回状态代码。

替换

return ngx.HTTP_INTERNAL_SERVER_ERROR

ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR)