Rocky 9 에서 Nginx 프록시가 SELinux 에 막힐 때
502 와 error.log 의 Permission denied 가 SELinux 때문인지 가려내고, boolean 으로 풀고, 문서 루트 라벨까지 맞추는 순서입니다.
Nginx 설정이 맞는데도 프록시가 502 를 내면 SELinux 를 의심합니다. 앱이 127.0.0.1:8080 에서 정상으로 듣고 있다고 보고 진행합니다. 프록시 설정 자체는 Ubuntu 24.04 리버스 프록시 글을 따릅니다.
[1] 증상을 확인합니다. 브라우저에는 502 Bad Gateway 가 나오고, /var/log/nginx/error.log 에는 다음 문구가 남습니다.
# tail -n 5 /var/log/nginx/error.logconnect() to 127.0.0.1:8080 failed (13: Permission denied) while connecting to upstream[2] SELinux 모드를 봅니다. Enforcing 이면 정책 위반이 실제로 막힙니다.
# getenforce[3] 거부 기록(AVC)을 찾습니다. 공식 문서가 쓰는 명령입니다. 아무것도 안 나오면 auditd 가 도는지 확인하고, 막힌 동작을 다시 한 뒤 찾습니다.
# ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts recent[4] httpd_can_network_connect boolean 을 켭니다. -P 가 있어야 재부팅 뒤에도 유지됩니다.
# setsebool -P httpd_can_network_connect 1# getsebool httpd_can_network_connect[5] 문서 루트가 /srv/site 처럼 기본 위치가 아니면 파일 라벨이 어긋나 403 이 날 수 있습니다. 기본 /usr/share/nginx/html 이나 /var/www 와 같은 규칙을 새 경로에 붙입니다. 공식 문서는 -e 로 기본 경로와 같게 지정하는 예를 듭니다.
# semanage fcontext -a -e /var/www /srv/site# restorecon -Rv /srv/site[6] 고쳐진 것을 확인합니다. 같은 요청을 다시 보내고 error.log 에 (13: Permission denied) 가 더 안 생기는지 봅니다.
# curl -sI http://127.0.0.1/ | head -n 1Nginx 로그를 브라우저에서 바로 분석 ↗ — 아무것도 올라가지 않습니다.