1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
|
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.es.xsl"?>
<!-- English Revision: 1816110 -->
<!-- Translated by: Luis Gil de Bernabé Pfeiffer lgilbernabe@apache.org-->
<!-- Reviewed by: Sergio Ramos -->
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<manualpage metafile="bind.xml.meta">
<title>Mapeo de Direcciones y Puertos.</title>
<summary>
<p>Configurando Apache HTTP Server para que escuche en una dirección y puertos específicos.</p>
</summary>
<seealso><a href="vhosts/">Hosts Virtuales</a></seealso>
<seealso><a href="dns-caveats.html">Problemas de DNS</a></seealso>
<section id="overview">
<title>Visión General</title>
<related>
<modulelist>
<module>core</module>
<module>mpm_common</module>
</modulelist>
<directivelist>
<directive module="core" type="section">VirtualHost</directive>
<directive module="mpm_common">Listen</directive>
</directivelist>
</related>
<p>Cuando httpd se ejecuta, se mapea a una dirección y un puerto en la
máquina local, y espera a recibir peticiones. Por defecto, escucha en
todas las direcciones de la máquina. Ahora bien, se le puede especificar
que escuche en un determinado puerto, o en una sola dirección IP especifica,
o una combinación de ambos. A menudo esto se combina con la característica
de los <a href="vhosts/">Hosts virtuales</a>, que determina como responde el
<code>httpd</code> a diferentes direcciones IP, nombres de máquinas y puertos.</p>
<p>La directiva <directive module="mpm_common">Listen</directive>
le dice al servidor que acepte peticiones en el puerto o puertos que
se le especifiquen al servidor, o a combinaciones de direcciones y
puertos. Si sólo se especifica el número del puerto en la directiva
<directive module="mpm_common">Listen</directive>, el servidor escuchará en
ese puerto pero en todas las interfaces de red.
Si además del puerto se le especifica una dirección IP, el servidor escuchará
en el puerto y en la interfaz de red asociado a la dirección IP
que se le ha especificado en la directiva. Se pueden especificar
múltiples directivas <directive module="mpm_common">Listen</directive> para
especificar un determinado número de IP´s y puertos por donde el servidor escuchará.
El servidor por tanto, responderá a las peticiones en cualquiera de las IP´s y puertos
listados en la directiva.</p>
<p>Por ejemplo, para hacer que el servidor escuche en ambos puertos 80 y 8080 en todas
sus interfaces de red, se usa lo siguiente:</p>
<example>
<highlight language="config">
Listen 80
Listen 8000
</highlight>
</example>
<p>Para hacer que el servidor acepte peticiones en el puerto 80 en una sola interfaz de red, usaremos:</p>
<example>
<highlight language="config">
Listen 192.0.2.1:80
Listen 192.0.2.5:8000
</highlight>
</example>
<p>Las direcciones IPv6 deberán ir entre '[ ]' corchetes como en el siguiente ejemplo:</p>
<example>
<highlight language="config">
Listen [2001:db8::a00:20ff:fea7:ccea]:80
</highlight>
</example>
<note type="warning"><p>Si se superponen directivas de tipo <directive
module="mpm_common">Listen</directive>, dará como resultado un error fatal
que impedirá que se inicie el servidor.</p>
<example>
(48)Address already in use: make_sock: could not bind to address [::]:80
</example>
<p>Puede mirar el <a
href="http://wiki.apache.org/httpd/CouldNotBindToAddress">articulo de la wiki</a>
de consejos para solucionar problemas relacionados.</p>
</note>
</section>
<section id="reload">
<title>Cambiar configuración de escucha al reiniciar</title>
<p>Cuando httpd se reinicia, hay que tener especial consideración en los
cambios que se realicen a la directiva <directive module="mpm_common">Listen</directive>.
Durante un reinicio, httpd mantiene los puertos (como en la configuración original)
para evitar generar errores del tipo "Conexión rechazada" para cualquier intento
nuevo de establecer la conexión contra el servidor. Si se realiza algún cambio
al conjunto de la directiva <directive module="mpm_common">Listen</directive>, es probable que entre en conflicto con la configuración antigua, la configuración fallará y el servidor
no se iniciará.
</p>
<p>Por ejemplo, cambiar de la configuración:</p>
<example>
<highlight language="config">
Listen 127.0.0.1:80
</highlight>
</example>
<p>a la siguiente configuración, es probable que falle, porque mapear el puerto 80
a todas las direcciones, entra en conflicto con sólo mapear el puerto 80 a
la 127.0.0.1.</p>
<example>
<highlight language="config">
Listen 80
</highlight>
</example>
<p>Para que este tipo de cambios surtan efecto, es necesario parar el servidor,
y después iniciarlo.</p>
</section>
<section id="ipv6">
<title>Consideraciones especiales con IPv6</title>
<p>Un creciente número de plataformas implementan ya IPv6, y
<glossary>APR</glossary> soporta IPv6 en la mayoría de estas plataformas,
permitiendo así a httpd asignar sockets IPv6, y manejar las respuestas
enviadas a través de IPv6.</p>
<p>Un factor bastante complejo para un administrador del httpd
es si un socket IPv6 puede o no manejar tanto conexiones IPv6
como IPv4. El manejo por httpd de conexiones IPv4 con socket IPv6
se debe al mapeo de direcciones IPv4 sobre IPv6, que
está permitido por defecto en muchas plataformas, pero no lo está
en sistemas FreeBSD, NetBSD y Open BSD, con el fin de que en estas
plataformas, cumpla con la política del sistema.
En los sistemas que no está permitido el mapeo por defecto,
existe un parámetro de <program>configure</program> especial
para cambiar éste comportamiento para httpd.</p>
<p>Por otro lado, en algunas plataformas, como Linux y True64, la
<strong>única</strong> forma para el manejo de IPv4 e IPv6 al mismo
tiempo es mediante direcciones mapeadas.
Si quieres que <code>httpd</code> maneje amos tipos de conexiones IPv4 e IPv6
con el mínimo de sockets, hay que especificar la opción
<code>--enable-v4-mapped</code> al <program>
configure</program>.</p>
<p><code>--enable-v4-mapped</code> es la opción que está estipulada por defecto
en todos los sistemas menos en FreeBSD, NetBSD y Open BSD, por
lo que es probablemente como se compiló su httpd.</p>
<p>Si lo que quiere es manejar sólo conexiones IPv4, independientemente de
lo que soporten <glossary>APR</glossary> y su plataforma, especifique
una dirección IPv4 por cada directiva
<directive module="mpm_common">Listen</directive>, como en el siguiente
ejemplo:</p>
<example>
<highlight language="config">
Listen 0.0.0.0:80
Listen 192.0.2.1:80
</highlight>
</example>
<p>Si en cambio, su plataforma lo soporta, y lo que quiere es que su httpd
soporte tanto conexiones IPv4 como IPv6 en diferentes sockets (ejemplo.: para
deshabilitar mapeo de direcciones IPv4), especifique la opción
<code>--disable-v4-mapped</code> al <program>
configure</program>. <code>--disable-v4-mapped</code> es la opción por defecto
en FreeBSD, NetBSD y OpenBSD.</p>
</section>
<section id="protocol">
<title>Especificar el Protocolo en el Listen</title>
<p>El segundo argumento en la directiva <directive module="mpm_common">Listen</directive>
el <var>protocolo</var> que es opcional no es algo que se requiera en las configuraciones.
Si éste argumento no se especifica, <code>https</code> es el protocolo
usado por defecto en el puerto 443 y <code>http</code> para el resto.
El protocolo se utiliza para determinar que módulo deberá manejar la petición,
y se le aplicarán optimizaciones específicas del protocolo con la directiva
<directive module="core">AcceptFilter</directive>.</p>
<p>Sólo necesitará especificar el protocolo si no está escuchando en un puerto
de los que son estándares, por ejemplo si ejecuta un sitio web <code>https</code> en el puerto 8443:</p>
<example>
<highlight language="config">
Listen 192.170.2.1:8443 https
</highlight>
</example>
</section>
<section id="virtualhost">
<title>Como Funciona en los Hosts Virtuales</title>
<p> La directiva <directive
module="mpm_common">Listen</directive> no implementa los
Hosts Virtuales - solo le dice al servidor en que direcciones
y puertos debe escuchar. Si no hay directiva
<directive module="core" type="section">VirtualHost</directive>
en uso, el servidor se comportará de la misma manera para todas las
peticiones aceptadas. Ahora bien,
<directive module="core" type="section">VirtualHost</directive>
puede ser usado para especificar un comportamiento diferente en una o
varias direcciones o puertos.
Para implementar los Hosts Virtuales, antes se le tiene que decir al servidor
que direcciones y puertos van a ser usados.
Después de esto, se deberá especificar una sección de la directiva
<directive module="core" type="section">VirtualHost</directive>
especificando direcciones y puertos que se van a usar en el Host Virtual
Note que si se configura un
<directive module="core" type="section">VirtualHost</directive>
para una dirección y puerto en el que el servidor no está escuchando,
no se podrá acceder al Host Virtual.</p>
</section>
</manualpage>
|