조급한 마음에 다운 받아서 얼른 설치만 해 봤습니다.
초기화면(메인)은 잘 DX님 데모페이지 홈처럼 잘 설치 되었는데
로그인, 회원가입, 고객센터, 더보기 등 각종 버튼 클릭 시
"File not found"가 표시 됩니다.
조급한 마음에 다운 받아서 얼른 설치만 해 봤습니다.
초기화면(메인)은 잘 DX님 데모페이지 홈처럼 잘 설치 되었는데
로그인, 회원가입, 고객센터, 더보기 등 각종 버튼 클릭 시
"File not found"가 표시 됩니다.
DXCMS를 시놀로지/큐냅 등 NAS의 Nginx + PHP-FPM 환경에 설치했을 때, 로그인 / 회원가입 / 고객센터 / 더보기 같은 버튼을 누르면 "File not found." 라는 짧은 텍스트만 표시되는 경우의 원인과 해결 방법입니다.
/)은 정상적으로 보임
File not found.
만 표시됨 (DXCMS 디자인이 적용된 404 페이지가 아님)
data/error.log 파일이 생성되어 있지 않음DXCMS는 단일 진입점(Front Controller) 구조입니다.
/login, /register, /support, /board/notice, /api/... 등
↓ (실제 파일이 아님)
모두 루트의 index.php 가 받아서
내부적으로 라우팅 처리
/login 같은 주소는 디스크에 실제로 존재하는 파일이 아닙니다. 정상적인 설정에서는 Nginx가 이런 요청을 모두 index.php로 넘겨주고, index.php가 내부적으로 어떤 화면을 보여줄지 결정합니다.
그런데 Nginx 설정이 이 요청을 index.php로 넘기지 않고, 존재하지 않는 파일을 PHP-FPM에 그대로 전달하면 PHP-FPM은 그 파일을 찾지 못해 File not found. 라는 자체 오류 메시지를 그대로 응답으로 보냅니다.
이때는 DXCMS의 PHP 코드가 단 한 줄도 실행되지 않은 상태이기 때문에:
data/error.log도 생성되지 않고즉, DXCMS 코드 문제가 아니라 Nginx 설정 문제입니다.
/)은 잘 보이는지 확인 → 보통 잘 보임 (/ → index.php는 대부분 기본 설정에도 연결되어 있음)https://내주소/login 입력 → 역시 File not found.가 뜨는지 확인/etc/nginx/... 또는 NAS 패키지의 가상 호스트 설정)에서 아래 항목이 있는지 확인:
location / {
try_files $uri $uri/ =404; ← 이런 식으로 되어 있으면 원인
}
또는
location / {
try_files $uri $uri/; ← /index.php 로 떨어지는 부분이 없음
}
위와 같이 /index.php로 떨어지는 fallback이 없으면 이 문제가 발생합니다.
DXCMS 배포 파일에 포함된 nginx.conf.example을 기준으로, 핵심 부분만 정리하면 다음과 같습니다.
server {
listen 80;
server_name 내도메인.com;
root /경로/DXCMS설치폴더;
index index.php;
charset utf-8;
# data/ 폴더 직접 접근 차단
location ^~ /data/ {
deny all;
return 403;
}
# 모든 요청 → index.php 로 라우팅
# 주의: $uri/ (디렉토리 체크) 를 넣지 않습니다.
# admin/, boards/ 같은 실제 폴더가 있어도 index.php로 넘겨야 합니다.
location / {
try_files $uri /index.php?$query_string;
}
# PHP FastCGI (루트 index.php 만 실행)
location = /index.php {
include fastcgi_params;
fastcgi_pass unix:/run/php/php-fpm.sock; # NAS의 PHP-FPM 소켓 경로로 변경
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_intercept_errors on;
fastcgi_read_timeout 60;
}
# 그 외 .php 파일 직접 실행 차단 (보안)
location ~ \.php$ {
deny all;
return 403;
}
location ~ /\. {
deny all;
return 404;
}
error_page 403 404 /index.php;
}
location / { try_files $uri /index.php?$query_string; }
$uri/ (디렉토리 자동 인덱싱)를 넣지 않아야 합니다.index.php로 넘어가야 합니다.location = /index.php { ... } — SCRIPT_FILENAME을 $document_root/index.php로 고정값으로 지정합니다. ($fastcgi_script_name 변수를 쓰는 일반적인 PHP 설정 템플릿은 이 구조에서 오작동의 원인이 될 수 있습니다).php 직접 실행 차단 — location ~ \.php$ { deny all; } 로 index.php 외의 모든 .php 직접 호출을 막아야 합니다 (보안 목적이며, 위 1·2번 설정과 충돌하지 않습니다. location = /index.php가 더 구체적인 매칭이라 먼저 적용됩니다).try_files $uri $uri/ =404; 형태로 들어가는 경우가 많습니다..conf 파일을 직접 위 내용으로 수정해야 합니다./usr/local/etc/nginx/sites-enabled/ 또는 /usr/syno/etc/nginx/sites-enabled/ 아래의 가상 호스트별 .conf 파일입니다.index.php로의 fallback을 포함하지 않는 경우가 많습니다./etc/config/nginx/ 또는 App Center로 설치한 Nginx 패키지의 sites-enabled 설정을 직접 수정해야 합니다.nginx.conf.example 파일을 그대로 볼륨 마운트하여 사용하는 것이 가장 안전합니다.fastcgi_pass 가 올바른 PHP-FPM 컨테이너(소켓/포트)를 가리키는지도 함께 확인하세요.data/error.log에 기록되기 시작합니다. (지금까지 파일이 없던 것은 정상 — PHP가 한 번도 실행되지 않았기 때문입니다)/login 등 가상 경로 직접 접속 시 File not found. 가 뜨는지 확인했다location /에 /index.php?$query_string fallback이 있다location /에 $uri/ (디렉토리 매칭)가 없다location = /index.php에서 SCRIPT_FILENAME이 $document_root/index.php로 고정되어 있다data/error.log에 기록이 남는지 확인한다 (이때부터는 DXCMS 측 원인이므로 로그 내용을 보고 추가 진단)
샌드박스 테스트에서는 해당 설정으로 정상 동작하는 것으로 확인되었습니다.
다만, 제공해 드린 nginx 설정 파일은 실제 운영 설정이 아닌 예제(nginx.conf.example) 파일입니다.
서버마다 PHP 버전, PHP-FPM 소켓 경로, root 경로, 권한 설정 등이 다르기 때문에 그대로 적용해서 동작하지 않을 수도 있습니다.
그래서 현재 단계에서는 DXCMS 자체의 문제라고 단정하기보다는 서버 환경 설정이 올바르게 적용되었는지 먼저 확인해야 할 것 같습니다.
저도 계속 방법을 찾아보겠습니다. 다만 환경 설정이 정상적으로 되어야 그 다음 단계의 문제점을 찾을 수 있습니다.
혹시 가능하시다면 오류 해결 가이드와 예제 설정 파일을 다시 한번 확인해 주시면 감사하겠습니다.
특히 PHP-FPM 경로와 root 경로는 실제 서버 환경에 맞게 수정이 필요한 부분입니다.
저도 계속 고민해 보고 원인을 찾아보겠습니다.
친철한 안내 감사 드립니다.
잘 읽어 보고 해 시도해 보겠습니다.
현재 그누보드를 최신 버전 + 리빌더로 초기 세팅하고
몇개의 메뉴만 만들어 만들어가던 도메인을 초기화하고
DXCMS을 설치했습니다.
제가 이쪽에은 문외한이다 보니
시간을 갖고 천천히 시도해 보겠습니다.
감사합니다.