OS X 中的 Nginx 配置
Nginx configuration in OS X
我想为 gRPC 客户端和服务器进行服务器端负载平衡,并尝试为 OS X 提供简单的 Nginx 配置。我在端口 50051 上有 2 个服务器 运行ning和 50052,这是我启动服务器:
Server server = ServerBuilder.forPort(50051)
.addService(new ImageStreamingServerImpl())
.addService(ProtoReflectionService.newInstance())
// .useTransportSecurity(
// new File("ssl/server.crt"),
// new File("ssl/server.pem")
// )
.build();
server.start();
这是我的 Nginx 配置:
worker_processes 1;
error_log /usr/local/var/log/nginx/error.log;
events {
worker_connections 10;
}
http {
access_log /usr/local/var/log/nginx/access.log;
upstream backend {
server 0.0.0.0:50051;
server 0.0.0.0:50052;
}
server {
listen 8080;
location / {
grpc_pass grpc://backend;
}
}
}
所以我的想法是客户端可以通过Nginx监听8080端口并像以前一样执行代码。客户端创建如下:
ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 8080)
.usePlaintext()
.build();
// ManagedChannel channel = NettyChannelBuilder.forAddress("localhost", 8080)
// .sslContext(GrpcSslContexts.forClient().trustManager(new File("ssl/ca.crt")).build())
// .build();
FileServiceGrpc.FileServiceStub imageStreamingClient = FileServiceGrpc.newStub(channel);
以前,客户端和服务器可以在没有 Nginx 的情况下 运行 在同一个端口(比如 50051 或 50052)中体面。为什么这现在不起作用?
原型文件如下:
语法 = "proto3";
选项java_multiple_files = 真;
包裹 com.grpc.protobuf;
message DownloadFileRequest {
string url = 1;
}
message DataChunk {
bytes data = 1;
int32 size = 2;
}
service FileService {
rpc downloadFile (DownloadFileRequest) returns (stream DataChunk);
}
为了简化起见,我省略了 TLS 加密。
您似乎没有将 Nginx 配置为启用 HTTP2,这是 gRPC 使用的协议。
试试:
server {
listen 8080 http2;
....
}
我想为 gRPC 客户端和服务器进行服务器端负载平衡,并尝试为 OS X 提供简单的 Nginx 配置。我在端口 50051 上有 2 个服务器 运行ning和 50052,这是我启动服务器:
Server server = ServerBuilder.forPort(50051)
.addService(new ImageStreamingServerImpl())
.addService(ProtoReflectionService.newInstance())
// .useTransportSecurity(
// new File("ssl/server.crt"),
// new File("ssl/server.pem")
// )
.build();
server.start();
这是我的 Nginx 配置:
worker_processes 1;
error_log /usr/local/var/log/nginx/error.log;
events {
worker_connections 10;
}
http {
access_log /usr/local/var/log/nginx/access.log;
upstream backend {
server 0.0.0.0:50051;
server 0.0.0.0:50052;
}
server {
listen 8080;
location / {
grpc_pass grpc://backend;
}
}
}
所以我的想法是客户端可以通过Nginx监听8080端口并像以前一样执行代码。客户端创建如下:
ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 8080)
.usePlaintext()
.build();
// ManagedChannel channel = NettyChannelBuilder.forAddress("localhost", 8080)
// .sslContext(GrpcSslContexts.forClient().trustManager(new File("ssl/ca.crt")).build())
// .build();
FileServiceGrpc.FileServiceStub imageStreamingClient = FileServiceGrpc.newStub(channel);
以前,客户端和服务器可以在没有 Nginx 的情况下 运行 在同一个端口(比如 50051 或 50052)中体面。为什么这现在不起作用?
原型文件如下:
语法 = "proto3";
选项java_multiple_files = 真; 包裹 com.grpc.protobuf;
message DownloadFileRequest {
string url = 1;
}
message DataChunk {
bytes data = 1;
int32 size = 2;
}
service FileService {
rpc downloadFile (DownloadFileRequest) returns (stream DataChunk);
}
为了简化起见,我省略了 TLS 加密。
您似乎没有将 Nginx 配置为启用 HTTP2,这是 gRPC 使用的协议。
试试:
server {
listen 8080 http2;
....
}