기록 목록자료실

open_basedir 제한 환경에서 dashboard API HTTP 500 대응 체크리스트

humanpchumanpc ·
05-2030
open_basedir 제한 환경에서 관리자 dashboard API가 HTTP 500으로 중단되는 문제를 확인한 뒤, 현재 운영 중 정리한 대응 체크리스트와 구조 방향입니다. 초기 문제는 dashboard 내부 시스템 리소스 probe 과정에서 발생했습니다. 예를 들어: - /proc/meminfo 접근 - disk_total_space() - disk_free_space() - file_exists() 등 Linux 시스템 자원 확인 로직이 제한 환경에서 warning을 발생시키고, Laravel이 이를 ErrorException으로 승격하면서 API 전체 실패로 이어지고 있었습니다. 특히 다음 환경에서는 동일 문제가 재현될 가능성이 있었습니다. - open_basedir 활성화 - shared hosting - hardened PHP-FPM - container/chroot - restricted filesystem - /proc 접근 제한 현재 운영 기준에서는: "시스템 리소스 측정 실패" 와 "dashboard API 실패" 를 분리하는 방향이 더 안정적이라고 판단했습니다. 현재 정리 중인 대응 방향은 다음과 같습니다. 1. filesystem 접근 runtime-safe 처리 다음 함수들은 제한 환경에서 실패 가능성이 있기 때문에: - file_exists() - is_readable() - file_get_contents() - disk_total_space() - disk_free_space() - shell_exec() 직접 호출보다: - safe wrapper - guarded probe - helper abstraction 형태로 보호. 특히 warning → ErrorException 전파를 차단하는 방향을 우선 검토 중입니다. 2. resource probe 실패와 API 실패 분리 현재는: resource probe 실패 → dashboard API 전체 실패 형태에 가까웠는데, 운영 환경에서는 dashboard resource 정보가 부가 상태 정보에 가까운 만큼: resource probe 실패 → fallback 값 반환 → dashboard API는 정상 응답 유지 구조가 더 안정적이라고 판단했습니다. 예: { "cpu": { "percentage": 0 }, "memory": { "percentage": 0, "used": "0 B", "total": "0 B" }, "disk": { "percentage": 0, "used": "0 B", "total": "0 B" } } 또는 unknown 상태 반환. 3. runtime condition 기반 설계 현재는 운영 환경 차이를: - 예외 상황 - 특수 케이스 가 아니라, "예상 가능한 runtime condition" 으로 다루는 방향을 중요하게 보고 있습니다. 특히: - shared hosting - restricted filesystem - container/chroot - hardened PHP-FPM - open_basedir 같은 환경은 실제 운영 환경에서 충분히 발생 가능한 조건이라고 판단했습니다. 4. dashboard UI 안정성 우선 현재 dashboard는 상태 표시 UI 성격이 강하기 때문에, 일부 시스템 정보를 읽지 못하더라도: - 관리자 화면 유지 - API response shape 유지 - HTTP 200 유지 방향이 운영 안정성 측면에서 더 적절하다고 보고 있습니다. 5. 추가 확인 중인 항목 현재 추가로 다음 부분도 계속 확인 중입니다. - disabled shell_exec 환경 - filesystem permission 제한 - WAN 분리 환경 - queue worker 제한 환경 - restricted PHP-FPM runtime - fallback serialization consistency 현재는 dashboard probe 실패가 운영 전체 실패로 이어지지 않도록 runtime-safe 방향으로 계속 구조를 정리 중입니다.

댓글과 작업 영역을 나중에 불러옵니다

필요할 때 댓글과 작업 영역을 불러옵니다. 댓글 0개