워드프레스를 엔지넥스(Nginx) 리버스 프록시(포워딩) 환경에서 안정적으로 구동하려면 Nginx 설정 파일(nginx.conf)에 헤더 전달 설정을 명시하고, 워드프레스의 wp-config.php 파일에서 프록시 신호를 인식하도록 처리해야 합니다. [1, 2, 3]

이 설정을 건너뛰면 무한 리다이렉트 오류(ERR_TOO_MANY_REDIRECTS)가 발생하거나 스타일에셋(CSS/JS)이 깨지는 현상이 발생합니다. [1, 2, 3]


1. Nginx 리버스 프록시 설정 (nginx.conf)

외부 요청을 받아 내부 워드프레스 서버(예: http://127.0.0.1:8080 또는 도커 컨테이너)로 전달하는 Nginx 블록 설정입니다. 프로토콜(http vs https)과 원래 호스트 정보를 누락 없이 전달하는 것이 핵심입니다. [1, 2, 3]

nginx

server {
    listen 80;
    listen [::]:80;
    server_name your-domain.com; # 실제 도메인 주소 입력

    # HTTPS 자동 리다이렉트 설정 (SSL 적용 시 필요)
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name your-domain.com;

    # SSL 인증서 경로 (Let's Encrypt 등)
    ssl_certificate /etc/letsencrypt/live/://your-domain.com;
    ssl_certificate_key /etc/letsencrypt/live/://your-domain.com;

    location / {
        # 워드프레스가 구동 중인 내부 주소 및 포트 지정
        proxy_pass http://127.0.0.1:8080; 

        # 중요 리버스 프록시 헤더 설정
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme; # 현재 요청 프로토콜(http/https) 전송
        proxy_set_header X-Forwarded-Host $host;

        # 프록시 버퍼 및 타임아웃 최적화 (대용량 파일 업로드 및 플러그인 통신 대비)
        proxy_connect_timeout 300s;
        proxy_send_timeout 300s;
        proxy_read_timeout 300s;
        proxy_buffer_size 128k;
        proxy_buffers 4 256k;
        proxy_busy_buffers_size 256k;
    }
}

코드를 사용할 때는 주의가 필요합니다.


2. 워드프레스 설정 파일 수정 (wp-config.php)

Nginx가 X-Forwarded-Proto 헤더로 https 신호를 보내더라도, 내부 워드프레스 서버는 단순히 내부 http 요청으로만 받아들여 주소를 잘못 생성할 수 있습니다. [1, 2]

워드프레스 루트 디렉토리에 있는 wp-config.php 파일을 열고, 맨 위줄(<?php 바로 아래)에 다음 코드를 추가해 프록시 서버의 SSL 정보를 강제로 인식시킵니다. [1, 2]

php

<?php
/**
 * Nginx 리버스 프록시 SSL 인식 설정
 */
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
    $_SERVER['HTTPS'] = 'on';
}

if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}

// 사이트 URL 고정 설정 (필요 시 도메인 주소 명시)
define('WP_HOME', 'https://your-domain.com');
define('WP_SITEURL', 'https://your-domain.com');

// 관리자 페이지 SSL 강제 적용
define('FORCE_SSL_ADMIN', true);

코드를 사용할 때는 주의가 필요합니다.

(주의: wp-config.php 파일 내부의 최하단에 추가하면 플러그인 로드 시점보다 늦어 작동하지 않을 수 있으므로 반드시 상단에 배치해야 합니다.) [1, 2]


3. 설정 반영 및 확인

  1. Nginx 문법 검사: sudo nginx -t
  2. Nginx 재시작: sudo systemctl restart nginx
  3. 브라우저로 워드프레스 사이트에 접속하여 로그인(://your-domain.com) 후 이미지나 스타일시트가 깨짐 없이 정상 동작하는지 확인합니다. [1, 2, 3]

만약 위 설정을 모두 마쳤음에도 특정 페이지에서 오류가 발생한다면 다음 정보를 알려주세요.

  • 워드프레스가 도커(Docker) 컨테이너 내부에서 작동 중인지 여부
  • 접속 시 브라우저에 표시되는 정확한 에러 메시지나 증상 (예: 무한 리다이렉트, 502 Bad Gateway 등) [1, 2, 3]

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다