nginx
-
개요대용량 트래픽 테스트 중 Nginx 캐싱을 적용한 후, 추가적인 시스템 레벨 병목 현상을 발견하게 되었다. 캐시 설정만으로는 해결되지 않는 파일 디스크립터 부족과 워커 커넥션 한계 문제를 해결한 과정을 기록해보았다.1. Too many open files 에러 해결해결 방법/etc/nginx/nginx.conf다음 내용 추가:worker_rlimit_nofile 65535;시스템 서비스 설정sudo systemctl edit nginx다음 내용 추가:[Service]LimitNOFILE=65536설정 후 재시작:sudo systemctl daemon-reloadsudo systemctl restart nginxworker_rlimit_nofile를 최대값(65535)으로 설정해도 되는 이유Nginx ..
Nginx - Too many open files 에러 / 1024 worker_connections are not enough 에러개요대용량 트래픽 테스트 중 Nginx 캐싱을 적용한 후, 추가적인 시스템 레벨 병목 현상을 발견하게 되었다. 캐시 설정만으로는 해결되지 않는 파일 디스크립터 부족과 워커 커넥션 한계 문제를 해결한 과정을 기록해보았다.1. Too many open files 에러 해결해결 방법/etc/nginx/nginx.conf다음 내용 추가:worker_rlimit_nofile 65535;시스템 서비스 설정sudo systemctl edit nginx다음 내용 추가:[Service]LimitNOFILE=65536설정 후 재시작:sudo systemctl daemon-reloadsudo systemctl restart nginxworker_rlimit_nofile를 최대값(65535)으로 설정해도 되는 이유Nginx ..
2025.11.02 -
개요laravel 서버의 대용량 트래픽 처리에 대해 테스트하다 PHP FPM 프로세스의 부족으로 인해 병목 현상이 발생함을 발견하게 되었고 서버 스펙을 무리하게 올리기 보다는 다른 방식으로 해결을 하는 것이 바람직하다 판단되어 Nginx 캐싱에 대해 찾아보게 되었다./etc/nginx/sites-available/default# server 블록 상단에 추가fastcgi_cache_path /dev/shm/nginx_cachelevels=1:2keys_zone=PHPCACHE:100mmax_size=500minactive=60muse_temp_path=offfastcgi_cache_use_stale error timeout updating invalid_header http_500;fastcgi_cach..
PHP - Nginx 캐싱 설정개요laravel 서버의 대용량 트래픽 처리에 대해 테스트하다 PHP FPM 프로세스의 부족으로 인해 병목 현상이 발생함을 발견하게 되었고 서버 스펙을 무리하게 올리기 보다는 다른 방식으로 해결을 하는 것이 바람직하다 판단되어 Nginx 캐싱에 대해 찾아보게 되었다./etc/nginx/sites-available/default# server 블록 상단에 추가fastcgi_cache_path /dev/shm/nginx_cachelevels=1:2keys_zone=PHPCACHE:100mmax_size=500minactive=60muse_temp_path=offfastcgi_cache_use_stale error timeout updating invalid_header http_500;fastcgi_cach..
2025.11.02 -
개요Nginx에서 www 서브도메인을 메인 도메인으로 리다이렉트 설정 시, 검색엔진이 어떤 도메인을 색인하는지에 대한 내용을 정리해보았다.검색엔진의 리다이렉트 처리질문의 배경Nginx에서 www.example.com을 example.com으로 301 리다이렉트 설정 시, 검색엔진(구글, 네이버)이 www 도메인을 노출할지에 대한 의문이 발생하였다.검색엔진의 동작 방식크롤러의 리다이렉트 추적크롤러 접근: www.example.com ↓Nginx 응답: 301 → example.com ↓크롤러 인식: "example.com이 정규 URL" ↓검색 결과: example.com으로 색인핵심 사실:검색엔진은 301 리다이렉트를 따라가며 최종 도착 URL을 정규 버전으로 인식리다이렉..
Nginx - www, non-www redirect 시 도메인 검색엔진의 색인 방식개요Nginx에서 www 서브도메인을 메인 도메인으로 리다이렉트 설정 시, 검색엔진이 어떤 도메인을 색인하는지에 대한 내용을 정리해보았다.검색엔진의 리다이렉트 처리질문의 배경Nginx에서 www.example.com을 example.com으로 301 리다이렉트 설정 시, 검색엔진(구글, 네이버)이 www 도메인을 노출할지에 대한 의문이 발생하였다.검색엔진의 동작 방식크롤러의 리다이렉트 추적크롤러 접근: www.example.com ↓Nginx 응답: 301 → example.com ↓크롤러 인식: "example.com이 정규 URL" ↓검색 결과: example.com으로 색인핵심 사실:검색엔진은 301 리다이렉트를 따라가며 최종 도착 URL을 정규 버전으로 인식리다이렉..
2025.10.30 -
개요분명 이전에 공부했던 개념인 리버스 프록시에 대해 스스로 질문을 던졌더니 제대로 답변을 하지 못했다. 지금의 나보다 더 멍청할 미래의 나를 위해 정리해주도록 하자.리버스 프록시란?식당 비유로 이해하기리버스 프록시는 식당에서 주문을 받는 직원과 같다.일반적인 상황 (프록시 없음)손님(사용자) → 직접 주방장(서버)에게 주문리버스 프록시 사용손님(사용자) → 직원(Nginx) → 주방장(서버)에게 전달리버스 프록시의 주요 기능로드 밸런싱: 트래픽이 많을 때 여러 서버로 요청 분산보안: 실제 서버의 위치와 구조를 클라이언트로부터 숨김캐싱: 자주 요청되는 콘텐츠를 미리 저장하여 빠른 응답 제공실제 구조사용자 브라우저 → Nginx → 서버(애플리케이션 레벨)Nginx가 클라이언트의 요청을 받아 서버에 전달하..
Nginx - 리버스 프록시란?개요분명 이전에 공부했던 개념인 리버스 프록시에 대해 스스로 질문을 던졌더니 제대로 답변을 하지 못했다. 지금의 나보다 더 멍청할 미래의 나를 위해 정리해주도록 하자.리버스 프록시란?식당 비유로 이해하기리버스 프록시는 식당에서 주문을 받는 직원과 같다.일반적인 상황 (프록시 없음)손님(사용자) → 직접 주방장(서버)에게 주문리버스 프록시 사용손님(사용자) → 직원(Nginx) → 주방장(서버)에게 전달리버스 프록시의 주요 기능로드 밸런싱: 트래픽이 많을 때 여러 서버로 요청 분산보안: 실제 서버의 위치와 구조를 클라이언트로부터 숨김캐싱: 자주 요청되는 콘텐츠를 미리 저장하여 빠른 응답 제공실제 구조사용자 브라우저 → Nginx → 서버(애플리케이션 레벨)Nginx가 클라이언트의 요청을 받아 서버에 전달하..
2025.10.28 -
개요현재 단일 도메인으로 서비스를 운영하고 있는데, www.도메인으로 접속했을 때 기존 도메인으로 리다이렉트 시키고 싶었다. SEO 측면에서도 단일 도메인으로 통일하는 것이 좋고, 사용자 경험 측면에서도 일관된 URL을 제공하는 것이 중요하다고 판단했다.설정 방법1. DNS 레코드 추가먼저 호스팅 사이트의 DNS 설정에서 www 서브도메인에 대한 CNAME 레코드를 추가했다.- 레코드 타입: CNAME- 호스트: www- 값: 도메인. (호스팅 사이트에 따라 끝에 .을 붙이는 경우도 있다.)- TTL: 600 (10분)TTL을 낮게 설정한 이유는 새로운 레코드를 추가하는 것이기 때문에 문제 발생 시 빠르게 수정할 수 있도록 하기 위함이다. 안정화된 후에는 3600(1시간) 이상으로 올려도 ..
Nginx - www 서브도메인을 non-www로 리다이렉트하기개요현재 단일 도메인으로 서비스를 운영하고 있는데, www.도메인으로 접속했을 때 기존 도메인으로 리다이렉트 시키고 싶었다. SEO 측면에서도 단일 도메인으로 통일하는 것이 좋고, 사용자 경험 측면에서도 일관된 URL을 제공하는 것이 중요하다고 판단했다.설정 방법1. DNS 레코드 추가먼저 호스팅 사이트의 DNS 설정에서 www 서브도메인에 대한 CNAME 레코드를 추가했다.- 레코드 타입: CNAME- 호스트: www- 값: 도메인. (호스팅 사이트에 따라 끝에 .을 붙이는 경우도 있다.)- TTL: 600 (10분)TTL을 낮게 설정한 이유는 새로운 레코드를 추가하는 것이기 때문에 문제 발생 시 빠르게 수정할 수 있도록 하기 위함이다. 안정화된 후에는 3600(1시간) 이상으로 올려도 ..
2025.10.24 -
개요GCP 인스턴스에서 OCI 인스턴스로 서버를 이전하던 중 기존 GCP에서는 문제없이 작동하던 Docker 기반 네트워크 구조가 OCI에서는 제대로 동작하지 않았고, 그로 인해 Nginx Proxy Manager(이하 npm) 컨테이너가 다른 서비스 컨테이너와 통신을 할 수 없어 도메인을 연결할 수 없게 되었다.이를 해결하기 위해 꽤나 많은 시간을 허비하게 되었고, 이는 그 과정을 압축한 글이다.문제 상황OCI로 서버를 옮긴 뒤 Docker 설정을 기존과 동일하게 구성했지만, npm이 다른 컨테이너와 통신하지 못했다.1. GCP에서는 npm이 `172.17.0.1:[service port]`로 통신하면 정상 작동했지만 OCI에서 같은 방식으로 설정할 경우 502 bad gateway 에러 발생2. `n..
Nginx - Nginx Proxy Manager 502 bad gateway 에러 해결개요GCP 인스턴스에서 OCI 인스턴스로 서버를 이전하던 중 기존 GCP에서는 문제없이 작동하던 Docker 기반 네트워크 구조가 OCI에서는 제대로 동작하지 않았고, 그로 인해 Nginx Proxy Manager(이하 npm) 컨테이너가 다른 서비스 컨테이너와 통신을 할 수 없어 도메인을 연결할 수 없게 되었다.이를 해결하기 위해 꽤나 많은 시간을 허비하게 되었고, 이는 그 과정을 압축한 글이다.문제 상황OCI로 서버를 옮긴 뒤 Docker 설정을 기존과 동일하게 구성했지만, npm이 다른 컨테이너와 통신하지 못했다.1. GCP에서는 npm이 `172.17.0.1:[service port]`로 통신하면 정상 작동했지만 OCI에서 같은 방식으로 설정할 경우 502 bad gateway 에러 발생2. `n..
2025.05.12 -
개요최근 GCP 프리티어 VM이 너무 느린 것 같아 Oracle Cloud Infrastructure(OCI)의 프리티어로 서버를 옮기게 되었다. OCI는 상상 이상으로 쾌적하게 잘 작동했지만, 인스턴스 간 네트워크 구성에서 예상치 못한 문제가 발생했다.OCI에서는 프리티어 기준으로 VM 인스턴스를 2개까지 생성 가능하지만, Public IP는 1개만 예약 가능하다.그리하여 아래와 같이 구성했다.main-instance: 실제 서비스 운영 (Nginx, 백엔드 API 등), Public IP 보유db-instance: MySQL DB만 운영, 사설 IP만 존재하지만 위 구조로 진행 중 DB 툴(MySQL Workbench, DBeaver 등)에서 MySQL에 접속하려고 할 때 문제가 발생했다.원인처음엔 ..
Nginx - Nginx Proxy Manager Stream 설정개요최근 GCP 프리티어 VM이 너무 느린 것 같아 Oracle Cloud Infrastructure(OCI)의 프리티어로 서버를 옮기게 되었다. OCI는 상상 이상으로 쾌적하게 잘 작동했지만, 인스턴스 간 네트워크 구성에서 예상치 못한 문제가 발생했다.OCI에서는 프리티어 기준으로 VM 인스턴스를 2개까지 생성 가능하지만, Public IP는 1개만 예약 가능하다.그리하여 아래와 같이 구성했다.main-instance: 실제 서비스 운영 (Nginx, 백엔드 API 등), Public IP 보유db-instance: MySQL DB만 운영, 사설 IP만 존재하지만 위 구조로 진행 중 DB 툴(MySQL Workbench, DBeaver 등)에서 MySQL에 접속하려고 할 때 문제가 발생했다.원인처음엔 ..
2025.05.08 -
개요Grafana로 PHP 서버 상태를 모니터링하려고 하다가 Apache 환경에서의 설정과 보안 문제를 겪게 되어, 그 과정을 정리해보았다.특히 server-status를 외부에서 접근 가능하게 열었을 때 생기는 보안 이슈와, Nginx 프록시 환경에서의 IP 처리 문제를 어떻게 해결했는지를 중심으로 다룬다.Apache server-status 활성화Apache에서는 mod_status 모듈을 활성화한 뒤 /server-status 엔드포인트를 열어 서버 상태 정보를 확인할 수 있다.Grafana로 apache 서버를 모니터링 할때는 해당 데이터를 수집하기 위해 보통 Prometheus용 Apache Exporter와 연결하여 시각화한다.처음에는 다음과 같은 설정으로 server-status를 활성화했었..
PHP - Apache server status 설정 + 프록시 IP 처리개요Grafana로 PHP 서버 상태를 모니터링하려고 하다가 Apache 환경에서의 설정과 보안 문제를 겪게 되어, 그 과정을 정리해보았다.특히 server-status를 외부에서 접근 가능하게 열었을 때 생기는 보안 이슈와, Nginx 프록시 환경에서의 IP 처리 문제를 어떻게 해결했는지를 중심으로 다룬다.Apache server-status 활성화Apache에서는 mod_status 모듈을 활성화한 뒤 /server-status 엔드포인트를 열어 서버 상태 정보를 확인할 수 있다.Grafana로 apache 서버를 모니터링 할때는 해당 데이터를 수집하기 위해 보통 Prometheus용 Apache Exporter와 연결하여 시각화한다.처음에는 다음과 같은 설정으로 server-status를 활성화했었..
2025.04.21