SCGI#
Permite pasar solicitudes a un servidor SCGI. Hace que las conexiones salientes a un servidor SCGI se originen desde la dirección IP local especificada con un puerto opcional. El valor del parámetro puede contener variables. El valor especial El parámetro Para que este parámetro funcione, normalmente es necesario ejecutar los procesos de trabajo de Angie con los privilegios de superusuario Privileges. En Linux no es necesario, ya que si se especifica el parámetro Nota Es necesario configurar la tabla de enrutamiento del kernel para interceptar el tráfico de red desde el servidor SCGI. Establece el tamaño del búfer utilizado para leer la primera parte de la respuesta recibida del servidor SCGI. Esta parte generalmente contiene una pequeña cabecera de respuesta. Por defecto, el tamaño del búfer es igual a una página de memoria. Esto es 4K u 8K, dependiendo de la plataforma. Sin embargo, puede hacerse más pequeño. Habilita o deshabilita el almacenamiento en búfer de las respuestas del servidor SCGI. Angie recibe una respuesta del servidor SCGI tan pronto como sea posible, guardándola en los búferes establecidos por las directivas scgi_buffer_size y scgi_buffers. Si toda la respuesta no cabe en memoria, una parte de ella puede guardarse en un archivo temporal en el disco. La escritura en archivos temporales está controlada por las directivas scgi_max_temp_file_size y scgi_temp_file_write_size. La respuesta se pasa al cliente de forma sincrónica, inmediatamente a medida que se recibe. Angie no intentará leer toda la respuesta del servidor SCGI. El tamaño máximo de los datos que Angie puede recibir del servidor a la vez está establecido por la directiva scgi_buffer_size. El almacenamiento en búfer también puede habilitarse o deshabilitarse pasando "yes" o "no" en el campo de cabecera de respuesta Sets the number and size of the buffers used for reading a response from the SCGI server, for a single connection. By default, the buffer size is equal to one memory page. This is either 4K or 8K, depending on a platform. Predeterminado http, server, location Cuando el almacenamiento en búfer de respuestas del servidor SCGI está habilitado, limita el tamaño total de búferes que pueden estar ocupados enviando una respuesta al cliente mientras la respuesta aún no se ha leído completamente. Mientras tanto, el resto de los búferes pueden usarse para leer la respuesta y, si es necesario, almacenar parte de la respuesta en un archivo temporal. Por defecto, el tamaño está limitado por el tamaño de dos búferes establecidos por las directivas scgi_buffer_size y scgi_buffers. Define una zona de memoria compartida utilizada para el almacenamiento en caché. La misma zona puede usarse en varios lugares. El valor del parámetro puede contener variables. deshabilita el almacenamiento en caché heredado del nivel de configuración anterior. Predeterminado http, server, location Allows starting a background subrequest to update an expired cache item, while a stale cached response is returned to the client. Advertencia Note that it is necessary to allow the usage of a stale cached response when it is being updated. Defines conditions under which the response will not be taken from a cache. If at least one value of the string parameters is not empty and is not equal to "0" then the response will not be taken from the cache: Can be used along with the scgi_no_cache directive. Defines a key for caching, for example When enabled, only one request at a time will be allowed to populate a new cache element identified according to the scgi_cache_key directive by passing a request to an SCGI server. Other requests of the same cache element will either wait for a response to appear in the cache or the cache lock for this element to be released, up to the time set by the scgi_cache_lock_timeout directive. If the last request passed to the SCGI server for populating a new cache element has not completed for the specified time, one more request may be passed to the SCGI server. Predeterminado http, server, location Sets a timeout for scgi_cache_lock. When the time expires, the request will be passed to the SCGI server, however, the response will not be cached. Establece un desplazamiento en bytes para las solicitudes de rango de bytes. Si el rango está fuera del desplazamiento, la solicitud de rango se pasará al servidor SCGI y la respuesta no se almacenará en caché. Predeterminado http, server, location Si el método de solicitud del cliente está listado en esta directiva, entonces la respuesta se almacenará en caché. Los métodos "GET" y "HEAD" siempre se agregan a la lista, aunque se recomienda especificarlos explícitamente. Véase también la directiva scgi_no_cache. Establece el número de solicitudes después del cual la respuesta se almacenará en caché. Predeterminado — http Establece la ruta y otros parámetros de una caché. Los datos de la caché se almacenan en archivos. El nombre del archivo en una caché es el resultado de aplicar la función MD5 a la clave de caché. El parámetro los nombres de archivo en una caché se verán así: Una respuesta almacenada en caché se escribe primero en un archivo temporal, y luego el archivo se renombra. Los archivos temporales y la caché pueden ubicarse en diferentes sistemas de archivos. Sin embargo, tenga en cuenta que en este caso un archivo se copia a través de dos sistemas de archivos en lugar de realizar la operación económica de renombrado. Por lo tanto, se recomienda que para cualquier ubicación dada tanto la caché como el directorio que contiene los archivos temporales se ubiquen en el mismo sistema de archivos. El directorio para archivos temporales se establece según el parámetro Si este parámetro se omite o se establece en el valor on, se utilizará el directorio establecido por la directiva scgi_temp_path para la ubicación dada. Los archivos temporales se colocarán directamente en el directorio de caché. Además, todas las claves activas y la información sobre los datos se almacenan en una zona de memoria compartida, cuyo nombre y tamaño se configuran mediante el parámetro Los datos en caché que no se acceden durante el tiempo especificado por el parámetro Por defecto, Un proceso especial de administrador de caché supervisa el tamaño máximo de la caché y la cantidad mínima de espacio libre en el sistema de archivos con caché y, cuando se excede el tamaño o no hay suficiente espacio libre, elimina los datos menos utilizados recientemente. Los datos se eliminan en iteraciones. tamaño máximo de la caché cantidad mínima de espacio libre en el sistema de archivos con caché limita el número de elementos a eliminar durante una iteración Por defecto, limita la duración de una iteración Por defecto, configura una pausa entre iteraciones Por defecto, Un minuto después de que Angie se inicia, se activa el proceso especial de cargador de caché. Carga en la zona de caché la información sobre los datos previamente almacenados en el sistema de archivos. La carga también se realiza en iteraciones. limita el número de elementos a cargar durante una iteración Por defecto, limita la duración de una iteración Por defecto, configura una pausa entre iteraciones Por defecto, Predeterminado http, server, location Habilita la revalidación de elementos de caché expirados utilizando solicitudes condicionales con los campos de cabecera Predeterminado http, server, location Determina en qué casos se puede utilizar una respuesta en caché obsoleta. Los parámetros de la directiva coinciden con los parámetros de la directiva scgi_next_upstream. permite usar una respuesta en caché obsoleta si no se puede seleccionar un servidor SCGI para procesar una solicitud. parámetro adicional, permite usar una respuesta en caché obsoleta si actualmente se está actualizando. Esto permite minimizar el número de accesos a los servidores SCGI al actualizar datos en caché. El uso de una respuesta en caché obsoleta también puede habilitarse directamente en la cabecera de respuesta durante un número específico de segundos después de que la respuesta se volvió obsoleta: La extensión stale-while-revalidate del campo de cabecera La extensión stale-if-error del campo de cabecera Nota Esto tiene menor prioridad que el uso de los parámetros de la directiva. Para minimizar el número de accesos a los servidores SCGI al poblar un nuevo elemento de caché, se puede usar la directiva scgi_cache_lock. Establece el tiempo de almacenamiento en caché para diferentes códigos de respuesta. Por ejemplo, las siguientes directivas establecen 10 minutos de almacenamiento en caché para respuestas con códigos 200 y 302 y 1 minuto para respuestas con código 404. Si solo se especifica el tiempo de almacenamiento en caché entonces solo se almacenan en caché las respuestas 200, 301 y 302. Además, se puede especificar el parámetro Nota Los parámetros de almacenamiento en caché también se pueden establecer directamente en la cabecera de respuesta. Esto tiene mayor prioridad que el establecimiento del tiempo de almacenamiento en caché mediante la directiva. El campo de cabecera Si la cabecera no incluye el campo Si la cabecera incluye el campo Si la cabecera incluye el campo El procesamiento de uno o más de estos campos de cabecera de respuesta puede deshabilitarse mediante la directiva scgi_ignore_headers. Predeterminado http, server, location Defines a timeout for establishing a connection with a SCGI server. It should be noted that this timeout cannot usually exceed 75 seconds. Predeterminado http, server, location Habilita la terminación de todas las conexiones al servidor proxy después de que haya sido
eliminado del grupo o marcado como permanentemente no disponible por un proceso
reresolve o el comando API
Una conexión se termina cuando se procesa el siguiente evento de lectura o escritura para
el cliente o el servidor proxy. Establecer time habilita un tiempo de espera para la terminación de la conexión;
con Habilita el soporte de rangos de bytes para respuestas almacenadas en caché y no almacenadas en caché del servidor SCGI, independientemente del campo By default, Angie does not pass the header fields Predeterminado http, server, location Determina si la conexión con un servidor SCGI debe cerrarse cuando un cliente cierra la conexión sin esperar una respuesta. Desactiva el procesamiento de ciertos campos de cabecera de respuesta del servidor SCGI. Los siguientes campos pueden ser ignorados: Si no se desactivan, el procesamiento de estos campos de cabecera tiene el siguiente efecto: Predeterminado http, server, location Determina si las respuestas del servidor SCGI con códigos mayores o iguales a 300 deben pasarse al cliente o ser interceptadas y redirigidas a Angie para su procesamiento con la directiva error_page. Limita la velocidad de lectura de la respuesta desde el servidor SCGI.
La velocidad se especifica en bytes por segundo y puede contener variables. desactiva la limitación de velocidad Nota El límite se establece por solicitud, por lo que si Angie abre simultáneamente dos conexiones al servidor SCGI, la velocidad general será el doble del límite especificado. La limitación funciona solo si el almacenamiento en búfer de respuestas del servidor SCGI está habilitado. Predeterminado http, server, location Cuando el almacenamiento en búfer de respuestas del servidor SCGI está habilitado, y la respuesta completa no cabe en los búferes establecidos por las directivas scgi_buffer_size y scgi_buffers, una parte de la respuesta puede guardarse en un archivo temporal. Esta directiva establece el tamaño máximo del archivo temporal. El tamaño de los datos escritos en el archivo temporal a la vez se establece mediante la directiva scgi_temp_file_write_size. desactiva el almacenamiento en búfer de respuestas a archivos temporales Nota Esta restricción no se aplica a las respuestas que serán almacenadas en caché o guardadas en disco. Predeterminado http, server, location Especifica en qué casos una solicitud debe pasarse al siguiente servidor: se produjo un error al establecer una conexión con el servidor, al pasarle una solicitud o al leer la cabecera de respuesta; se ha producido un tiempo de espera al establecer una conexión con el servidor, al pasarle una solicitud o al leer la cabecera de respuesta; un servidor devolvió una respuesta vacía o no válida; un servidor devolvió una respuesta con el código 500; un servidor devolvió una respuesta con el código 503; un servidor devolvió una respuesta con el código 403; un servidor devolvió una respuesta con el código 404; un servidor devolvió una respuesta con el código 429; normalmente, las solicitudes con un método no idempotente
<https://datatracker.ietf.org/doc/html/rfc7231#section-4-2-2>`_
( desactiva el paso de una solicitud al siguiente servidor. Nota Se debe tener en cuenta que pasar una solicitud al siguiente servidor solo es posible si aún no se ha enviado nada al cliente. Es decir, si se produce un error o tiempo de espera en medio de la transferencia de una respuesta, es imposible solucionarlo. La directiva también define lo que se considera un intento fallido de comunicación con un servidor. siempre se consideran intentos fallidos, incluso si no se especifican en la directiva se consideran intentos fallidos solo si se especifican en la directiva nunca se consideran intentos fallidos El paso de una solicitud al siguiente servidor puede estar limitado por el número de intentos y por el tiempo. Predeterminado http, server, location Limits the time during which a request can be passed to the next server. turns off this limitation Predeterminado http, server, location Limits the number of possible tries for passing a request to the next server. desactiva esta limitación Define las condiciones bajo las cuales la respuesta no se guardará en la caché. Si al menos un valor de los parámetros de cadena no está vacío y no es igual a "0", la respuesta no se guardará: Se puede usar junto con la directiva scgi_cache_bypass. Establece un parámetro que debe pasarse al servidor SCGI. El valor puede contener texto, variables y su combinación. Estas directivas se heredan del nivel de configuración anterior si y solo si no hay directivas scgi_param definidas en el nivel actual. Las variables de entorno CGI estándar deben proporcionarse como cabeceras SCGI, consulte el archivo scgi_params proporcionado en la distribución: Si la directiva se especifica con Sets the address of an SCGI server. The address can be specified as a domain name or IP address, and an optional port: or as a UNIX domain socket path: If a domain name resolves to several addresses, all of them will be used in a round-robin fashion. In addition, an address can be specified as a server group. Parameter value can contain variables. In this case, if an address is specified as a domain name, the name is searched among the described server groups, and, if not found, is determined using a resolver. Permite pasar de forma distinta los campos de cabecera desde un servidor SCGI a un cliente. Predeterminado http, server, location Indica si el cuerpo de la solicitud original se pasa al servidor SCGI. Véase también la directiva scgi_pass_request_headers. Predeterminado http, server, location Indica si los campos de cabecera de la solicitud original se pasan al servidor SCGI. Véase también la directiva scgi_pass_request_body. Defines a timeout for reading a response from the SCGI server. The timeout is set only between two successive read operations, not for the transmission of the whole response. If the SCGI server does not transmit anything within this time, the connection is closed. Predeterminado http, server, location Enables o deshabilita el almacenamiento en búfer del cuerpo de la solicitud del cliente. todo el cuerpo de la solicitud se lee del cliente antes de enviar la solicitud a un servidor SCGI. el cuerpo de la solicitud se envía al servidor SCGI inmediatamente a medida que se recibe. En este caso, la solicitud no puede pasarse al siguiente servidor si Angie ya comenzó a enviar el cuerpo de la solicitud. Cuando se utiliza la codificación de transferencia fragmentada HTTP/1.1 para enviar el cuerpo de la solicitud original, el cuerpo de la solicitud se almacenará en búfer independientemente del valor de la directiva. Establece un tiempo de espera para transmitir una solicitud al servidor SCGI. El tiempo de espera se establece solo entre dos operaciones de escritura sucesivas, no para la transmisión de toda la solicitud. Si el servidor SCGI no recibe nada dentro de este tiempo, la conexión se cierra. Predeterminado http, server, location Configures the "TCP keepalive" behavior for outgoing connections to a SCGI server. By default, the operating system's settings are in effect for the socket. The SO_KEEPALIVE socket option is turned on for the socket. Enables saving of files to a disk. El nombre del archivo puede establecerse explícitamente usando la string con variables: La hora de modificación de los archivos se establece según el campo de cabecera de respuesta Esta directiva puede usarse para crear copias locales de archivos estáticos inmutables, por ejemplo: Predeterminado http, server, location Establece permisos de acceso para archivos y directorios recién creados, por ejemplo: Si se especifican permisos de acceso para Predeterminado http, server, location Limits the size of data written to a temporary file at a time, when buffering of responses from the SCGI server to temporary files is enabled. By default, size is limited by two buffers set by the scgi_buffer_size and scgi_buffers directives. The maximum size of a temporary file is set by the scgi_max_temp_file_size directive. Predeterminado http, server, location Define un directorio para almacenar archivos temporales con datos recibidos de servidores SCGI. Se puede utilizar una jerarquía de subdirectorios de hasta tres niveles debajo del directorio especificado. Por ejemplo, en la siguiente configuración un archivo temporal podría verse así: Véase también el parámetro Ejemplo de configuración#
location / {
include scgi_params;
scgi_pass localhost:9000;
}
Directivas#
scgi_bind#
off
cancela el efecto de la directiva scgi_bind heredada del nivel de configuración anterior, lo que permite al sistema asignar automáticamente la dirección IP local y el puerto.transparent
permite que las conexiones salientes a un servidor SCGI se originen desde una dirección IP no local, por ejemplo, desde una dirección IP real de un cliente:scgi_bind $remote_addr transparent;
transparent
, los procesos de trabajo heredan la capacidad CAP_NET_RAW del proceso maestro.scgi_buffer_size#
scgi_buffering#
on
off
X-Accel-Buffering
. Esta capacidad puede deshabilitarse usando la directiva scgi_ignore_headers.scgi_buffers#
scgi_busy_buffers_size#
scgi_busy_buffers_size
size;scgi_busy_buffers_size 8k | 16k;
scgi_cache#
off
scgi_cache_background_update#
scgi_cache_background_update
on
| off
;scgi_cache_background_update off;
scgi_cache_bypass#
scgi_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
scgi_cache_bypass $http_pragma $http_authorization;
scgi_cache_key#
scgi_cache_key localhost:9000$request_uri;
scgi_cache_lock#
scgi_cache_lock_age#
scgi_cache_lock_timeout#
scgi_cache_lock_timeout
time;scgi_cache_lock_timeout 5s;
scgi_cache_max_range_offset#
scgi_cache_methods#
scgi_cache_methods
GET
| HEAD
| POST
...;scgi_cache_methods GET HEAD;
scgi_cache_min_uses#
scgi_cache_path#
scgi_cache_path
path [levels=
levels] [use_temp_path=
on
| off
] keys_zone=
name:size [inactive=
time] [max_size=
size] [min_free=
size] [manager_files=
number] [manager_sleep=
time] [manager_threshold=
time] [loader_files=
number] [loader_sleep=
time] [loader_threshold=
time];levels
define niveles de jerarquía de una caché: de 1 a 3, cada nivel acepta valores 1 o 2. Por ejemplo, en la siguiente configuración:scgi_cache_path /data/angie/cache levels=1:2 keys_zone=one:10m;
/data/angie/cache/c/29/b7f54b2df7773722d382f4809d65029c
use_temp_path
.on
off
keys_zone
. Una zona de un megabyte puede almacenar aproximadamente 8 mil claves.inactive
se eliminan de la caché independientemente de su frescura.inactive
se establece en 10 minutos.max_size
min_free
manager_files
100
manager_threshold
200
milisegundosmanager_sleep
50
milisegundosloader_files
100
loader_threshold
200
milisegundosloader_sleep
50
milisegundosscgi_cache_revalidate#
scgi_cache_revalidate
on
| off
;scgi_cache_revalidate off;
If-Modified-Since
y If-None-Match
.scgi_cache_use_stale#
scgi_cache_use_stale
error
| timeout
| invalid_header
| updating
| http_500
| http_503
| http_403
| http_404
| http_429
| off
...;scgi_cache_use_stale off;
error
updating
Cache-Control
permite usar una respuesta en caché obsoleta si actualmente se está actualizando.Cache-Control
permite usar una respuesta en caché obsoleta en caso de error.scgi_cache_valid#
scgi_cache_valid 200 302 10m;
scgi_cache_valid 404 1m;
scgi_cache_valid 5m;
any
para almacenar en caché cualquier respuesta:scgi_cache_valid 200 302 10m;
scgi_cache_valid 301 1h;
scgi_cache_valid any 1m;
X-Accel-Expires
establece el tiempo de almacenamiento en caché de una respuesta en segundos. El valor cero deshabilita el almacenamiento en caché para una respuesta. Si el valor comienza con el prefijo @, establece un tiempo absoluto en segundos desde la Época, hasta el cual la respuesta puede ser almacenada en caché.X-Accel-Expires
, los parámetros de almacenamiento en caché pueden establecerse en los campos de cabecera Expires
o Cache-Control
.Set-Cookie
, dicha respuesta no se almacenará en caché.Vary
con el valor especial "*", dicha respuesta no se almacenará en caché. Si la cabecera incluye el campo Vary
con otro valor, dicha respuesta se almacenará en caché teniendo en cuenta los campos de cabecera de solicitud correspondientes.scgi_connect_timeout#
scgi_connect_timeout
time;scgi_connect_timeout 60s;
scgi_connection_drop#
scgi_connection_drop
time | on
| off
;scgi_connection_drop off;
DELETE
.on
establecido, las conexiones se descartan inmediatamente.scgi_force_ranges#
Accept-Ranges
en estas respuestas.scgi_hide_header#
Status
y X-Accel-...
from the response of an SCGI server to a client. The scgi_hide_header
directive sets additional fields that will not be passed. If, conversely, the passing of fields should be permitted, the scgi_pass_header directive can be used.scgi_ignore_client_abort#
scgi_ignore_client_abort
on
| off
;scgi_ignore_client_abort off;
scgi_ignore_headers#
X-Accel-Redirect
, X-Accel-Expires
, X-Accel-Limit-Rate
, X-Accel-Buffering
, X-Accel-Charset
, Expires
, Cache-Control
, Set-Cookie
, y Vary
.X-Accel-Expires
, Expires
, Cache-Control
, Set-Cookie
y Vary
establecen los parámetros de caché de respuesta caché de respuesta;X-Accel-Redirect
realiza una redirección interna a la URI especificada;X-Accel-Limit-Rate
establece el límite de velocidad para la transmisión de una respuesta a un cliente;X-Accel-Buffering
habilita o deshabilita el almacenamiento en búfer de una respuesta;X-Accel-Charset
establece el conjunto de caracteres deseado de una respuesta.scgi_intercept_errors#
scgi_intercept_errors
on
| off
;scgi_intercept_errors off;
scgi_limit_rate#
0
scgi_max_temp_file_size#
scgi_max_temp_file_size
size;scgi_max_temp_file_size 1024m;
0
scgi_next_upstream#
scgi_next_upstream
error
| timeout
| invalid_header
| http_500
| http_503
| http_403
| http_404
| http_429
| non_idempotent
| off
...;scgi_next_upstream error timeout;
error
timeout
invalid_header
http_500
http_503
http_403
http_404
http_429
non_idempotent
POST
, LOCK
, PATCH
) no se pasan al siguiente
servidor si ya se ha enviado una solicitud a un servidor upstream; habilitar esta
opción permite explícitamente reintentar tales solicitudes;off
error
timeout
invalid_header
http_500
http_503
http_429
http_403
http_404
scgi_next_upstream_timeout#
scgi_next_upstream_timeout
time;scgi_next_upstream_timeout 0;
0
scgi_next_upstream_tries#
scgi_next_upstream_tries
number;scgi_next_upstream_tries 0;
0
scgi_no_cache#
scgi_no_cache $cookie_nocache $arg_nocache$arg_comment;
scgi_no_cache $http_pragma $http_authorization;
scgi_param#
location / {
include scgi_params;
# ...
}
if_not_empty
, dicho parámetro se pasará al servidor solo si su valor no está vacío:scgi_param HTTPS $https if_not_empty;
scgi_pass#
scgi_pass localhost:9000;
scgi_pass unix:/tmp/scgi.socket;
scgi_pass_header#
scgi_pass_request_body#
scgi_pass_request_body
on
| off
;scgi_pass_request_body on;
scgi_pass_request_headers#
scgi_pass_request_headers
on
| off
;scgi_pass_request_headers on;
scgi_read_timeout#
scgi_request_buffering#
scgi_request_buffering
on
| off
;scgi_request_buffering on;
on
off
scgi_send_timeout#
scgi_socket_keepalive#
scgi_socket_keepalive
on
| off
;scgi_socket_keepalive off;
of
on
scgi_store#
scgi_store /data/www$original_uri;
Last-Modified
recibido. La respuesta se escribe primero en un archivo temporal, y luego el archivo se renombra. Los archivos temporales y el almacenamiento persistente pueden colocarse en diferentes sistemas de archivos. Sin embargo, tenga en cuenta que en este caso un archivo se copia a través de dos sistemas de archivos en lugar de la económica operación de renombrado. Por lo tanto, se recomienda que para cualquier ubicación dada, tanto los archivos guardados como el directorio que contiene archivos temporales, establecido por la directiva scgi_temp_path, se coloquen en el mismo sistema de archivos.location /images/ {
root /data/www;
error_page 404 = /fetch$uri;
}
location /fetch/ {
internal;
scgi_pass backend:9000;
...
scgi_store on;
scgi_store_access user:rw group:rw all:r;
scgi_temp_path /data/temp;
alias /data/www/;
}
scgi_store_access#
scgi_store_access
users:permissions ...;scgi_store_access user:rw;
scgi_store_access user:rw group:rw all:r;
group
o all
, los permisos de usuario pueden omitirse:scgi_store_access group:rw all:r;
scgi_temp_file_write_size#
scgi_temp_file_write_size
size;scgi_temp_file_write_size 8k|16k;
scgi_temp_path#
scgi_temp_path
path [level1 [level2 [level3]]]`;scgi_temp_path scgi_temp;
(la ruta depende de la opción de compilación --http-scgi-temp-path
build option)scgi_temp_path /spool/angie/scgi_temp 1 2;
/spool/angie/scgi_temp/7/45/00000123457
use_temp_path
de la directiva scgi_cache_path.