<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://wiki.cabal.mx/index.php?action=history&amp;feed=atom&amp;title=Django_Nginx</id>
	<title>Django Nginx - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.cabal.mx/index.php?action=history&amp;feed=atom&amp;title=Django_Nginx"/>
	<link rel="alternate" type="text/html" href="https://wiki.cabal.mx/index.php?title=Django_Nginx&amp;action=history"/>
	<updated>2026-04-04T12:48:03Z</updated>
	<subtitle>Historial de revisiones para esta página en el wiki</subtitle>
	<generator>MediaWiki 1.32.1</generator>
	<entry>
		<id>https://wiki.cabal.mx/index.php?title=Django_Nginx&amp;diff=121556&amp;oldid=prev</id>
		<title>JZA: Agregar a la categoria de HowTos</title>
		<link rel="alternate" type="text/html" href="https://wiki.cabal.mx/index.php?title=Django_Nginx&amp;diff=121556&amp;oldid=prev"/>
		<updated>2016-08-30T17:31:17Z</updated>

		<summary type="html">&lt;p&gt;Agregar a la categoria de HowTos&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
== Creación de Django y Nginx ==&lt;br /&gt;
=== Por que este tutorial? ===&lt;br /&gt;
Django viene con su propio servidor el cual puede iniciarse desde Django con el comando &amp;#039;&amp;#039;&amp;#039;runserver&amp;#039;&amp;#039;&amp;#039; y este puede configurarse con el numero de puerto especifico para el servidor. &lt;br /&gt;
&lt;br /&gt;
Python tambien provee una serie de servidores web independientes como Gunicorn, Tornado, y Rocket. Tambien existen empaquetadores para servidores como lo es el mod_wsgi de apache, uwsgi. &lt;br /&gt;
&lt;br /&gt;
Sin embargo que pasa si tienes ya un servidor Nginx, y necesitas adicionar una app con Django. De una forma similar a si estuvieras en Apache, Django, usa estos empacadores y se une al servidor web que ya tienes. Pero existe una tercera opcion, mediante el uso de &amp;#039;&amp;#039;&amp;#039;FastCGI&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
=== Que es FASTCGI ===&lt;br /&gt;
FASTCGI es un protocolo binario que esta hecho para crear una interfaz entre servidores web con programas interactivos. El beneficio es que reduce el costo de interaccion entre el webserver y el programa CGI. CGI significa &amp;#039;&amp;#039;Common Gateway Interface&amp;#039;&amp;#039;, o interfaz de pasarela comun. Esto permite al servidor web manejar mas de una peticion de paginas al mismo tiempo.&lt;br /&gt;
&lt;br /&gt;
== Configurando nuestro proyecto ==&lt;br /&gt;
Empezemos con un proyecto tradicional de Django donde tenemos un arbol de archivos estandar:&lt;br /&gt;
&amp;lt;code&amp;gt;sites/&lt;br /&gt;
    site1/&lt;br /&gt;
        manage.py&lt;br /&gt;
        settings.py&lt;br /&gt;
        __init__.py&lt;br /&gt;
        app1/&lt;br /&gt;
        app2/&lt;br /&gt;
        media/&lt;br /&gt;
    site2/&lt;br /&gt;
        ...&amp;lt;/code&amp;gt;&lt;br /&gt;
Para configurar nuestro proyecto con la plataforma de FastCGI necestiariamos poner los archivos de socket y el PID en la direccion de ejecucion del servidor web ```RUNFILES_PATH```.&lt;br /&gt;
&lt;br /&gt;
==== Configurando NGINX ====&lt;br /&gt;
NGINX debera tener un script que le permita reconocer el nuevo sitio y sea capaz de activarlo o desactivarlo. Para eso debemos editar nuestro archivo de configuracion &amp;#039;&amp;#039;&amp;#039;nginx.conf&amp;#039;&amp;#039;&amp;#039;, alternativamente puedes poner el archivo en la ruta de &amp;#039;&amp;#039;&amp;#039;sites-(enabled/available)/&amp;#039;&amp;#039;&amp;#039; si necesitas incluir las instrucciones de include. &lt;br /&gt;
&lt;br /&gt;
En la seccion de http reemplaza las rutas y nombre de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; &lt;br /&gt;
   server {&lt;br /&gt;
    listen   80;&lt;br /&gt;
    server_name  {server name};&lt;br /&gt;
   &lt;br /&gt;
    access_log  {path to log file};&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proseguimos a declarar el directorio donde estara nuestros archivos estaticos en este caso usamos el del admin como ejemplo, se recomienda leer [http://docs.djangoproject.com/en/dev/howto/deployment/modpython/#serving-the-admin-files esta guia] para indicaciones adicionales al usar por ejemplo mod_python. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    location /media {&lt;br /&gt;
        root   {ruta al sitio}/siteYY/;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Django debe declarar varios parametros en NGINX entre ellos el PATH_INFO, REQUEST_METHOD, CONTENT_LENGHT y CONTENT_TYPE :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    location / {&lt;br /&gt;
        fastcgi_pass unix:RUNFILES_PATH/siteYY.socket;&lt;br /&gt;
        # para un puerto TCP&lt;br /&gt;
        # fastcgi_pass   {hostname}:{puerto};&lt;br /&gt;
&lt;br /&gt;
        # parametro necesario&lt;br /&gt;
        fastcgi_param PATH_INFO $fastcgi_script_name;&lt;br /&gt;
&lt;br /&gt;
        # para que maneje los POST requests&lt;br /&gt;
        fastcgi_param REQUEST_METHOD $request_method;&lt;br /&gt;
        fastcgi_param CONTENT_TYPE $content_type;&lt;br /&gt;
        fastcgi_param CONTENT_LENGTH $content_length;&lt;br /&gt;
     }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tanto location /media como location / deben estar dentro del server {} lo cual crea un completo asi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
   server {&lt;br /&gt;
    listen   80;&lt;br /&gt;
    server_name  {server name};&lt;br /&gt;
   &lt;br /&gt;
    access_log  {path to log file};&lt;br /&gt;
    &lt;br /&gt;
    # Aqui agregamos los bloques de location&lt;br /&gt;
    location /media {&lt;br /&gt;
        root   {path to sites}/siteYY/;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        fastcgi_pass unix:RUNFILES_PATH/siteYY.socket;&lt;br /&gt;
        fastcgi_param PATH_INFO $fastcgi_script_name;&lt;br /&gt;
        fastcgi_param REQUEST_METHOD $request_method;&lt;br /&gt;
        fastcgi_param CONTENT_TYPE $content_type;&lt;br /&gt;
        fastcgi_param CONTENT_LENGTH $content_length;&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Creando un sitio de pruebas y de produccion en la misma configuracion ==&lt;br /&gt;
&lt;br /&gt;
Aparte del archivo settings.py donde tu variable de DEBUG esta fijada a False, agrega una nueva variable asignada a True en nuevo archivo llamado &amp;#039;&amp;#039;&amp;#039;settings_debug.py&amp;#039;&amp;#039;&amp;#039;.  De esta manera ahora podras lanzara otro &amp;#039;&amp;#039;&amp;#039;&amp;quot;manage.py runfcgi&amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;#039; desde el folder de tu aplicacion y adicionarle los parametros de &amp;#039;&amp;#039;–settings=siteYY.settings_debug&amp;#039;&amp;#039; en un socket y puerto diferente.&lt;br /&gt;
&lt;br /&gt;
[[Category: HowTos]]&lt;/div&gt;</summary>
		<author><name>JZA</name></author>
		
	</entry>
</feed>