【AWS 메모 ⑦】 리버스 프록시 설정(Squid3.5)

Squid3.5에서 리버스 프록시 설정을 일로 사용할 기회가 있었으므로 비망록적인 것을 남겨 둔다.

전제



다음 환경에서 실행.

서브넷


서브넷 이름
라우팅 테이블 설정


public-subnet
・local

private-web-subnet
· local · 인터넷 게이트웨이


보안 그룹


보안 그룹 이름
설정


public-sg
· 사내 글로벌 IP 주소에서 액세스 허용 (포트 22) · HTTP 액세스 허용 (포트 80)

private-web-sg
· public-sg로부터의 액세스 만 허가 (포트 80)


EC2


호스트 이름
OS
보안 그룹


proxy-server
Amazon Linux 2
public-sg

private-web-server
Amazon Linux 2
private-sg


프라이빗 서브넷 내의 웹 서버에 대한 액세스는 퍼블릭 서브넷에 구축된 프록시 서버를 통해 이루어진다.


프록시 서버 설정



proxy-server에 Squid3.5를 설치합니다.
$ sudo yum install squid -y

자동 시작을 활성화합니다.
$ sudo systemctl enable squid

Squid 설정 파일을 엽니다.
$ sudo vi /etc/squid/squid.conf

설정 파일에 다음 설정을 추가합니다.
여기서는 HTTP 액세스를 모두 허용합니다.
http_access allow all

포트 번호 지정(기본적으로 3128) 부분을 주석 처리합니다.
전송 대상 설정을 추가합니다.
# Squid normally listens to port 3128
#http_port 3128  ← コメントアウト

# 以下の形式で転送先の設定を追加
# http_port <SquidサーバのプライベートIPアドレス>:<ポート番号> accel defaultsite=<WebサーバのプライベートIPアドレス>
http_port xxx.xxx.xxx.xxx:80 accel defaultsite=xxx.xxx.xxx.xxx

캐시 설정을 추가합니다.
# WebサーバのプライベートIPアドレス を設定
cache_peer xxx.xxx.xx.xxx parent 80 0 no-query originserver

# メモリキャッシュサイズを設定
cache_mem 256 MB

마지막으로 호스트 이름 정의를 추가합니다.
# WebサーバのプライベートIPアドレス を設定
visible_hostname xxx.xxx.xxx.xxx

설정 완료 후 서비스를 다시 시작합니다.
$ sudo service squid restart

동작 확인(웹 서버 없음)



웹 서버를 시작하지 않고 Squid 서버가 제대로 작동하는지 확인합니다.

브라우저에 프록시 서버의 IP 주소를 입력하여 액세스합니다.
다음 화면이 표시되면 우선 액세스가 완료되었습니다. 그러나 풍선 부분에 visible_hostname로 설정된 IP 주소가 표시됩니다.


가능한 한 브라우저 측에서 서버의 정보를 확인할 수 없도록하는 것이 좋기 때문에, 방금전의 설정을 재검토한다.

Squid 설정 파일을 엽니다.
$ sudo vi /etc/squid/squid.conf

어색하지만 unknown 로 표시되도록 변경한다.
# WebサーバのプライベートIPアドレス を設定
visible_hostname unknown

설정 완료 후 서비스를 다시 시작합니다.
$ sudo service squid restart

이번에는 unknown 라고 표시되게 된다.


다음은 버전도 숨깁니다.

Squid 설정 파일을 엽니다.
$ sudo vi /etc/squid/squid.conf

다음 설정을 추가하여 버전을 숨깁니다.
httpd_suppress_version_string on

설정 완료 후 서비스를 다시 시작합니다.
$ sudo service squid restart

이번에는 버전이 표시되지 않습니다.


Squid측의 설정은 이상으로 종료.

웹 서버 측 설정



이번에는 Apache 서버를 시작하고 액세스 할 수 있는지 확인하므로 Apache 시작만 수행합니다.
$ sudo systemctl start httpd

프록시 서버를 통한 웹 서버 액세스



브라우저에 프록시 서버의 IP 주소를 입력하여 액세스합니다.
Apache 테스트 페이지가 표시되는지 확인합니다.


덤: 복수의 Web 서버에 처리를 할당하는 경우의 설정



예를 들면, 웹 서버 A~C까지 있는 경우에는 이하와 같이 설정을 행한다.
라운드 로빈에서 부하 분산됩니다.
# http_port <SquidサーバのプライベートIPアドレス>:<ポート番号> accel defaultsite=<WebサーバAのプライベートIPアドレス>
http_port xxx.xxx.xxx.xxx:80 accel defaultsite=xxx.xxx.xxx.xxx

cache_peer <WebサーバAのプライベートIPアドレス> parent 80 0 no-query originserver round-robin
cache_peer <WebサーバBのプライベートIPアドレス> parent 80 0 no-query originserver round-robin
cache_peer <WebサーバCのプライベートIPアドレス> parent 80 0 no-query originserver round-robin

보충



AWS에서 리버스 프록시를 사용하는 경우, ELB를 사용하는 경우가 많지만, ELB에서는 5분 간격으로의 로그 취득이 되고 있다.
따라서 실시간 로그 모니터링을 수행하려는 경우 프록시 서버를 직접 준비하는 경우가 있습니다.
만약 구축할 필요가 있는 경우는, 이번 사용한 것 같은 EC2에서의 운용이라면 단일 장애점이 되므로, ECS를 사용하면 좋을지도 모른다.

좋은 웹페이지 즐겨찾기