시놀로지 웹스테이션 커스텀 404 페이지 안 뜰 때 해결 방법

시놀로지 404 에러

시놀로지 웹스테이션 커스텀 404 페이지, 왜 안 뜰까?

시놀로지 웹스테이션 커스텀 404 페이지를 설정했는데, 아무리 해도 nginx 기본 404만 뜨는 경험을 해본 적 있으신가요? 오류 페이지 프로필도 만들고, PHP 파일도 올렸는데 커스텀 페이지가 표시되지 않는다면 이 글이 도움이 됩니다.

이 글에서는 시놀로지 웹스테이션 커스텀 404 페이지가 작동하지 않는 원인과 해결 방법, 그리고 코드 작성 시 반드시 주의해야 할 점을 정리합니다.

환경

  • Synology DSM 7.x
  • Web Station (Nginx + PHP-FPM)
  • PHP 8.2

문제 상황 — 커스텀 404가 표시되지 않음

웹스테이션의 오류 페이지 프로필에서 404 발생 시 /404.php로 리다이렉션하도록 설정했습니다. 하지만 실제로 존재하지 않는 URL에 접속하면 커스텀 페이지 대신 아래와 같은 nginx 기본 404만 반복적으로 표시됩니다.

404 Not Found
nginx

분명 404.php 파일도 올렸고, 오류 페이지 프로필도 연결했는데 왜 이런 걸까요?

원인 — fastcgi_intercept_errors 설정

시놀로지 웹스테이션 커스텀 404 페이지가 안 뜨는 핵심 원인은 nginx의 fastcgi_intercept_errors on; 설정입니다. 이 설정은 시놀로지 웹스테이션이 기본으로 켜놓는 설정이며, 오류 페이지 프로필 기능이 이 설정을 기반으로 동작합니다.

이 설정이 활성화되어 있으면 PHP가 4xx, 5xx 상태코드를 반환할 때 nginx가 PHP의 응답을 무시하고 자체 에러 페이지를 대신 표시합니다.

문제가 발생하는 흐름

순서동작결과
1사용자가 존재하지 않는 URL에 접속nginx가 404 발생
2오류 페이지 프로필이 /404.php로 리다이렉션정상 작동
3404.php가 http_response_code(404)로 404 상태코드 반환여기가 문제
4fastcgi_intercept_errors가 404 응답을 가로챔커스텀 HTML 무시됨
5nginx 기본 404 페이지 표시커스텀 페이지가 안 보임

즉, 커스텀 404 페이지가 다시 404를 반환하니까 nginx가 계속 가로채는 구조입니다.

시놀로지 웹스테이션 커스텀 404 페이지 — 문제의 코드

<?php
// ❌ 이 줄이 원인 — nginx가 가로챕니다
http_response_code(404);
?>
<!DOCTYPE html>
<html>
<head><title>404</title></head>
<body>
  <h1>404</h1>
  <p>페이지를 찾을 수 없습니다.</p>
</body>
</html>

해결 방법 — 상태코드를 설정하지 않기

http_response_code(404)를 제거합니다. 오류 페이지 프로필의 리다이렉션 방식에서는 PHP가 200을 반환해야 nginx가 가로채지 않고 커스텀 페이지를 정상적으로 사용자에게 전달합니다.

수정된 코드

<!-- 상태코드 설정 없이 순수 HTML로 작성 -->
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>페이지를 찾을 수 없습니다</title>
    <style>
        * { margin:0; padding:0; box-sizing:border-box; }
        body {
            background: #0a0e14;
            color: #fff;
            display: flex;
            align-items: center;
            justify-content: center;
            min-height: 100vh;
            font-family: -apple-system, sans-serif;
        }
        .box { text-align: center; }
        h1 {
            font-size: 6rem;
            font-weight: 900;
            background: linear-gradient(135deg, #00d1ff, #00ffc8);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
        }
        p { color: #94a3b8; font-size: 1.1rem; margin: 16px 0 32px; }
        a {
            display: inline-block;
            padding: 14px 32px;
            background: linear-gradient(135deg, #00d1ff, #00ffc8);
            color: #000;
            font-weight: 700;
            border-radius: 12px;
            text-decoration: none;
        }
    </style>
</head>
<body>
    <div class="box">
        <h1>404</h1>
        <p>요청하신 페이지를 찾을 수 없습니다.</p>
        <a href="/">홈으로 돌아가기</a>
    </div>
</body>
</html>

해결 후 동작 흐름

순서동작결과
1사용자가 존재하지 않는 URL에 접속nginx가 404 발생
2오류 페이지 프로필이 /404.php로 리다이렉션정상 작동
3404.php가 200 상태코드로 커스텀 페이지 반환nginx가 가로채지 않음
4커스텀 404 페이지가 사용자에게 정상 표시해결 완료

오류 페이지 프로필 설정 방법

시놀로지 웹스테이션 커스텀 404 페이지를 적용하려면 오류 페이지 프로필 설정이 필요합니다. 아래 순서대로 진행하세요.

1단계: 404.php 파일 업로드

위의 수정된 코드를 404.php 파일로 저장하고, 웹사이트 루트 디렉토리에 업로드합니다. SSH에서 파일 권한도 확인하세요.

# 파일 권한 설정 — nginx(http 유저)가 읽을 수 있어야 합니다
chmod 644 /volume1/web/사이트폴더/404.php

2단계: 오류 페이지 프로필 생성

DSM에서 Web Station → 오류 페이지 설정으로 이동합니다.

  1. 생성 클릭
  2. 프로필 이름 입력 (예: custom-404)
  3. 추가 클릭 → 상태 코드: 404 선택
  4. 응답 유형: 이 사이트의 URL에 대한 링크 선택
  5. URL: /404.php 입력
  6. 저장

[스크린샷 위치: Web Station > 오류 페이지 설정 > 프로필 생성 화면. 상태 코드 404, 응답 유형 “이 사이트의 URL에 대한 링크”, URL란에 /404.php 입력된 상태]

3단계: 웹 포털에 프로필 연결

  1. Web Station → 웹 포털로 이동
  2. 해당 사이트 선택 → 편집
  3. 오류 페이지 프로필을 방금 생성한 프로필(custom-404)로 변경
  4. 저장

[스크린샷 위치: Web Station > 웹 포털 > 사이트 편집 화면. 오류 페이지 드롭다운에서 custom-404 프로필이 선택된 상태]

4단계: 테스트

존재하지 않는 URL로 접속해서 커스텀 404 페이지가 뜨는지 확인합니다.

# SSH에서 테스트
curl -k https://localhost/존재하지않는페이지 -H "Host: 내도메인.com"

# 또는 브라우저에서 직접 접속
https://내도메인.com/asdfqwer

코드 작성 시 주의사항

시놀로지 웹스테이션 커스텀 404 페이지를 만들 때 아래 사항을 꼭 확인하세요.

항목설명
http_response_code() 사용 금지4xx/5xx 상태코드를 설정하면 fastcgi_intercept_errors가 가로챕니다. 오류 페이지에서는 절대 사용하지 마세요.
exit() / die() 주의DB 연결 등에서 exit을 호출하면 HTML 출력 전에 스크립트가 종료됩니다. 오류 페이지에서 DB 작업은 try-catch로 감싸거나 아예 분리하세요.
로깅은 JS로 처리PHP에서 DB 로깅 시 연결 실패로 페이지가 깨질 수 있습니다. JavaScript의 navigator.sendBeacon()으로 별도 엔드포인트에 로깅하는 방식이 안전합니다.
파일 권한 확인Mac에서 SMB로 NAS에 파일을 생성하면 권한이 ----------로 설정되는 경우가 있습니다. nginx(http 유저)가 읽을 수 있도록 chmod 644를 적용하세요.
nginx 리로드웹스테이션에서 오류 페이지 프로필을 변경한 후에는 nginx -s reload를 실행해야 반영됩니다.

fastcgi_intercept_errors란?

이 설정의 원래 목적은 이렇습니다.

  • PHP가 에러 상태코드를 반환하면 nginx가 가로채서
  • 웹스테이션에서 설정한 오류 페이지 프로필의 페이지를 대신 보여줌

시놀로지 웹스테이션이 이 설정을 기본으로 켜놓는 이유는 오류 페이지 프로필 기능 자체가 이 설정 위에서 동작하기 때문입니다. 수동으로 끌 수는 있지만, 웹스테이션이 설정을 다시 덮어쓸 수 있어서 권장하지 않습니다.

마무리

시놀로지 웹스테이션 커스텀 404 페이지가 안 뜨는 문제의 99%는 http_response_code(404) 한 줄 때문입니다. 일반적인 웹서버에서는 404 페이지에 404 상태코드를 넣는 게 당연하지만, 시놀로지 웹스테이션에서는 이 한 줄이 nginx의 가로채기를 유발합니다.

커스텀 에러 페이지는 반드시 200 상태코드로 반환되도록 작성하세요. 그것만 지키면 오류 페이지 프로필은 정상적으로 작동합니다.

NAS 웹호스팅 구축이나 운영 중 문제가 생겼다면 상담 문의 페이지에서 편하게 문의해 주세요.

NAS 구매·설치·세팅, 전문가에게 맡기세요
모델 선정부터 초기 세팅, 외부 접속, 백업 구성까지 원스톱으로 도와드립니다.