【AWS 메모 ⑦】 리버스 프록시 설정(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를 사용하면 좋을지도 모른다.
Reference
이 문제에 관하여(【AWS 메모 ⑦】 리버스 프록시 설정(Squid3.5)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Kento75/items/368c2613778366a693d8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)