¿Cuál es la diferencia entre los módulos de Apache con y sin la extensión ".c"?

¿Cuál es la diferencia entre los módulos de Apache con y sin la extensión ".c"?

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 .htaccessarchivos.

<IfModule mod_rewrite.c>
    # ....
</IfModule>

He greprevisado mi /etc/apache2directorio 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.cuna 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.

información relacionada