ASP. NET Core 가 Https Redirection 에서 Nginx 를 만 났 을 때 실패 한 문 제 를 해결 합 니 다.
public void ConfigureServices(IServiceCollection services)
{
// ,
services.AddHttpsRedirection(options=>{
options.HttpsPort=443;
options.RedirectStatusCode= StatusCodes.Status307TemporaryRedirect;
});
services.Configure(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc(options =>
{
options.Filters.Add(typeof(GlobalExceptionFilterAttribute));
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseHttpsRedirection();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
이 때 Nginx 가 미리 설정 되 어 있 을 때, Nginx 가 Https 를 분석 하지 않 고 간단하게 전송 할 때 (설정 은 대략 다음 과 같 습 니 다) 무한 한 리 셋 에 빠 집 니 다. Nginx 가 Https 리 트 윗 을 설정 하지 않 으 면 기본적으로 Http 의 Scheme 을 리 셋 합 니 다. http 대신 http 을 사용 합 니 다.
ps: 왜 Nginx 에서 Https 를 분석 하지 않 는 지, 메시지 의 복호화 에 자원 이 많이 소모 되 기 때문에 Nginx 는 퍼 가기 와 부하 의 관건 으로 Https 의 해석 을 맡 으 면 성능 이 어느 정도 떨 어 질 수 있 으 며, 응용 프로그램 에 분산 되 어 분석 하면 성능 소모 가 분 산 됩 니 다. 따라서 생산 라인 과정 에서 Nginx 에서 Https 를 분석 하 는 것 을 추천 하지 않 습 니 다.
server {
listen 443;
server_name example.com *.example.com;
location / {
proxy_pass http://localhost:5000;
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;
}
}
해결 방법
server {
listen 443;
server_name example.com *.example.com;
location / {
proxy_pass http://localhost:5000;
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;
}
}
public void ConfigureServices(IServiceCollection services)
{
//....
services.Configure(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//...
app.UseForwardedHeaders();
app.UseHttpsRedirection();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
이로써 http 요청 은 Nginx 를 건 너 뛰 어 ASPNET 코어 로 직접 이동 하고 Https 로 재 설정 하여 Nginx 와 의 퍼 가기 효율 을 확보 하 는 동시에 재 설정 을 실현 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
AS를 통한 Module 개발1. ModuleLoader 사용 2. IModuleInfo 사용 ASModuleOne 모듈...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.