Я сам реализую прокси-сервер http / 2 и использую Nginx в качестве балансировщика нагрузки.
Когда я использую Nginx в качестве балансировщика нагрузки h2c, он работает:
server {
listen 8443 http2;
location / {
error_log /Users/jiajun/nginx_error_log.log debug;
grpc_pass grpc://127.0.0.1:2017;
}
}
Запустите его:
$ go run example/grpc_client/main.go
calling to 127.0.0.1:2019
2019/01/28 11:50:46 gonna call c.SayHello...
2019/01/28 11:50:46 Greeting: Hello world
И журнал доступа Nginx:
127.0.0.1 - - [28/Jan/2019:11:50:46 +0800] "POST /helloworld.Greeter/SayHello HTTP/2.0" 200 18 "-" "grpc-go/1.16.0" "-"
Но он не работает, пока я обслуживаю его по SSL:
server {
listen 8443 ssl http2;
ssl_certificate /Users/jiajun/127.0.0.1.crt;
ssl_certificate_key /Users/jiajun/127.0.0.1.key;
location / {
error_log /Users/jiajun/nginx_error_log.log debug;
grpc_pass grpc://127.0.0.1:2017;
}
}
Запустите его:
$ go run example/grpc_client/main.go
calling to 127.0.0.1:2019
2019/01/28 11:53:06 gonna call c.SayHello...
2019/01/28 11:53:06 could not greet: rpc error: code = Unavailable desc = transport is closing
exit status 1
И, журнал доступа Nginx:
127.0.0.1 - - [28/Jan/2019:11:53:06 +0800] "PRI * HTTP/2.0" 400 157 "-" "-" "-"
Поэтому я пытаюсь выяснить, почему он возвращает 400, а яиспользую SSL.Но Nginx не записывает процесс в журнал ошибок, даже если я установил уровень журнала для отладки (и он был скомпилирован с опцией --with-debug
).
Есть ли хорошая идея отладить его?