ASP.NET Core 3 アプリを NGINX リバース プロキシの背後で実行しようとすると問題が発生します。このガイドに従っています: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-3.1
SSL 証明書に Let's Encrypt を使用し、ローカル ネットワーク内の別のマシンへのプロキシ パスを使用しています。この問題を解決する方法がよくわかりません。リバース プロキシと Kestrel サーバー間の接続を SSL で保護しようとしましたが、それでもうまくいきません。どんな助けでも大歓迎です。私のNGINX Site.confファイルは次のとおりです。
upstream dotnet {
zone dotnet 64k;
server 192.168.3.222:5000;
}
server {
server_name MyDomain.net *.MyDomain.net;
location / {
proxy_pass http://dotnet;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
access_log /var/log/nginx/MyDomain.access.log;
error_log /var/log/nginx/MyDomain.error.log;
}
location = /favicon.ico {
log_not_found off;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/mydomain.net/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mydomain.net/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 = MyDomain.net) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name MyDomain.net;
return 404; # managed by Certbot
}
ASP.NET Core アプリは、NGINX リバース プロキシ (ローカル Ip: 192.168.3.111) とは異なるコンピューター (ローカル Ip: 192.168.3.222) で実行されています。ASP.NET Core アプリが実行されているマシンで NGINX リバース プロキシをセットアップし、127.0.0.1:5000 へのプロキシ パスを設定すると、ローカル ネットワーク経由で問題なくアクセスできます。また、リバース プロキシを受け入れるように Startup.cs を構成しました。
public void ConfigureServices(IServiceCollection services)
{
// Configure Headers. Required by Nginx RProxy
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
options.KnownProxies.Add(IPAddress.Parse("192.168.3.111"));
options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("192.168.3.0"),24));
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider)
{
// Forward Headers required by Nginx RProxy
app.UseForwardedHeaders();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
}
MyDomain.net にアクセスしようとすると、502 Bad Gateway が表示されます。そのため、リバース プロキシはアプリに接続できません。ドキュメントの例では、Kestrel サーバーと同じマシンでリバース プロキシを使用しています。NGINX エラー ログは次のとおりです。
アップストリームへの接続中に失敗しました (111: 接続が拒否されました)、クライアント: 0.0.0.0.1、サーバー: mydomain.net、リクエスト: "GET / HTTP/1.1"、アップストリーム: "http://192.168.3.222:5000/$ 、ホスト:「mydomain.net」
Kestrel サーバーを備えたマシンは、ポート 5000 および 5001 の着信トラフィックを許可します。