es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Nginx Proxy inverso para múltiples aplicaciones en el mismo puerto

Estoy tratando de ejecutar una aplicación de Django y una aplicación de Angular en mi VPS utilizando Nginx. A continuación se muestra el código de mi archivo de configuración:

servidor {
escucha 80;
server_name www.the-patron.com the-patron.com;
charset utf-8;

location = /favicon.ico { access_log off; log_not_found off; }
location /staticfiles/ {
    root /root/thepatron/The-Patron-Backend;
}

# Backend de Django
location /back/ {
    include proxy_params;
    proxy_pass http://unix:/root/thepatron/The-Patron-Backend/thepatron.sock;
}

# Frontend de Angular
location / {
    proxy_pass http://localhost:4200/;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_http_version 1.1;
    proxy_cache_bypass $http_upgrade;
}

}

Aquí mi aplicación de Angular funciona bien y la de Django no lo hace. Si cambio location /backend/ a location / en la línea 12 y location / a location /frontend/ en la línea 18, ejecutaré la aplicación de Django mientras que la aplicación de Angular no se ejecutará.

¿Cómo puedo ejecutar ambas y cambiar la ubicación de cada una?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para ejecutar la aplicación de Django y la aplicación de Angular en su VPS usando Nginx, puede actualizar su archivo de configuración de Nginx de la siguiente manera:

    servidor {
        listen 80;
        server_name www.the-patron.com the-patron.com;
        charset utf-8;
    
        location = /favicon.ico { access_log off; log_not_found off; }
        location /staticfiles/ {
            root /root/thepatron/The-Patron-Backend;
        }
    
        # Backend de Django
        location /backend/ {
            include proxy_params;
            proxy_pass http://unix:/root/thepatron/The-Patron-Backend/thepatron.sock;
        }
    
        # Frontend de Angular
        location / {
            try_files $uri $uri/ /index.html;
        }
    
        # Proxy inverso para el Frontend de Angular
        location /api/ {
            include proxy_params;
            proxy_pass http://localhost:8000/api/;
        }
    }
    

    Aquí, hemos realizado los siguientes cambios:

    • Mantuvimos el bloque location / original para la aplicación de Angular, pero eliminamos las directivas proxy_set_header ya que no son necesarias para servir una aplicación de Angular estática.
    • Agregamos un nuevo bloque location /api/ para la aplicación de Django, que será servido por un servidor Gunicorn que escucha en `http://localhost:8000`.
    • También agregamos una directiva try_files al bloque de ubicación / para servir los archivos estáticos de la aplicación de Angular.
    • Finalmente, eliminamos la directiva proxy_cache_bypass ya que no se necesita en este escenario.

    Con esta configuración, debería poder ejecutar ambas aplicaciones con éxito accediendo a http://<su-domino>/ para la aplicación de Angular yhttp://<su-domino>/api/ para la aplicación de Django. Tenga en cuenta que deberá iniciar su servidor Gunicorn por separado para servir la aplicación de Django.

Comments are closed.