Tengo una aplicación Django acoplada donde nginx usa proxy_pass para enviar solicitudes al backend de Django. Estoy buscando publicar previamente ciertas páginas que no cambian con frecuencia para que Django no tenga que lidiar con ellas.
Estoy tratando de usar try_files para verificar si esa página existe localmente y pasar a Django si no.
Nuestra estructura de URL requiere que todas las URL terminen con una barra diagonal y no usamos sufijos de tipo de archivo, por ejemplo, una página podría ser www.example.com/hello/. Esto significa que el parámetro $uri en nginx en esta instancia es /hello/ y cuando try_files mira, está esperando un directorio debido a la barra diagonal final. Si tengo un directorio con una lista de archivos, ¿cómo hago para que try_files los mire sin volver a escribir la URL para eliminar la barra inclinada, ya que Django lo requiere?
Mi configuración de nginx está abajo.
server { listen 443 ssl http2 default_server; listen [::]:443 ssl http2 default_server; server_name example.com; root /home/testuser/example; location / { try_files $uri uri/ @site_root; } location @site_root { proxy_pass http://127.0.0.1:12345; } }Si tengo un archivo "hola" en /home/testuser/example/hello y llamo a https://www.example.com/hello/ ¿cómo puedo hacer que cargue el archivo correctamente?
PD: los permisos en la carpeta de contenido estático y su contenido son todos 777 (por ahora para descartar problemas de permisos)
Saludos de antemano!
Puede apuntar el URI /hello/ a un archivo local llamado hello o hello.html usando try_files , pero primero debe extraer el nombre del archivo usando una location de expresión regular. Vea este documento para más detalles.
La ventaja de usar .html es que no necesitará proporcionar el tipo de contenido de la respuesta.
Por ejemplo, usando hello.html :
root /path/to/root; location / { try_files $uri uri/ @site_root; } location ~ ^(?<filename>/.+)/$ { try_files $filename.html @site_root; } location @site_root { proxy_pass ...; } Si prefiere almacenar los archivos locales sin una extensión, y todos son text/html , deberá proporcionar el tipo de contenido. Vea este documento para más detalles.
Por ejemplo, usando hello :
root /path/to/root; location / { try_files $uri uri/ @site_root; } location ~ ^(?<filename>/.+)/$ { default_type text/html; try_files $filename @site_root; } location @site_root { proxy_pass ...; }