웹 서버란?
- 웹 브라우저로부터 HTTP 요청을 받아 적절한 정적 페이지를 응답해주는 서버
- 대표적으로 Apache, Nginx 등이 있다.
- Nginx는 비동기 논블로킹으로 요청을 처리한다는 특징이 있다.
- 더 적은 자원으로 빠른 성능을 낼 수 있다.
- 리버스 프록시 기능을 하기 때문에 로드 밸런싱과, 특정 url 패턴에 따라서 적절한 서버로 보내주는 역할을 한다.
통신을 중계하는 프록시, 게이트웨이, 터널
HTTP는 클라이언트와 서버외에 통신을 중계하는 프로그램과 서버를 연계하는 것도 가능하다.
이러한 프로그램과 서버는 그 다음에 있는 다른 서버에 리퀘스트를 중계하고 그 서버로 부터 받은 리스폰스를 클라이언트에 반환하는 역할
을 한다.
프록시
- 서버와 클라이언트의 양쪽 역할을 하는 중계 프로그램.
- 클라이언트로부터 리퀘스트를 서버에 전송하고, 서버로부터 리퀘스트를 클라이언트에 전송한다.
- 프록시 서버를 여러 대 경유하여 통신하는 것이 가능하다. 이 때, Via 헤더 필드에 경유한 호스트 정보를 추가해야 한다.
캐싱 프록시 (Cashing Proxy)
- 프록시 서버 상의 리소스 캐시를 보존해 두는 타입의 프록시
- 같은 리소스에 리퀘스트가 온 경우 오리진 서버까지 가지 않고 캐시를 되돌려 준다.
투명 프록시(Transparent Proxy)
- 리퀘스트와 리스폰스를 중계할 때 메시지 변경을 하지 않는 타입의 프록시
게이트웨이
- 다른 서버를 중계하는 서버.
- 클라이언트로 부터 수신한 리퀘스트를 마치 리소스를 보유한 서버인 것처럼 수신한다.
- HTTP 서버외에 서비스를 암호화를 사용해서 안전하게 제공하게 된다.
- 예를 들면, 데이터베이스에 접속해 SQL 쿼리를 사용해서 데이터를 얻는 곳에 쓰일 수도 있고, 쇼핑이나 결제 등과 연계할 때도 사용된다.
터널
- 서로 떨어진 두 대의 클라이언트와 서버 사이를 중계하며 접속을 주선하는 중계 프로그램.
- 요구에 따라서 다른 서버와의 통신 경로를 확립한다. 이 때 클라이언트는 SSL같은 암호화 통신을 통해 서버와 안전하게 통신하기 위해 사용한다.
터널 자체는 HTTP 리퀘스트를 해석하려고 하지 않는다.