Cómo servir archivos estáticos desde un directorio específico en un sitio de WordPress que se ejecuta a través de Nginx

0

Tengo un sitio de WordPress corriendo en Nginx. En mi configuración, tengo un bloque de ubicación como este:

location / {
    try_files $uri $uri/ /index.php?$args;
}

Lo que quiero hacer es tener un directorio especial lleno de contenido estático. Si una URL coincide con un archivo en el directorio estático, quiero que se sirva en lugar del contenido de Wordpress.

No sabré los nombres de los archivos antes de tiempo.

He intentado cambiar mi bloque de ubicación a

location / {
    try_files /static/$uri /static/$uri/ $uri $uri/ /index.php?$args;
}

Esto principalmente hace lo que quiero (siempre y cuando static es un directorio bajo $document_root ), pero reescribe la url que ve el visitante. Me gustaría evitar eso si es posible. Por ejemplo, evitar https://example.com/catalog.php redirigiendo a https://example.com/static/catalog.php. Solo quiero que Nginx sirva el contenido desde estático sin que el visitante lo sepa.


Puede que no haya sido especialmente claro.

Mi contenido de WordPress se encuentra en /srv/www/mysite/html y mi configuración de Nginx es aproximadamente así:

server {
    root /srv/www/mysite/html;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }
}

Tengo otra carpeta, /home/dave/static, con contenido arbitrario en ella. Digamos que tiene un archivo llamado catalog.html. Si un visitante visita https://example.com/catalog.html, Quiero el contenido de /home/dave/static/catalog.html servido Si no hay un archivo estático coincidente, quiero retroceder al contenido de WordPress.

Aquí hay algo más que he intentado mientras tanto:

server {
    root /srv/www/mysite/html;

    location / {
        root /home/dave/static;
        try_files $uri $uri/ @fallback;
    }
    location @fallback {
        try_files $uri $uri/ /index.php?$args;
    }
}

Esta configuración no funciona. No parece reconocer ningún contenido estático y solo sirve contenido de WordPress.

Dave
fuente
1
Utilice las declaraciones de ubicación de Nginx para definir una ubicación que depende de cómo se ve la URL. P.ej. location /static { stuff here; } y luego tu location / { stuff here; }
Kinnectus
@Kinnectus ¿No requerirá esto que el visitante navegue a example.com/static/file? Quiero que el visitante navegue hasta example.com/file, pero quiero que el contenido del directorio estático se sirva si existe
Dave
Tienes un poco / s en el lugar equivocado Tratar: try_files /static$uri $uri $uri/ /index.php?$args;
Richard Smith
@RichardSmith Gracias. Olvidé incluir la barra inicial en mi pregunta. Lo tenia en mi config. Tienes razón en que la barra después static estaba mal. Desafortunadamente, esta configuración aún redirige físicamente al visitante al directorio / static en lugar de simplemente servir contenido desde allí.
Dave
¿Tiene los permisos correctos para los archivos en el directorio estático y el acceso correcto para el trabajador Nginx a los directorios que se encuentran arriba? No indica el sistema operativo, pero algunos (por ejemplo, Centos) tienen controles de acceso adicionales.
Richard Smith