Squid 프록시 서버를 통해 API (Azure Function (B))에 액세스하여 원본 포트를 Function (B)로 변경하는 Azure Function (C #, ASP.net core 3.1) (A)을 만듭니다. (구성 정보는 아래에 표시됩니다.)
프록시를 통해 Azure Function (B)에 액세스 할 수 있지만 원본 포트는 변경되지 않습니다.
Function (B)에 두 번 액세스했을 때 squid 프록시 서버는 첫 번째 액세스 만 기록했습니다. 하지만 Function (B)는 매번 프록시를 통해 접근 한 것으로 기록했다 (기록 된 프록시 IP 주소).
Function (A)와 Proxy 사이의 연결에서 어떤 일이 발생하는지, Function (A) 또는 squid 구성을 어떻게 변경합니까?
┌────────────────────┐
│ Azure Function (A) │
└────────────────────┘
↓
↓
┌──────────────┐
│ Proxy Server │
└──────────────┘
↓
↓
┌────────────────────┐
│ Azure Function (B) │
└────────────────────┘
Function (A)의 코드는 여기에 있습니다.
// startup.cs
// Setting DI and using Proxy
[...]
public override void Configure(IFunctionsHostBuilder builder)
{
[...]
builder.Services.AddHttpClient<IApiCallLogic, ApiCallLogic>(c => { })
.ConfigurePrimaryHttpMessageHandler(() =>
{
var handler = new HttpClientHandler { UseProxy = true };
handler.Proxy = new WebProxy($"http://xxx.xxx.xxx.xxx:xxx"); // proxy's IP & port
return handler;
});
}
// call REST API Logic with DI
class ApiCallLogic : IApiCallLogic
{
private HttpClient httpClient;
public ApiCallLogic(HttpClient httpClient)
{
this.httpClient = httpClient ?? throw new ArgumentNullException(nameof(httpClient));
}
public async Task<HttpResponseMessage> CallApi(string url, ILogger log)
{
var reqMessage = new HttpRequestMessage(HttpMethod.Get, url);
var response = await httpClient.SendAsync(reqMessage);
return response;
}
}
그리고 squid.conf는 이와 같습니다.
# allow Function IP
acl function_net src xxx.xxx.xxx.xxx
http_access allow function_net
# deny others
http_access deny all
# no cache
cache deny all
# set port
http_port xxxx
forwarded_for off
# persistent connection setting
server_persistent_connections off
client_persistent_connections on
이 문제를 혼자 해결했습니다. Function (B)가 아닌 외부 API에 액세스했을 때 다른 요청의 소스 포트가 달랐습니다. 동일한 소스 포트의 원인은 Azure Functions가 값으로 연결 헤더를 반환하기 때문이라고 생각합니다 keep-alive
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다