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_proxy
및 mod_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`를 반드시 실행해야 합니다.