Estoy ejecutando Apache v2.4 en Ubuntu 14.04 y tengo contenedores/directivas en este formato.
<IfModule mpm_prefork_module>
# ...
</IfModule>
Sin embargo, a menudo veo módulos a los que se hace referencia en la documentación oficial de Apache y en sitios de StackExchange de esta manera:
<IfModule prefork.c>
# ...
</IfModule>
He buscado mucho, incluidoaquí-http://httpd.apache.org/docs/2.4/mod/core.html#ifmodule¿Y no puedo encontrar cuál es la diferencia y cuándo se supone que se debe usar uno sobre el otro?
Tome el módulo de reescritura, por ejemplo.
del apachedocumentación: directiva ifmodule
El argumento del módulo puede ser el identificador del módulo o el nombre del archivo del módulo en el momento de su compilación.
Por ejemplo, rewrite_module es el identificador y mod_rewrite.c es el nombre del archivo.
Y es muy común ver esto en .htaccess
archivos.
<IfModule mod_rewrite.c>
# ....
</IfModule>
He grep
revisado mi /etc/apache2
directorio y "mod_rewrite.c" no está definido en ninguna parte.
En mi máquina el archivo /etc/apache2/mods-available/rewrite.load
contiene:
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
entonces, ¿es mod_rewrite.c
una referencia a un archivo de Windows/otro? ¿En cuyo caso referirse a él en una máquina Linux sería una sintaxis incorrecta?
Respuesta1
en la pagina tuvinculadoa, contiene este texto:
El argumento del módulo puede ser el identificador del módulo o el nombre del archivo del módulo en el momento de su compilación. Por ejemplo, rewrite_module es el identificador y mod_rewrite.c es el nombre del archivo. Si un módulo consta de varios archivos fuente, utilice el nombre del archivo que contiene la cadena STANDARD20_MODULE_STUFF.
Usando el ejemplo proporcionado, se puede hacer referencia al módulo de reescritura como 'rewrite_module' (identificador) o mod_rewrite.c (nombre de archivo). Ambos son equivalentes y no hay diferencia. Puedes usar cualquiera de los dos.
El módulo con el archivo fuente mod_rewrite.c se compila en mod_rewrite.so, que es lo que tendrá en su sistema de archivos. Este archivo fuente tiene la línea 'módulo AP_MODULE_DECLARE_DATA rewrite_module;' en él, que declara un módulo llamado 'rewrite_module'.
Se puede hacer referencia al módulo como 'rewrite_module', que es el identificador, o 'mod_rewrite.c', que es el archivo fuente a partir del cual se compiló.
La línea 'LoadModule' le indica que cargue el módulo con el identificador 'rewrite_module' del objeto mod_rewrite.so ya compilado. Cuando configura esto, puede consultar el identificador o el nombre del archivo fuente si lo conoce.
Respuesta2
Como ya señaló @DanielLawson, esto se describe claramente en la página del manual de Apache a la que está enlazando.
El argumento del módulo puede ser el identificador del módulo o el nombre del archivo del módulo en el momento de su compilación.
El nombre de archivo del módulo termina con un.Cextensión, ya que C es el lenguaje en el que se desarrolla Apache httpd.
El concepto de identificadores de módulo es, a su vez, similar al de las etiquetas de Stack Exchange. Tu <IfModule mpm_prefork_module>
bloque dice: si tienes algún módulo etiquetado comompm_prefork_module. Esto permite una mayor flexibilidad en la configuración: diferentes módulos ofrecen la misma funcionalidad, comomod_ssl.cymod_gnutls.cAmbos tienenmódulo_sslidentificador.