dalethedeveloper
Estoy buscando una manera de confirmar si X-Sendfile está manejando correctamente las solicitudes devueltas al servidor web por un script (PHP). Las imágenes se sirven correctamente, pero pensé que vería el encabezado en las solicitudes de curl.
$ curl -I http://blog2.stageserver.net/wp-includes/ms-files.php?file=/2011/05/amos-lee-feature.jpg
HTTP/1.1 200 OK
Date: Wed, 04 Jan 2012 17:19:45 GMT
Server: Cherokee/1.2.100 (Arch Linux)
ETag: "4dd2e306=9da0"
Last-Modified: Tue, 17 May 2011 21:05:10 GMT
Content-Type: image/jpeg
Content-Length: 40352
X-Powered-By: PHP/5.3.8
Content-Disposition: inline; filename="amos-lee-feature.jpg"
Configuración
Cherokee 1.2.100 con PHP-FPM 5.3.8 en FastCGI:
cherokee.conf: vserver!20!rule!500!handler!xsendfile = 1
(Establecido por vServer> Comportamiento> Extensiones php> Controlador: Permitir X-Sendfile [check Enabled])
Red de WordPress / WPMU 3.3.1:
define('WPMU_SENDFILE',true);
se establece en el wp-config.php
lo siguiente justo antes wp-settings.php
está incluido. Esto activará el siguiente código para que se ejecute en wp-includes/ms-files.php:50 de WP sirve archivos para un blog en particular:
header( 'X-Sendfile: ' . $file );
exit;
He confirmado que el fragmento anterior se está ejecutando agregando un encabezado adicional para la disposición justo antes del exit();
llamar. Esa disposición de contenido está presente con los resultados de curl anteriores y no originalmente en el código ms-files.php. El código que se agregó es:
header('Content-Disposition: inline; filename="'.basename($file).'"');
Investigar
Tengo:
- Se reiniciaron los demonios php-fpm / cherokee después de realizar cambios en la configuración.
- Intenté varios trucos en los comentarios en php.net/readfile y reemplazó el encabezado simple en
ms-files.php
con código más completo de ejemplos.- php.net/manual/en/function.readfile.php
- www.jasny.net/articles/how-i-php-x-sendfile/
- *codeutopia.net/blog/2009/03/06/sending-files-better-apache-mod_xsendfile-and-php/*
- Confirmado [cherokee support][5] y probado [with and without][6] compresión aunque no creo que se aplique ya que mis imágenes se están publicando correctamente. También encontré un problema sospechosamente similar en una publicación de lighttpd.
- *cherokee-project.com/doc/other_goodies.html*
- code.google.com/p/cherokee/issues/detail?id=1228
- webdevrefinery.com/forums/topic/4761-x-sendfile/
- Encontré una propaganda aquí en SO que puede indicar que el encabezado se elimina
- stackoverflow.com/questions/7296642/django-understanding-x-sendfile
- Se probó que los encabezados anteriores son consistentes con curl, wget, Firefox, Chrome y web-sniffer.net.
- Descubrí que todavía no puedo publicar más de 2 enlaces debido a la falta de reputación.
Preguntas
- Voluntad
X-Sendfile
estar presente en los encabezados cuando funciona correctamente o se elimina? - ¿Se pueden utilizar los registros de acceso para determinar si
X-Sendfile
¿está trabajando?
Estoy buscando consejos generales para la solución de problemas o información aquí, no necesariamente específicos de PHP / Cherokee.
Actualizar
Encontré una forma adecuada de confirmar X-Sendfile o X-Accel-Redirect en un entorno de prueba o sandbox: deshabilite X-Sendfile y verifique los encabezados.
Con Permitir X-Sendfile deshabilitado en Cherokee:
$ curl -I http://blog2.stageserver.net/wp-includes/ms-files.php?file=/2011/05/amos-lee-feature.jpg
HTTP/1.1 200 OK
Date: Fri, 06 Jan 2012 15:34:49 GMT
Server: Cherokee/1.2.101 (Ubuntu)
X-Powered-By: PHP/5.3.6-13ubuntu3.3
Content-Type: image/jpeg
X-Sendfile: /srv/http/wordpress/wp-content/blogs.dir/2/files/2011/05/amos-lee-feature.jpg
Content-Length: 40352
La imagen no se cargará en los navegadores, pero puede ver que el encabezado está presente. Después de volver a habilitar Permitir X-Sendfile, la imagen se carga y puede estar seguro de que X-Sendfile está funcionando.
De acuerdo con la fuente en github Se eliminarán los encabezados de X-Sendfile.
Si estoy hojeando el archivo correctamente, solo está registrando correctamente si se ha compilado en modo de depuración.
Puede verificar el uso de memoria para enviar archivos grandes con y sin xsendfile.
-
Buena sugerencia, pero no algo para jugar en servidores en un entorno en vivo. Tal vez sea necesario realizar algunas pruebas de sandbox.
– dalethedeveloper
5 de enero de 2012 a las 15:18
Se están eliminando, simplemente porque tenerlos presentes evitará una de las razones para usarlo, a saber, hacer que el archivo se entregue sin que el destinatario sepa la ubicación del archivo que se entrega.