{"title":"django와 아파치 사용법, mod_wsgi 사용법","version":"4.1","locale":"ko","docname":"howto/deployment/wsgi/modwsgi","url":"/ko/4.1/howto/deployment/wsgi/modwsgi/","canonical":"https://djangodocs.dev/ko/4.1/howto/deployment/wsgi/modwsgi/","summary":"django를 Apache_와 ‘mod_wsgi’와 함께 배치하는 것은 장고를 생산하기 위해 시도되고 시험된 방법이다. mod_wsgi는 Django를 포함한 모든 Python WSGI 애플리케이션을 호스팅할 수 있는 Apache 모듈입니다. Django는 mod_wsgi를 지원하는…","html":"<h1>django와 아파치 사용법, mod_wsgi 사용법<a class=\"heading-anchor\" href=\"#how-to-use-django-with-apache-and-mod-wsgi\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>django를 Apache_와 ‘mod_wsgi’와 함께 배치하는 것은 장고를 생산하기 위해 시도되고 시험된 방법이다.</p>\n<p>mod_wsgi는 Django를 포함한 모든 Python <a class=\"reference external\" href=\"https://wsgi.readthedocs.io/en/latest/\">WSGI</a> 애플리케이션을 호스팅할 수 있는 Apache 모듈입니다. Django는 mod_wsgi를 지원하는 Apache의 모든 버전에서 작동합니다.</p>\n<p>‘공식 mod_wsgi 설명서’는 mod_wsgi 사용 방법에 대한 모든 세부 정보를 제공하는 자료이다. 설치 및 구성 설명서부터 시작해 보십시오.</p>\n<section id=\"basic-configuration\">\n<h2>기본 구성<a class=\"heading-anchor\" href=\"#basic-configuration\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>mod_wsgi가 설치되어 활성화되면 Apache 서버의 ‘httpd.conf’_ 파일을 편집하고 다음을 추가합니다.</p>\n<div class=\"code-block\" data-language=\"apache\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Apache</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Apache code\"><code><span class=\"nb\">WSGIScriptAlias</span><span class=\"w\"> </span>/<span class=\"w\"> </span><span class=\"sx\">/path/to/mysite.com/mysite/wsgi.py</span>\n<span class=\"nb\">WSGIPythonHome</span><span class=\"w\"> </span><span class=\"sx\">/path/to/venv</span>\n<span class=\"nb\">WSGIPythonPath</span><span class=\"w\"> </span><span class=\"sx\">/path/to/mysite.com</span>\n\n<span class=\"nt\">&lt;Directory</span><span class=\"w\"> </span><span class=\"s\">/path/to/mysite.com/mysite</span><span class=\"nt\">&gt;</span>\n<span class=\"nt\">&lt;Files</span><span class=\"w\"> </span><span class=\"s\">wsgi.py</span><span class=\"nt\">&gt;</span>\n<span class=\"nb\">Require</span><span class=\"w\"> </span><span class=\"k\">all</span><span class=\"w\"> </span>granted\n<span class=\"nt\">&lt;/Files&gt;</span>\n<span class=\"nt\">&lt;/Directory&gt;</span>\n</code></pre></div>\n<p>“WSGIScriptAlias” 라인에 있는 첫 번째 비트는 애플리케이션을 서비스하려는 기본 URL 경로(‘/’는 루트 URL을 나타냄)이며, 두 번째 비트는 아래에서 참조하는 WSGI 파일의 위치(일반적으로 프로젝트 패키지 내 “my site”)입니다. 그러면 Apache가 해당 파일에 정의된 WSGI 응용 프로그램을 사용하여 지정된 URL 아래의 모든 요청을 처리하라는 메시지가 표시됩니다.</p>\n<p>프로젝트의 Python 종속성을 :mod:’가상 환경’에 설치할 경우 “WSGiPython Home”을 사용하여 경로를 추가하십시오. 자세한 내용은 ‘mod_wsgi 가상 환경 가이드’를 참조하십시오.</p>\n<p>“WSG 파이톤 경로” 라인은 당신의 프로젝트 패키지를 파이썬 경로에서 가져올 수 있도록 보장하며, 다시 말해 “내 사이트 가져오기”는 효과가 있다.</p>\n<p>“1‘“는 아파치가 당신의 :file:’wsgi에 접근할 수 있도록 보장한다.파이 파일</p>\n<p>다음에는 파일:’wsgi’를 확인해야 합니다.WSGI 애플리케이션 객체가 있는 py가 존재합니다. Django 버전 1.4부터는 :djadmin:’start project’가 사용자를 위해 생성되며, 그렇지 않으면 사용자가 생성해야 합니다. :doc 참조:이 파일에 넣어야 할 기본 콘텐츠에 대한 WSGI 개요 문서와 그 밖에 추가할 수 있는 콘텐츠를 보기위해서는 :doc:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>WSGI overview documentation 를 참조하세요</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">경고</p>\n<p>여러 개의 Django 사이트가 단일 mod_wsgi 프로세스에서 실행되는 경우, 이들 사이트 모두 먼저 실행되는 사이트의 설정을 사용합니다. 이 문제는 다음을 변경하여 해결할 수 있습니다.</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">environ</span><span class=\"o\">.</span><span class=\"n\">setdefault</span><span class=\"p\">(</span><span class=\"s2\">&quot;DJANGO_SETTINGS_MODULE&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;{{ project_name }}.settings&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>in <code class=\"docutils literal notranslate\"><span class=\"pre\">wsgi.py</span></code>, to:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">environ</span><span class=\"p\">[</span><span class=\"s2\">&quot;DJANGO_SETTINGS_MODULE&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;{{ project_name }}.settings&quot;</span>\n</code></pre></div>\n<p>또는 :ref:’mod_wsgi 데몬 모드 사용’을 통해 각 사이트가 자체 데몬 프로세스로 실행되도록 합니다.</p>\n</aside>\n<aside class=\"admonition-fixing-unicodeencodeerror-for-file-uploads admonition\">\n<p class=\"admonition-title\">파일 업로드를 위한 “유니코드 인코딩 오류” 수정</p>\n<p>If you get a <code class=\"docutils literal notranslate\"><span class=\"pre\">UnicodeEncodeError</span></code> when uploading or writing files with\nfile names or content that contains non-ASCII characters, make sure Apache\nis configured to support UTF-8 encoding:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">export</span> <span class=\"n\">LANG</span><span class=\"o\">=</span><span class=\"s1\">&#39;en_US.UTF-8&#39;</span>\n<span class=\"n\">export</span> <span class=\"n\">LC_ALL</span><span class=\"o\">=</span><span class=\"s1\">&#39;en_US.UTF-8&#39;</span>\n</code></pre></div>\n<p>이 구성을 배치하는 공통 위치는 다음과 같습니다.``/etc/apache2/envvars``.</p>\n<p>Alternatively, if you are <a class=\"reference internal\" href=\"#daemon-mode\"><span class=\"std std-ref\">using mod_wsgi daemon mode</span></a>\nyou can add <code class=\"docutils literal notranslate\"><span class=\"pre\">lang</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">locale</span></code> options to the <code class=\"docutils literal notranslate\"><span class=\"pre\">WSGIDaemonProcess</span></code>\ndirective:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">WSGIDaemonProcess</span> <span class=\"n\">example</span><span class=\"o\">.</span><span class=\"n\">com</span> <span class=\"n\">lang</span><span class=\"o\">=</span><span class=\"s1\">&#39;en_US.UTF-8&#39;</span> <span class=\"n\">locale</span><span class=\"o\">=</span><span class=\"s1\">&#39;en_US.UTF-8&#39;</span>\n</code></pre></div>\n<p>자세한 내용은 유니코드 참조 안내서  <a class=\"reference internal\" href=\"/ko/4.1/ref/unicode/#unicode-files\"><span class=\"std std-ref\">Files</span></a> 의 섹션을 참조하십시오.</p>\n</aside>\n</section>\n<section id=\"using-mod-wsgi-daemon-mode\">\n<span id=\"daemon-mode\"></span><h2><code class=\"docutils literal notranslate\"><span class=\"pre\">mod_wsgi</span></code> 데몬모드 사용법<a class=\"heading-anchor\" href=\"#using-mod-wsgi-daemon-mode\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>“데몬 모드”는 Windows가 아닌 다른 플랫폼에서 mod_wsgi를 실행하는 데 권장되는 모드입니다. 필요한 데몬 프로세스 그룹을 만들고 이를 실행할 Django 인스턴스를 위임하려면 적절한 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>WSG DaemonProcess”와 “WSGIP ProcessGroup” 지침을 추가해야 한다. 데몬 모드를 사용할 경우 위의 구성에 추가로 필요한 변경 사항은 <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>WSGiPythonPath”를 사용할 수 없고 “WSGidaemonProcess”에 대한 “python-path” 옵션을 사용해야 한다는 것이다.</p>\n<div class=\"code-block\" data-language=\"apache\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Apache</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Apache code\"><code><span class=\"nb\">WSGIDaemonProcess</span><span class=\"w\"> </span>example.com<span class=\"w\"> </span>python-home=/path/to/venv<span class=\"w\"> </span>python-path=/path/to/mysite.com\n<span class=\"nb\">WSGIProcessGroup</span><span class=\"w\"> </span>example.com\n</code></pre></div>\n<p>만약 당신이 당신의 프로젝트를 서브디렉토리(이 예에서 <a class=\"reference external\" href=\"https://example.com\">https://example.com</a>/mysite로 제공하기를 원한다면, 당신은 위의 구성에 “WSGIScriptAlias”를 추가할 수 있다.</p>\n<div class=\"code-block\" data-language=\"apache\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Apache</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Apache code\"><code><span class=\"nb\">WSGIScriptAlias</span><span class=\"w\"> </span><span class=\"sx\">/mysite</span><span class=\"w\"> </span><span class=\"sx\">/path/to/mysite.com/mysite/wsgi.py</span><span class=\"w\"> </span>process-group=example.com\n</code></pre></div>\n<p>‘데몬 모드 설정에 대한 세부 정보’는 공식 mod_wsgi 설명서를 참조하십시오.</p>\n</section>\n<section id=\"serving-files\">\n<span id=\"id1\"></span><h2>파일 저장법<a class=\"heading-anchor\" href=\"#serving-files\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django doesn’t serve files itself; it leaves that job to whichever web\nserver you choose.</p>\n<p>We recommend using a separate web server – i.e., one that’s not also running\nDjango – for serving media. Here are some good choices:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://nginx.org/en/\">Nginx</a></p></li>\n<li><p>Apache_의 stripped-down 버전</p></li>\n</ul>\n<p>그러나 만약 당신이 Django와 같은 Apache “VirtualHost”에서 미디어 파일을 제공하는 것 외에 다른 방법이 없다면, 당신은 Django에 mod_wsgi 인터페이스를 사용하여 일부 URL을 정적 미디어로 서비스하도록 Apache를 설정할 수 있다.</p>\n<p>이 예는 현지의 뿌리에 장고를 세우지만 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>로봇”을 취급한다.txt, <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>favicon.ico” 그리고 <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>/staticon/” 그리고 <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">``</span></a>/media/” URL 공간에 있는 모든 것을 정적 파일로 저장한다. 다른 모든 URL은 mod_wsgi를 사용하여 제공됩니다.</p>\n<div class=\"code-block\" data-language=\"apache\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Apache</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Apache code\"><code><span class=\"nb\">Alias</span><span class=\"w\"> </span><span class=\"sx\">/robots.txt</span><span class=\"w\"> </span><span class=\"sx\">/path/to/mysite.com/static/robots.txt</span>\n<span class=\"nb\">Alias</span><span class=\"w\"> </span><span class=\"sx\">/favicon.ico</span><span class=\"w\"> </span><span class=\"sx\">/path/to/mysite.com/static/favicon.ico</span>\n\n<span class=\"nb\">Alias</span><span class=\"w\"> </span><span class=\"sx\">/media/</span><span class=\"w\"> </span><span class=\"sx\">/path/to/mysite.com/media/</span>\n<span class=\"nb\">Alias</span><span class=\"w\"> </span><span class=\"sx\">/static/</span><span class=\"w\"> </span><span class=\"sx\">/path/to/mysite.com/static/</span>\n\n<span class=\"nt\">&lt;Directory</span><span class=\"w\"> </span><span class=\"s\">/path/to/mysite.com/static</span><span class=\"nt\">&gt;</span>\n<span class=\"nb\">Require</span><span class=\"w\"> </span><span class=\"k\">all</span><span class=\"w\"> </span>granted\n<span class=\"nt\">&lt;/Directory&gt;</span>\n\n<span class=\"nt\">&lt;Directory</span><span class=\"w\"> </span><span class=\"s\">/path/to/mysite.com/media</span><span class=\"nt\">&gt;</span>\n<span class=\"nb\">Require</span><span class=\"w\"> </span><span class=\"k\">all</span><span class=\"w\"> </span>granted\n<span class=\"nt\">&lt;/Directory&gt;</span>\n\n<span class=\"nb\">WSGIScriptAlias</span><span class=\"w\"> </span>/<span class=\"w\"> </span><span class=\"sx\">/path/to/mysite.com/mysite/wsgi.py</span>\n\n<span class=\"nt\">&lt;Directory</span><span class=\"w\"> </span><span class=\"s\">/path/to/mysite.com/mysite</span><span class=\"nt\">&gt;</span>\n<span class=\"nt\">&lt;Files</span><span class=\"w\"> </span><span class=\"s\">wsgi.py</span><span class=\"nt\">&gt;</span>\n<span class=\"nb\">Require</span><span class=\"w\"> </span><span class=\"k\">all</span><span class=\"w\"> </span>granted\n<span class=\"nt\">&lt;/Files&gt;</span>\n<span class=\"nt\">&lt;/Directory&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"serving-the-admin-files\">\n<span id=\"id3\"></span><h2>관리자파일 제공<a class=\"heading-anchor\" href=\"#serving-the-admin-files\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>When <a class=\"reference internal\" href=\"/ko/4.1/ref/contrib/staticfiles/#module-django.contrib.staticfiles\" title=\"django.contrib.staticfiles: An app for handling static files.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles</span></code></a> is in <a class=\"reference internal\" href=\"/ko/4.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>, the\nDjango development server automatically serves the static files of the\nadmin app (and any other installed apps). This is however not the case when you\nuse any other server arrangement. You’re responsible for setting up Apache, or\nwhichever web server you’re using, to serve the admin files.</p>\n<p>admin 파일은 django 배포판의 (:<a class=\"reference external\" href=\"file:'django/contrib/admin/static/admin\">file:’django/contrib/admin/static/admin</a>’)에 있습니다.</p>\n<p>We <strong>strongly</strong> recommend using <a class=\"reference internal\" href=\"/ko/4.1/ref/contrib/staticfiles/#module-django.contrib.staticfiles\" title=\"django.contrib.staticfiles: An app for handling static files.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles</span></code></a> to handle the\nadmin files (along with a web server as outlined in the previous section; this\nmeans using the <a class=\"reference internal\" href=\"/ko/4.1/ref/contrib/staticfiles/#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">collectstatic</span></code></a> management command to collect the\nstatic files in <a class=\"reference internal\" href=\"/ko/4.1/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_ROOT</span></code></a>, and then configuring your web server to\nserve <a class=\"reference internal\" href=\"/ko/4.1/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_ROOT</span></code></a> at <a class=\"reference internal\" href=\"/ko/4.1/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_URL</span></code></a>), but here are three\nother approaches:</p>\n<ol class=\"arabic simple\">\n<li><p>문서 루트 내에서 관리 정적 파일에 대한 심볼 링크를 생성합니다(이 링크를 사용하려면 Apache 구성에서 “+FollowSymLinks”가 필요할 수 있음).</p></li>\n<li><p>위에서 설명한 대로 “Alias” 지시문을 사용하여 적절한 URL(아마도 : setting: 설정)을 별칭으로 지정한다.STATIC_URL’ + 관리 파일의 실제 위치에 “admin/”.</p></li>\n<li><p>관리 정적 파일이 Apache 문서 루트 내에 있도록 복사합니다.</p></li>\n</ol>\n</section>\n<section id=\"authenticating-against-django-s-user-database-from-apache\">\n<h2>Apache에서 Django의 사용자 데이터베이스에 대해 인증<a class=\"heading-anchor\" href=\"#authenticating-against-django-s-user-database-from-apache\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django는 Apache가 Django의 인증 백엔드에 대해 사용자를 직접 인증할 수 있도록 하는 핸들러를 제공합니다. :doc:’mod_wsgi 인증확인 문서’를 참조하십시오.</p>\n</section>","rootId":"how-to-use-django-with-apache-and-mod-wsgi","toc":[{"title":"기본 구성","anchor":"basic-configuration","children":[]},{"title":"mod_wsgi 데몬모드 사용법","anchor":"using-mod-wsgi-daemon-mode","children":[]},{"title":"파일 저장법","anchor":"serving-files","children":[]},{"title":"관리자파일 제공","anchor":"serving-the-admin-files","children":[]},{"title":"Apache에서 Django의 사용자 데이터베이스에 대해 인증","anchor":"authenticating-against-django-s-user-database-from-apache","children":[]}],"breadcrumbs":[{"docname":"howto/index","title":"“How-to” 가이드","url":"/ko/4.1/howto/"},{"docname":"howto/deployment/index","title":"How to deploy Django","url":"/ko/4.1/howto/deployment/"},{"docname":"howto/deployment/wsgi/index","title":"WSGI를 사용하여 배포하는 방법","url":"/ko/4.1/howto/deployment/wsgi/"}],"prev":{"docname":"howto/deployment/wsgi/uwsgi","title":"uWSGI와 함께 django를 사용하는 방법","url":"/ko/4.1/howto/deployment/wsgi/uwsgi/"},"next":{"docname":"howto/deployment/wsgi/apache-auth","title":"How to authenticate against Django’s user database from Apache","url":"/ko/4.1/howto/deployment/wsgi/apache-auth/"},"formats":{"html":"/ko/4.1/howto/deployment/wsgi/modwsgi/","markdown":"/ko/4.1/howto/deployment/wsgi/modwsgi.md","json":"/ko/4.1/howto/deployment/wsgi/modwsgi.json"},"source":"https://github.com/django/django/blob/stable/4.1.x/docs/howto/deployment/wsgi/modwsgi.txt","official":"https://docs.djangoproject.com/ko/4.1/howto/deployment/wsgi/modwsgi/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}