Apache proxy 설정

이동욱·2023년 8월 21일
0

TroubleShooting

목록 보기
1/9

Apache proxy 설정

1. 개요


작년 프로젝트 진행 중 proxy 서버를 통해 외부 서버로 request를 보내는 게 간헐적으로 안되는 현상이 있었다.
방화벽도 다 체크한 상태였고 로그를 확인해본 결과 was -> web sever까지는 가는 것을 확인했는데 web(apache)에서 외부 server에 request를 보낼 때 error log에 찍히는 것을 확인할 수 있었다.
proxy 서버는 apache(2.4.43)를 설치했었고 conf에 아래 내용을 추가하여 해결할 수 있었다.

2. 해결


먼저 apache 서버와 외부 서버 간에 방화벽을 먼저 체크 했는데 이상 없음을 확인하였다. 그래서 일단 먼저 conf 내용을 확인했는데 ... proxy 용도로만 사용하는 것이기 때문에 별 다른 설정은 하지 않았는데 구글링 해본 결과 apache에서 간헐적으로 나와 똑같은 문제가 발생한다는 결과를 많이 봤다. 그래서 아래 설정을 추가해줘서 나도 해결할 수 있었는데 다음과 같다.

SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
SetEnv proxy-initial-not-pooled 1
  • force-proxy-request-1.0 1
    apache의 mod_proxy module로 proxy를 통해 외부 서버에 요청을 보낼 때 외부 서버가 http 1.1을 지원하지 않는 경우 강제로 http 1.0으로 요청을 보내는 옵션

  • proxy-nokeepalive 1
    멍청한 proxy로 많이 알려져 있는 keepalive의 문제 때문에 keepalive를 사용하지 않는 옵션,
    client - proxy - server 구조에서 proxy가 keepalive를 몰라 client가 보낸 http connection header를 이해하지 못하면 server에 그대로 헤더를 넘겨주고 server는 keepalive를 하는 것으로 알고 server로부터 응답 받은 client도 keepalive를 통해 connection을 유지하고자 하지만 proxy는 connection을 닫으려고 한다. 이때 client가 같은 connection으로 request를 보내면 proxy는 같은 connection으로 request가 왔기 때문에 해당 request는 proxy로부터 무시되고 브라우저는 응답 없이 대기를 하게 된다.
    http 1.1에서 connection을 재사용하는 개념은 유지되었지만 keepalive는 명세에서 빠짐

  • proxy-initial-not-pooled 1
    mod_proxy module로 proxy 서버 역할을 할 때 client, server 간 요청, 응답을 위한 connection을 재사용 하기 위해 pooling 될 수 있는데 이를 하지 않고 매번 새로운 connection을 사용하도록 하는 것

  • http 1.0
    요청 응답 시 tcp 연결을 계속적으로 할 때마다 해줘야 함
    요청을 보내면 응답을 받아야 다음 요청 가능

  • http 1.1
    tcp 연결을 한 번만 하면 해당 파이프라인에서 요청 응답을 할 수 있음
    병렬적인 요청을 보낼 수 있음

3. 고찰


서버 간 통신을 할 때 http 1.0, 1.1 차이, keepalive 등 본 적은 있지만 제대로 생각은 안하고 고려는 안했는데 이것 때문에 이렇게 고생할줄은 몰랐다 ...
앞으로 사소한거 하나하나 제대로 고려해서 구성해야한다는 걸 느꼈다 ...

profile
lduk 웹 개발자(back)

0개의 댓글