Nginx

seongha_h·2025년 9월 6일

개요

php로 구현된 기능을 사용하기 위해 nestJS서버 -> php서버 로 프록시 요청을 이용하게 되었습니다.
기존 php로 구현된 코드를 마이그레이션 하기에는 작업 범위가 너무 방대했고, 시간은 부족했기에 프록시요청을 이용하는 선택을 했다고 전해 들었습니다.

이 프로젝트에 합류하면서 php 코드를 처음 접하게 되었습니다.
php는 단독으로 HTTP 서버 역할을 하지 못하기에 nginx 같은 웹 서버를 두고 요청을 프록시해야 합니다.
그 이유는 php가 인터프리터 언어이고, 요청이 들어올 때마다 스크립트를 실행하고 종료하는 방식으로 동작하기 때문입니다. 따라서 nginx와 같은 중개자가 필요합니다.

제가 이해한 바로는 php는 실행 스크립트 파일이고, 이를 실행시키기 위한 nginx(포워딩 서버?)로 이해했습니다.

이 과정에서 nginx에 대한 이해가 부족하다 생각하여 정리하면서 이해해보고자 합니다.

Nginx

Nginx는 고성능의 오픈 소스 웹 서버 소프트웨어로 많은 웹 서버와 리버스 프록시로 널리 사용됩니다.
정적 파일을 서빙하거나 동적 애플리케이션 서버 앞단에 놓여 리버스 프록시·로드밸런서·캐시 서버 역할까지 수행할 수 있습니다.

주요 목적

  • 정적 파일 제공 : WAS가 아닌 WS인 nginx가 정적 파일을 제공하여 WAS 부하 감소
  • 리버스 프록시 : 서버 앞단에서 클라이언트 요청을 분산
  • 로드밸런싱 : 트래픽 분산
  • 보안 게이트웨이 : HTTPS, 인증, 요청제한 등
  • 캐시 : 프록시 캐싱을 통해 백엔드 부하를 줄이고 응답속도 향상

특징

  • 마스터/워커 프로세스 모델 : 마스터가 설정, 생명주기 관리, 워커가 실제 트래픽 처리
  • 이벤트 루프 기반(Non-blocking I/O): 요청마다 스레드/프로세스를 만들지 않고 소수 워커가 수만 연결 처리
  • Zero-downtime reload : 설정 변경시 서비스 중단 없이 새 설정 적용 가능
  • 정적 리소스 최적화 : 압축 등을 이용하여 서빙 성능 최적화

경로 기반 포워딩

클라이언트 요청의 URL 경로(path) 에 따라, 서버 내부 자원 혹은 다른 백엔드 서버로 요청을 전달하는 방식입니다.
nginx 설정에서는 보통 location 블록을 이용해서 구현합니다.

  • /static/* 요청은 정적 파일
  • /api/* 요청은 Node.js 서버
  • /php/* 요청은 PHP-FPM

이런식으로 경로 기반으로 포워딩을 설정할 수 있습니다.

php 요청을 nginx 로 태워야 하는 이유

php는 인터프리터 언어로 스크립트를 통해 실행 시켜야합니다.
따라서, nginx를 통해 포워딩 설정을 하고 실행 시킴으로써 php코드를 서버처럼 이용하도록 할 수 있습니다.

출처

profile
https://github.com/Fixtar

0개의 댓글