Я пишу модуль nginx, который должен загрузить загрузку удаленного файла перед отправкой ответа клиенту.
Пользователь передает идентификатор в URL. Я использую этот идентификатор для загрузки URL-адреса в удаленный файл. Мой тест выглядит примерно так:
wget http://example.com/?id=123
Идентификатор 123
преобразуется в URL, такой как
http://other.example.com/image/cute.png
Теперь мне нужно загрузить cute.png
из моего nginx
модуля. Могу ли я сделать это с ngx_request
или, может быть, ngx_upstream
? Я не смог найти четкую документацию, которая показала бы, как это сделать ...
Обновление:
Я теперь (наконец-то!) Нашел функцию подзапроса :
ngx_int_t rc;
ngx_str_t uri;
ngx_http_request_t *sr;
...
/* THIS IS WHAT WAS WRONG */
ngx_str_set(&uri, "http://other.example.com/image/cute.png");
rc = ngx_http_subrequest(r, &uri, NULL, &sr, NULL, 0);
if (rc != NGX_OK) {
/* error */
}
Однако вместо ответа со стороннего веб-сайта я получаю 404 ошибки со следующим HTML-кодом:
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.10.3 (Ubuntu)</center>
</body>
</html>
Мне кажется, что сейчас он запрашивает мой сервер nginx, а не использует внешнее TCP-соединение для получения файла со стороннего веб-сайта ...
Может быть, какая-то идея может быть неправильной в таком простом утверждении?