我尝试asp.net用nginx在linux(ubuntu 20.04)上托管我的www.example.com核心(.NET 6.0)grpc服务。我设法用以下步骤使托管工作
1.首先安装nginx并使用此链接设置服务器块**(服务器块:)vm2.arzval.com*
1.在下一步中使用“Let 's Encrypt using this link”保护Nginx,并在我的域(www.example.com)上安装SSL vm2.arzval.com
1.接下来在我的虚拟机上安装aspnetcore-runtime-6.0
1.最后将我发布的文件粘贴到VM上,并使用this link来配置nginx以支持grpc和HHTP/2协议
显然,一切都是正确的,但当我使用一个示例克林特(.net 6控制台应用程序)项目连接我的grpc服务器时,发生了以下错误
Status(StatusCode="Unavailable", Detail="Bad gRPC response. HTTP status code: 502")
下面是我在第三行抛出一个Exception示例。
using var channel = GrpcChannel.ForAddress("https://vm2.arzval.com");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
这是我的csproj服务器文件
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<Protobuf Include="Protos\greet.proto" GrpcServices="Server" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Grpc.AspNetCore" Version="2.40.0" />
</ItemGroup>
</Project>
appsetting.json文件内容
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"Kestrel": {
"Endpoints": {
"Grpc": {
"Url": "https://localhost:5001",
"Protocols": "Http2"
}
}
}
}
program.cs
using GrpcService.Services;
using Microsoft.AspNetCore.Server.Kestrel.Core;
using System.Net.Security;
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel(options =>
{
// gRPC
options.ListenAnyIP(5001, o => o.Protocols = HttpProtocols.Http2);
});
// Additional configuration is required to successfully run gRPC on macOS.
// For instructions on how to configure Kestrel and gRPC clients on macOS, visit https://go.microsoft.com/fwlink/?linkid=2099682
// Add services to the container.
builder.Services.AddGrpc();
var app = builder.Build();
if (app.Environment.IsProduction())
{
app.UseHttpsRedirection();
}
// Configure the HTTP request pipeline.
app.MapGrpcService<GreeterService>();
app.MapGet("/", () => "Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909");
app.Run();
这是我的nginx服务器块配置文件
server {
root /var/www/vm2.arzval.com/html;
server_name vm2.arzval.com;
location /greet.Greeter {
grpc_pass grpc://127.0.0.1:5001;
}
listen [::]:443 ssl http2 ipv6only=on; # managed by Certbot
listen 443 ssl http2; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/vm2.arzval.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/vm2.arzval.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = vm2.arzval.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name vm2.arzval.com;
return 404; # managed by Certbot
}
我不知道我的错误在哪里关于如何解决这个错误有什么建议吗?提前感谢。
1条答案
按热度按时间wztqucjr1#
更新nginx服务器块配置
appsetting.json
Program.cs
一切都必须解决