nginx lua-resty-http нет маршрута к ошибке хоста

Я пытаюсь сделать http-запрос, используя lua-resty-http. Я создал простой API для получения в https://requestb.in

Я могу сделать запрос по адресу: https://requestb.in/snf2ltsn

Однако, когда я пытаюсь сделать это в nginx, я получаю сообщение об ошибке no route to host

Мой файл nginx.conf:

worker_processes  1;
error_log logs/error.log;
events {
    worker_connections 1024;
}
http {
    lua_package_path "$prefix/lua/?.lua;;";
    server {
        listen 8080;
        location / {
            resolver 8.8.8.8;
            default_type text/html;
            lua_code_cache off; #enables livereload for development
            content_by_lua_file ./lua/test.lua;
        }
    }
}

и мой код Lua

local http = require "resty.http"
local httpc = http.new()

--local res, err = httpc:request_uri("https://requestb.in/snf2ltsn", {ssl_verify = false,method = "GET" })

      local res, err = httpc:request_uri("https://requestb.in/snf2ltsn", {
        method = "GET",
        headers = {
          ["Content-Type"] = "application/x-www-form-urlencoded",
        }
      })

Как я могу решить эту проблему? Или есть предложение сделать http-запрос в nginx? любая подсказка?

PS: в моем коде Lua есть раздел с комментариями. Я также пытался сделать запрос, используя этот код, но ничего не произошло.


person MareCieco    schedule 14.10.2017    source источник


Ответы (2)


Измените package_path следующим образом:

lua_package_path "$prefix/resty_modules/lualib/?.lua;;";
lua_package_cpath "$prefix/resty_modules/lualib/?.so;;";
person Gurcan    schedule 16.01.2018

По умолчанию преобразователь nginx возвращает адреса IPv4 и IPv6 для данного домена.

Модуль resty.http использует API-интерфейс cosocket.

Метод подключения Cosocket, вызываемый с доменным именем, выбирает один случайный IP-адрес. Вам не повезло, и он выбрал адрес IPv6. Вы можете проверить это, заглянув в nginx error.log

Скорее всего, IPv6 не работает на вашем устройстве.

Чтобы отключить IPv6 для преобразователя nginx, используйте указанную ниже директиву в вашем регионе:

resolver 8.8.8.8 ipv6=off;
person Alexander Altshuler    schedule 15.10.2017