페이지 3: SELinux 허용 정책 설정 및 Apache 설정 (Gunicorn/mod_wsgi 연동)

CentOS의 SELinux 보안 정책을 설정하여 Apache와 Django 애플리케이션이 올바르게 동작하도록 허용하고, Apache 웹 서버가 Django 애플리케이션과 정적 파일을 제공하도록 설정을 구성합니다. 여기서는 Gunicorn과 mod_wsgi 두 가지 연동 방식을 모두 제시합니다.


5. SELinux 허용 정책 설정

Django 프로젝트 디렉토리(/home/hello)에 Apache가 접근할 수 있도록 SELinux 보안 컨텍스트를 지정하고, Apache가 네트워크 접속 및 사용자 콘텐츠를 읽을 수 있도록 허용합니다.

sudo semanage fcontext -a -t httpd_sys_content_t "/home/hello(/.*)?" # /home/hello 디렉토리 및 하위 파일에 Apache 웹 콘텐츠 타입 지정
sudo restorecon -Rv /home/hello # SELinux 컨텍스트 복원
sudo setsebool -P httpd_can_network_connect on # Apache가 네트워크에 연결하도록 허용 (Gunicorn 소켓 접근, DB 접속 등)
sudo setsebool -P httpd_read_user_content on # Apache가 사용자 콘텐츠를 읽도록 허용

6. Apache 설정 (Gunicorn 연동 방식)

Apache가 Gunicorn을 통해 Django 애플리케이션을 서빙하도록 /etc/httpd/conf.d/hello.conf 파일을 생성합니다. Apache의 mod_proxy 모듈을 사용하여 Gunicorn의 HTTP (TCP) 주소로 요청을 프록시합니다. (권장)

cat | sudo tee /etc/httpd/conf.d/hello.conf > /dev/null << EOF
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName your_domain_or_ip # 실제 서버 도메인 또는 IP로 변경
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:8000/
    ProxyPassReverse / http://127.0.0.1:8000/
    Alias /static /home/hello/static
    <Directory /home/hello/static> # 정적 파일 디렉토리 설정
        Require all granted
    </Directory>
    ErrorLog /var/log/httpd/django_error.log
    CustomLog /var/log/httpd/django_access.log combined
</VirtualHost>
EOF

참고: Apache의 mod_proxymod_proxy_http 모듈이 활성화되어 있어야 합니다. (일반적으로 기본 설치 시 활성화됨)


6. Apache 설정 (mod_wsgi 연동 방식)

Apache가 직접 Django 애플리케이션을 서빙하도록 /etc/httpd/conf.d/hello.conf 파일을 생성합니다. 이 방식은 mod_wsgi 모듈을 직접 사용합니다. (선택 사항)

cat | sudo tee /etc/httpd/conf.d/hello.conf > /dev/null << EOF
WSGIDaemonProcess hello python-home=/home/hello/venv python-path=/home/hello
WSGIProcessGroup hello
WSGIScriptAlias / /home/hello/config/wsgi.py
<Directory /home/hello/config> # WSGI 파일이 있는 디렉토리 설정
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>
Alias /static /home/hello/static
<Directory /home/hello/static> # 정적 파일 디렉토리 설정
    Require all granted
</Directory>
EOF

참고: 이 방식을 사용하려면 페이지 1에서 `pip install mod_wsgi`를 반드시 실행해야 합니다.