nghttpx: More log output when resolving addresses for better debugging
This commit is contained in:
parent
7adfa5dea7
commit
eb0c82d91f
|
@ -167,6 +167,10 @@ int main(int argc, char *argv[]) {
|
||||||
!CU_add_test(pSuite, "util_get_uint64", shrpx::test_util_get_uint64) ||
|
!CU_add_test(pSuite, "util_get_uint64", shrpx::test_util_get_uint64) ||
|
||||||
!CU_add_test(pSuite, "util_parse_config_str_list",
|
!CU_add_test(pSuite, "util_parse_config_str_list",
|
||||||
shrpx::test_util_parse_config_str_list) ||
|
shrpx::test_util_parse_config_str_list) ||
|
||||||
|
!CU_add_test(pSuite, "util_make_http_hostport",
|
||||||
|
shrpx::test_util_make_http_hostport) ||
|
||||||
|
!CU_add_test(pSuite, "util_make_hostport",
|
||||||
|
shrpx::test_util_make_hostport) ||
|
||||||
!CU_add_test(pSuite, "gzip_inflate", test_nghttp2_gzip_inflate) ||
|
!CU_add_test(pSuite, "gzip_inflate", test_nghttp2_gzip_inflate) ||
|
||||||
!CU_add_test(pSuite, "buffer_write", nghttp2::test_buffer_write) ||
|
!CU_add_test(pSuite, "buffer_write", nghttp2::test_buffer_write) ||
|
||||||
!CU_add_test(pSuite, "pool_recycle", nghttp2::test_pool_recycle) ||
|
!CU_add_test(pSuite, "pool_recycle", nghttp2::test_pool_recycle) ||
|
||||||
|
|
39
src/shrpx.cc
39
src/shrpx.cc
|
@ -656,7 +656,7 @@ int create_tcp_server_socket(UpstreamAddr &faddr,
|
||||||
}
|
}
|
||||||
|
|
||||||
faddr.fd = fd;
|
faddr.fd = fd;
|
||||||
faddr.hostport = util::make_hostport(host.data(), faddr.port);
|
faddr.hostport = util::make_http_hostport(host.data(), faddr.port);
|
||||||
|
|
||||||
LOG(NOTICE) << "Listening on " << faddr.hostport;
|
LOG(NOTICE) << "Listening on " << faddr.hostport;
|
||||||
|
|
||||||
|
@ -2178,8 +2178,10 @@ void process_options(
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG(INFO) << "Use UNIX domain socket path " << path
|
if (LOG_ENABLED(INFO)) {
|
||||||
<< " for backend connection";
|
LOG(INFO) << "Use UNIX domain socket path " << path
|
||||||
|
<< " for backend connection";
|
||||||
|
}
|
||||||
|
|
||||||
addr.addr.su.un.sun_family = AF_UNIX;
|
addr.addr.su.un.sun_family = AF_UNIX;
|
||||||
// copy path including terminal NULL
|
// copy path including terminal NULL
|
||||||
|
@ -2189,44 +2191,65 @@ void process_options(
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
addr.hostport =
|
addr.hostport = ImmutableString(
|
||||||
ImmutableString(util::make_hostport(addr.host.c_str(), addr.port));
|
util::make_http_hostport(StringRef(addr.host), addr.port));
|
||||||
|
|
||||||
|
auto hostport = util::make_hostport(addr.host.c_str(), addr.port);
|
||||||
|
|
||||||
if (resolve_hostname(&addr.addr, addr.host.c_str(), addr.port,
|
if (resolve_hostname(&addr.addr, addr.host.c_str(), addr.port,
|
||||||
downstreamconf.family) == -1) {
|
downstreamconf.family) == -1) {
|
||||||
|
LOG(FATAL) << "Resolving backend address failed: " << hostport;
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
LOG(NOTICE) << "Resolved backend address: " << hostport << " -> "
|
||||||
|
<< util::numeric_hostport(&addr.addr.su.sa, addr.addr.len);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto &proxy = mod_config()->downstream_http_proxy;
|
auto &proxy = mod_config()->downstream_http_proxy;
|
||||||
if (!proxy.host.empty()) {
|
if (!proxy.host.empty()) {
|
||||||
if (LOG_ENABLED(INFO)) {
|
auto hostport = util::make_hostport(proxy.host.c_str(), proxy.port);
|
||||||
LOG(INFO) << "Resolving backend http proxy address";
|
|
||||||
}
|
|
||||||
if (resolve_hostname(&proxy.addr, proxy.host.c_str(), proxy.port,
|
if (resolve_hostname(&proxy.addr, proxy.host.c_str(), proxy.port,
|
||||||
AF_UNSPEC) == -1) {
|
AF_UNSPEC) == -1) {
|
||||||
|
LOG(FATAL) << "Resolving backend HTTP proxy address failed: " << hostport;
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
LOG(NOTICE) << "Backend HTTP proxy address: " << hostport << " -> "
|
||||||
|
<< util::numeric_hostport(&proxy.addr.su.sa, proxy.addr.len);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
auto &memcachedconf = tlsconf.session_cache.memcached;
|
auto &memcachedconf = tlsconf.session_cache.memcached;
|
||||||
if (memcachedconf.host) {
|
if (memcachedconf.host) {
|
||||||
|
auto hostport =
|
||||||
|
util::make_hostport(memcachedconf.host.get(), memcachedconf.port);
|
||||||
if (resolve_hostname(&memcachedconf.addr, memcachedconf.host.get(),
|
if (resolve_hostname(&memcachedconf.addr, memcachedconf.host.get(),
|
||||||
memcachedconf.port, memcachedconf.family) == -1) {
|
memcachedconf.port, memcachedconf.family) == -1) {
|
||||||
|
LOG(FATAL)
|
||||||
|
<< "Resolving memcached address for TLS session cache failed: "
|
||||||
|
<< hostport;
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
LOG(NOTICE) << "Memcached address for TLS session cache: " << hostport
|
||||||
|
<< " -> " << util::numeric_hostport(&memcachedconf.addr.su.sa,
|
||||||
|
memcachedconf.addr.len);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
auto &memcachedconf = tlsconf.ticket.memcached;
|
auto &memcachedconf = tlsconf.ticket.memcached;
|
||||||
if (memcachedconf.host) {
|
if (memcachedconf.host) {
|
||||||
|
auto hostport =
|
||||||
|
util::make_hostport(memcachedconf.host.get(), memcachedconf.port);
|
||||||
if (resolve_hostname(&memcachedconf.addr, memcachedconf.host.get(),
|
if (resolve_hostname(&memcachedconf.addr, memcachedconf.host.get(),
|
||||||
memcachedconf.port, memcachedconf.family) == -1) {
|
memcachedconf.port, memcachedconf.family) == -1) {
|
||||||
|
LOG(FATAL) << "Resolving memcached address for TLS ticket key failed: "
|
||||||
|
<< hostport;
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
LOG(NOTICE) << "Memcached address for TLS ticket key: " << hostport
|
||||||
|
<< " -> " << util::numeric_hostport(&memcachedconf.addr.su.sa,
|
||||||
|
memcachedconf.addr.len);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
61
src/util.cc
61
src/util.cc
|
@ -57,7 +57,6 @@
|
||||||
#include <nghttp2/nghttp2.h>
|
#include <nghttp2/nghttp2.h>
|
||||||
|
|
||||||
#include "timegm.h"
|
#include "timegm.h"
|
||||||
#include "template.h"
|
|
||||||
|
|
||||||
namespace nghttp2 {
|
namespace nghttp2 {
|
||||||
|
|
||||||
|
@ -1149,25 +1148,53 @@ std::string dtos(double n) {
|
||||||
return utos(static_cast<int64_t>(n)) + "." + (f.size() == 1 ? "0" : "") + f;
|
return utos(static_cast<int64_t>(n)) + "." + (f.size() == 1 ? "0" : "") + f;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string make_hostport(const char *host, uint16_t port) {
|
std::string make_http_hostport(const StringRef &host, uint16_t port) {
|
||||||
auto ipv6 = ipv6_numeric_addr(host);
|
|
||||||
std::string hostport;
|
|
||||||
|
|
||||||
if (ipv6) {
|
|
||||||
hostport += '[';
|
|
||||||
}
|
|
||||||
|
|
||||||
hostport += host;
|
|
||||||
|
|
||||||
if (ipv6) {
|
|
||||||
hostport += ']';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (port != 80 && port != 443) {
|
if (port != 80 && port != 443) {
|
||||||
hostport += ':';
|
return make_hostport(host, port);
|
||||||
hostport += utos(port);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto ipv6 = ipv6_numeric_addr(host.c_str());
|
||||||
|
|
||||||
|
std::string hostport;
|
||||||
|
hostport.resize(host.size() + (ipv6 ? 2 : 0));
|
||||||
|
|
||||||
|
auto p = &hostport[0];
|
||||||
|
|
||||||
|
if (ipv6) {
|
||||||
|
*p++ = '[';
|
||||||
|
}
|
||||||
|
|
||||||
|
p = std::copy_n(host.c_str(), host.size(), p);
|
||||||
|
|
||||||
|
if (ipv6) {
|
||||||
|
*p++ = ']';
|
||||||
|
}
|
||||||
|
|
||||||
|
return hostport;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string make_hostport(const StringRef &host, uint16_t port) {
|
||||||
|
auto ipv6 = ipv6_numeric_addr(host.c_str());
|
||||||
|
auto serv = utos(port);
|
||||||
|
|
||||||
|
std::string hostport;
|
||||||
|
hostport.resize(host.size() + (ipv6 ? 2 : 0) + 1 + serv.size());
|
||||||
|
|
||||||
|
auto p = &hostport[0];
|
||||||
|
|
||||||
|
if (ipv6) {
|
||||||
|
*p++ = '[';
|
||||||
|
}
|
||||||
|
|
||||||
|
p = std::copy_n(host.c_str(), host.size(), p);
|
||||||
|
|
||||||
|
if (ipv6) {
|
||||||
|
*p++ = ']';
|
||||||
|
}
|
||||||
|
|
||||||
|
*p++ = ':';
|
||||||
|
std::copy_n(serv.c_str(), serv.size(), p);
|
||||||
|
|
||||||
return hostport;
|
return hostport;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,8 @@
|
||||||
|
|
||||||
#include "http-parser/http_parser.h"
|
#include "http-parser/http_parser.h"
|
||||||
|
|
||||||
|
#include "template.h"
|
||||||
|
|
||||||
namespace nghttp2 {
|
namespace nghttp2 {
|
||||||
|
|
||||||
// The additional HTTP/2 protocol ALPN protocol identifier we also
|
// The additional HTTP/2 protocol ALPN protocol identifier we also
|
||||||
|
@ -623,7 +625,11 @@ std::string format_duration(double t);
|
||||||
// Creates "host:port" string using given |host| and |port|. If
|
// Creates "host:port" string using given |host| and |port|. If
|
||||||
// |host| is numeric IPv6 address (e.g., ::1), it is enclosed by "["
|
// |host| is numeric IPv6 address (e.g., ::1), it is enclosed by "["
|
||||||
// and "]". If |port| is 80 or 443, port part is omitted.
|
// and "]". If |port| is 80 or 443, port part is omitted.
|
||||||
std::string make_hostport(const char *host, uint16_t port);
|
std::string make_http_hostport(const StringRef &host, uint16_t port);
|
||||||
|
|
||||||
|
// Just like make_http_hostport(), but doesn't treat 80 and 443
|
||||||
|
// specially.
|
||||||
|
std::string make_hostport(const StringRef &host, uint16_t port);
|
||||||
|
|
||||||
// Dumps |src| of length |len| in the format similar to `hexdump -C`.
|
// Dumps |src| of length |len| in the format similar to `hexdump -C`.
|
||||||
void hexdump(FILE *out, const uint8_t *src, size_t len);
|
void hexdump(FILE *out, const uint8_t *src, size_t len);
|
||||||
|
|
|
@ -455,4 +455,15 @@ void test_util_parse_config_str_list(void) {
|
||||||
CU_ASSERT("charlie" == res[2]);
|
CU_ASSERT("charlie" == res[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void test_util_make_http_hostport(void) {
|
||||||
|
CU_ASSERT("localhost" == util::make_http_hostport("localhost", 80));
|
||||||
|
CU_ASSERT("[::1]" == util::make_http_hostport("::1", 443));
|
||||||
|
CU_ASSERT("localhost:3000" == util::make_http_hostport("localhost", 3000));
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_util_make_hostport(void) {
|
||||||
|
CU_ASSERT("localhost:80" == util::make_hostport("localhost", 80));
|
||||||
|
CU_ASSERT("[::1]:443" == util::make_hostport("::1", 443));
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace shrpx
|
} // namespace shrpx
|
||||||
|
|
|
@ -57,6 +57,8 @@ void test_util_parse_http_date(void);
|
||||||
void test_util_localtime_date(void);
|
void test_util_localtime_date(void);
|
||||||
void test_util_get_uint64(void);
|
void test_util_get_uint64(void);
|
||||||
void test_util_parse_config_str_list(void);
|
void test_util_parse_config_str_list(void);
|
||||||
|
void test_util_make_http_hostport(void);
|
||||||
|
void test_util_make_hostport(void);
|
||||||
|
|
||||||
} // namespace shrpx
|
} // namespace shrpx
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue