diff options
author | Luis Gil <lgilbernabe@apache.org> | 2017-04-01 17:29:47 +0000 |
---|---|---|
committer | Luis Gil <lgilbernabe@apache.org> | 2017-04-01 17:29:47 +0000 |
commit | 3250fbb2419e9b31a4bcef96fd1a1b633569b421 (patch) | |
tree | 823a9e46005c50dfdd2d1bc7f556e659444b06d8 /docs | |
parent | d467a51416afe6d521ef4cf0fa38f9ee8ebb5e07 (diff) | |
download | httpd-3250fbb2419e9b31a4bcef96fd1a1b633569b421.tar.gz |
updating all the documents from trunk to 2.4 branch to be up to date version 2.4
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1789828 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'docs')
25 files changed, 4908 insertions, 0 deletions
diff --git a/docs/manual/howto/access.html b/docs/manual/howto/access.html index 0ce25e0e0a..77bb4ed162 100644 --- a/docs/manual/howto/access.html +++ b/docs/manual/howto/access.html @@ -4,6 +4,10 @@ URI: access.html.en Content-Language: en Content-type: text/html; charset=ISO-8859-1 +URI: access.html.es +Content-Language: es +Content-type: text/html; charset=ISO-8859-1 + URI: access.html.fr Content-Language: fr Content-type: text/html; charset=ISO-8859-1 diff --git a/docs/manual/howto/access.html.es b/docs/manual/howto/access.html.es new file mode 100644 index 0000000000..54158e1a97 --- /dev/null +++ b/docs/manual/howto/access.html.es @@ -0,0 +1,236 @@ +<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head>
+<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" />
+<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + -->
+<title>Control de Acceso - Servidor Apache HTTP Versión 2.4</title>
+<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
+<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
+<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
+<script src="../style/scripts/prettify.min.js" type="text/javascript">
+</script>
+
+<link href="../images/favicon.ico" rel="shortcut icon" /></head>
+<body id="manual-page"><div id="page-header">
+<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p>
+<p class="apache">Versión 2.4 del Servidor HTTP Apache</p>
+<img alt="" src="../images/feather.png" /></div>
+<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Servidor HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentación</a> > <a href="../">Versión 2.4</a> > <a href="./">How-To / Tutoriales</a></div><div id="page-content"><div id="preamble"><h1>Control de Acceso</h1>
+<div class="toplang">
+<p><span>Idiomas disponibles: </span><a href="../en/howto/access.html" hreflang="en" rel="alternate" title="English"> en </a> |
+<a href="../es/howto/access.html" title="Español"> es </a> |
+<a href="../fr/howto/access.html" hreflang="fr" rel="alternate" title="Français"> fr </a></p>
+</div>
+
+ <p>El control de acceso, hace referencia a todos los medios que proporcionan
+ una forma de controlar el acceso a cualquier recurso. Esta parte está
+ separada de <a href="auth.html">autenticación y autorización</a>.</p>
+</div>
+<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Módulos y Directivas relacionados</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#host">Control de Acceso por host</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#env">Control de acceso por variables arbitrarias.</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#rewrite">Control de acceso con mod_rewrite</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#moreinformation">Más información</a></li>
+</ul><h3>Consulte también</h3><ul class="seealso"><li><a href="#comments_section">Comentarios</a></li></ul></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="related" id="related">Módulos y Directivas relacionados</a></h2>
+
+ <p>El control de acceso puede efectuarse mediante diferentes módulos. Los
+ más importantes de éstos son <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> y
+ <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>. También se habla en este documento de
+ el control de acceso usando el módulo <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.</p>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="host" id="host">Control de Acceso por host</a></h2>
+ <p>
+ Si lo que se quiere es restringir algunas zonas del sitio web, basándonos
+ en la dirección del visitante, esto puede ser realizado de manera
+ fácil con el módulo <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>.
+ </p>
+
+ <p>La directiva <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>
+ proporciona una variedad de diferentes maneras de permitir o denegar el acceso a los recursos. Además puede ser usada junto con las directivas:<code class="directive"><a href="../mod/mod_authz_core.html#requireall">RequireAll</a></code>, <code class="directive"><a href="../mod/mod_authz_core.html#requireany">RequireAny</a></code>, y <code class="directive"><a href="../mod/mod_authz_core.html#requirenone">RequireNone</a></code>, estos requerimientos pueden
+ ser combinados de forma compleja y arbitraria, para cumplir cualquiera que
+ sean tus políticas de acceso.</p>
+
+ <div class="warning"><p>
+ Las directivas <code class="directive"><a href="../mod/mod_access_compat.html#allow">Allow</a></code>,
+ <code class="directive"><a href="../mod/mod_access_compat.html#deny">Deny</a></code>, y
+ <code class="directive"><a href="../mod/mod_access_compat.html#order">Order</a></code>,
+ proporcionadas por <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code>, están obsoletas y
+ serán quitadas en futuras versiones. Deberá evitar su uso, y también
+ los tutoriales desactualizaos que recomienden su uso.
+ </p></div>
+
+ <p>El uso de estas directivas es:</p>
+
+
+ <pre class="prettyprint lang-config">Require host <var>address</var> <br />
+Require ip <var>ip.address</var>
+ </pre>
+
+
+ <p>En la primera línea, <var>address</var> es el FQDN de un nombre de
+ dominio (o un nombre parcial del dominio); puede proporcionar múltiples
+ direcciones o nombres de dominio, si se desea.
+ </p>
+
+ <p>En la segunda línea, <var>ip.address</var> es la dirección IP, una
+ dirección IP parcial, una red con su máscara, o una especificación red/nnn
+ CIDR. Pueden usarse tanto IPV4 como IPV6.</p>
+
+ <p>Consulte también <a href="../mod/mod_authz_host.html#requiredirectives">la
+ documentación de mod_authz_host </a> para otros ejemplos de esta sintaxis.
+ </p>
+
+ <p>Puede ser insertado <code>not</code> para negar un requisito en particular.
+ Note que, ya que <code>not</code> es una negación de un valor, no puede ser
+ usado por si solo para permitir o denegar una petición, como <em>not true</em>
+ que no contituye ser <em>false</em>. En consecuencia, para denegar una
+ visita usando una negación, el bloque debe tener un elemento que se evalúa como
+ verdadero o falso. Por ejemplo, si tienes a alguien espameandote tu tablón de
+ mensajes, y tu quieres evitar que entren o dejarlos fuera, puedes realizar
+ lo siguiente:
+ </p>
+
+ <pre class="prettyprint lang-config"><RequireAll>
+ Require all granted
+ Require not ip 10.252.46.165
+</RequireAll></pre>
+
+
+ <p>Los visitantes que vengan desde la IP que se configura (<code>10.252.46.165</code>)
+ no tendrán acceso al contenido que cubre esta directiva. Si en cambio, lo que se
+ tiene es el nombre de la máquina, en vez de la IP, podrás usar:</p>
+
+ <pre class="prettyprint lang-config">Require not host <var>host.example.com</var>
+ </pre>
+
+
+ <p>Y, Si lo que se quiere es bloquear el acceso desde dominio especifico,
+ podrás especificar parte de una dirección o nombre de dominio:</p>
+
+ <pre class="prettyprint lang-config">Require not ip 192.168.205
+Require not host phishers.example.com moreidiots.example
+Require not host gov</pre>
+
+
+ <p>Uso de las directivas <code class="directive"><a href="../mod/mod_authz_core.html#requireall">RequireAll</a></code>, <code class="directive"><a href="../mod/mod_authz_core.html#requireany">RequireAny</a></code>, y <code class="directive"><a href="../mod/mod_authz_core.html#requirenone">RequireNone</a></code> pueden ser usadas
+ para forzar requisitos más complejos.</p>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="env" id="env">Control de acceso por variables arbitrarias.</a></h2>
+
+ <p>Haciendo el uso de <code class="directive"><a href="../mod/core.html#if"><If></a></code>,
+ puedes permitir o denegar el acceso basado en variables de entrono arbitrarias
+ o en los valores de las cabeceras de las peticiones. Por ejemplo para denegar
+ el acceso basándonos en el "user-agent" (tipo de navegador así como Sistema Operativo)
+ puede que hagamos lo siguiente:
+ </p>
+
+ <pre class="prettyprint lang-config"><If "%{HTTP_USER_AGENT} == 'BadBot'">
+ Require all denied
+</If></pre>
+
+
+ <p>Usando la sintaxis de <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>
+ <code>expr</code> , esto también puede ser escrito de la siguiente forma:
+ </p>
+
+
+ <pre class="prettyprint lang-config">Require expr %{HTTP_USER_AGENT} != 'BadBot'</pre>
+
+
+ <div class="note"><h3>Advertencia:</h3>
+ <p>El control de acceso por <code>User-Agent</code> es una técnica poco fiable,
+ ya que la cabecera de <code>User-Agent</code> puede ser modificada y establecerse
+ al antojo del usuario.</p>
+ </div>
+
+ <p>Vea también la página de <a href="../expr.html">expresiones</a>
+ para una mayor aclaración de que sintaxis tienen las expresiones y que
+ variables están disponibles.</p>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="rewrite" id="rewrite">Control de acceso con mod_rewrite</a></h2>
+
+ <p>El flag <code>[F]</code> de <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> causa una respuesta 403 Forbidden
+ para ser enviada. USando esto, podrá denegar el acceso a recursos basándose
+ en criterio arbitrario.</p>
+
+ <p>Por ejemplo, si lo que desea es bloquear un recurso entre las 8pm y las
+ 7am, podrá hacerlo usando <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>:</p>
+
+ <pre class="prettyprint lang-config">RewriteEngine On
+RewriteCond "%{TIME_HOUR}" ">=20" [OR]
+RewriteCond "%{TIME_HOUR}" "<07"
+RewriteRule "^/fridge" "-" [F]</pre>
+
+
+ <p>Esto devolverá una respuesta de error 403 Forbidden para cualquier petición
+ después de las 8pm y antes de las 7am. Esta técnica puede ser usada para cualquier
+ criterio que desee usar. También puede redireccionar, o incluso reescribir estas
+ peticiones, si se prefiere ese enfoque.
+ </p>
+
+ <p>La directiva <code class="directive"><a href="../mod/core.html#if"><If></a></code>,
+ añadida en la 2.4, sustituye muchas cosas que <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
+ tradicionalmente solía hacer, y deberá comprobar estas antes de recurrir a
+ </p>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="moreinformation" id="moreinformation">Más información</a></h2>
+
+ <p>El <a href="../expr.html">motor de expresiones</a> le da una gran
+ capacidad de poder para hacer una gran variedad de cosas basadas en
+ las variables arbitrarias del servidor, y debe consultar este
+ documento para más detalles.</p>
+
+ <p>También, deberá leer la documentación de <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code>
+ para ejemplos de combinaciones de múltiples requisitos de acceso y especificar
+ cómo interactúan.
+ </p>
+
+ <p>Vea también los howtos de <a href="auth.html">Authenticación y Autorización</a>
+ </p>
+</div></div>
+<div class="bottomlang">
+<p><span>Idiomas disponibles: </span><a href="../en/howto/access.html" hreflang="en" rel="alternate" title="English"> en </a> |
+<a href="../es/howto/access.html" title="Español"> es </a> |
+<a href="../fr/howto/access.html" hreflang="fr" rel="alternate" title="Français"> fr </a></p>
+</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comentarios</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
+<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/access.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer">
+<p class="apache">Copyright 2017 The Apache Software Foundation.<br />Licencia bajo los términos de <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
+<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script>
+</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/access.xml.es b/docs/manual/howto/access.xml.es new file mode 100644 index 0000000000..096145f34a --- /dev/null +++ b/docs/manual/howto/access.xml.es @@ -0,0 +1,214 @@ +<?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: 1734357 -->
+<!-- Updated by Luis Gil de Bernabé Pfeiffer lgilbernabe[AT]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="access.xml.meta">
+<parentdocument href="./">How-To / Tutoriales</parentdocument>
+
+<title>Control de Acceso</title>
+
+<summary>
+ <p>El control de acceso, hace referencia a todos los medios que proporcionan
+ una forma de controlar el acceso a cualquier recurso. Esta parte está
+ separada de <a
+ href="auth.html">autenticación y autorización</a>.</p>
+</summary>
+
+<section id="related"><title>Módulos y Directivas relacionados</title>
+
+ <p>El control de acceso puede efectuarse mediante diferentes módulos. Los
+ más importantes de éstos son <module>mod_authz_core</module> y
+ <module>mod_authz_host</module>. También se habla en este documento de
+ el control de acceso usando el módulo <module>mod_rewrite</module>.</p>
+
+</section>
+
+<section id="host"><title>Control de Acceso por host</title>
+ <p>
+ Si lo que se quiere es restringir algunas zonas del sitio web, basándonos
+ en la dirección del visitante, esto puede ser realizado de manera
+ fácil con el módulo <module>mod_authz_host</module>.
+ </p>
+
+ <p>La directiva <directive module="mod_authz_core">Require</directive>
+ proporciona una variedad de diferentes maneras de permitir o denegar el acceso a los recursos. Además puede ser usada junto con las directivas:<directive
+ module="mod_authz_core">RequireAll</directive>, <directive
+ module="mod_authz_core">RequireAny</directive>, y <directive
+ module="mod_authz_core">RequireNone</directive>, estos requerimientos pueden
+ ser combinados de forma compleja y arbitraria, para cumplir cualquiera que
+ sean tus políticas de acceso.</p>
+
+ <note type="warning"><p>
+ Las directivas <directive module="mod_access_compat">Allow</directive>,
+ <directive module="mod_access_compat">Deny</directive>, y
+ <directive module="mod_access_compat">Order</directive>,
+ proporcionadas por <module>mod_access_compat</module>, están obsoletas y
+ serán quitadas en futuras versiones. Deberá evitar su uso, y también
+ los tutoriales desactualizaos que recomienden su uso.
+ </p></note>
+
+ <p>El uso de estas directivas es:</p>
+
+
+ <highlight language="config">
+Require host <var>address</var> <br/>
+Require ip <var>ip.address</var>
+ </highlight>
+
+ <p>En la primera línea, <var>address</var> es el FQDN de un nombre de
+ dominio (o un nombre parcial del dominio); puede proporcionar múltiples
+ direcciones o nombres de dominio, si se desea.
+ </p>
+
+ <p>En la segunda línea, <var>ip.address</var> es la dirección IP, una
+ dirección IP parcial, una red con su máscara, o una especificación red/nnn
+ CIDR. Pueden usarse tanto IPV4 como IPV6.</p>
+
+ <p>Consulte también <a href="../mod/mod_authz_host.html#requiredirectives">la
+ documentación de mod_authz_host </a> para otros ejemplos de esta sintaxis.
+ </p>
+
+ <p>Puede ser insertado <code>not</code> para negar un requisito en particular.
+ Note que, ya que <code>not</code> es una negación de un valor, no puede ser
+ usado por si solo para permitir o denegar una petición, como <em>not true</em>
+ que no contituye ser <em>false</em>. En consecuencia, para denegar una
+ visita usando una negación, el bloque debe tener un elemento que se evalúa como
+ verdadero o falso. Por ejemplo, si tienes a alguien espameandote tu tablón de
+ mensajes, y tu quieres evitar que entren o dejarlos fuera, puedes realizar
+ lo siguiente:
+ </p>
+
+ <highlight language="config">
+<RequireAll>
+ Require all granted
+ Require not ip 10.252.46.165
+</RequireAll>
+ </highlight>
+
+ <p>Los visitantes que vengan desde la IP que se configura (<code>10.252.46.165</code>)
+ no tendrán acceso al contenido que cubre esta directiva. Si en cambio, lo que se
+ tiene es el nombre de la máquina, en vez de la IP, podrás usar:</p>
+
+ <highlight language="config">
+Require not host <var>host.example.com</var>
+ </highlight>
+
+ <p>Y, Si lo que se quiere es bloquear el acceso desde dominio especifico,
+ podrás especificar parte de una dirección o nombre de dominio:</p>
+
+ <highlight language="config">
+Require not ip 192.168.205
+Require not host phishers.example.com moreidiots.example
+Require not host gov
+ </highlight>
+
+ <p>Uso de las directivas <directive
+ module="mod_authz_core">RequireAll</directive>, <directive
+ module="mod_authz_core">RequireAny</directive>, y <directive
+ module="mod_authz_core">RequireNone</directive> pueden ser usadas
+ para forzar requisitos más complejos.</p>
+
+</section>
+
+<section id="env"><title>Control de acceso por variables arbitrarias.</title>
+
+ <p>Haciendo el uso de <directive type="section" module="core">If</directive>,
+ puedes permitir o denegar el acceso basado en variables de entrono arbitrarias
+ o en los valores de las cabeceras de las peticiones. Por ejemplo para denegar
+ el acceso basándonos en el "user-agent" (tipo de navegador así como Sistema Operativo)
+ puede que hagamos lo siguiente:
+ </p>
+
+ <highlight language="config">
+<If "%{HTTP_USER_AGENT} == 'BadBot'">
+ Require all denied
+</If>
+ </highlight>
+
+ <p>Usando la sintaxis de <directive module="mod_authz_core">Require</directive>
+ <code>expr</code> , esto también puede ser escrito de la siguiente forma:
+ </p>
+
+
+ <highlight language="config">
+Require expr %{HTTP_USER_AGENT} != 'BadBot'
+ </highlight>
+
+ <note><title>Advertencia:</title>
+ <p>El control de acceso por <code>User-Agent</code> es una técnica poco fiable,
+ ya que la cabecera de <code>User-Agent</code> puede ser modificada y establecerse
+ al antojo del usuario.</p>
+ </note>
+
+ <p>Vea también la página de <a href="../expr.html">expresiones</a>
+ para una mayor aclaración de que sintaxis tienen las expresiones y que
+ variables están disponibles.</p>
+
+</section>
+
+<section id="rewrite"><title>Control de acceso con mod_rewrite</title>
+
+ <p>El flag <code>[F]</code> de <directive
+ module="mod_rewrite">RewriteRule</directive> causa una respuesta 403 Forbidden
+ para ser enviada. USando esto, podrá denegar el acceso a recursos basándose
+ en criterio arbitrario.</p>
+
+ <p>Por ejemplo, si lo que desea es bloquear un recurso entre las 8pm y las
+ 7am, podrá hacerlo usando <module>mod_rewrite</module>:</p>
+
+ <highlight language="config">
+RewriteEngine On
+RewriteCond "%{TIME_HOUR}" ">=20" [OR]
+RewriteCond "%{TIME_HOUR}" "<07"
+RewriteRule "^/fridge" "-" [F]
+ </highlight>
+
+ <p>Esto devolverá una respuesta de error 403 Forbidden para cualquier petición
+ después de las 8pm y antes de las 7am. Esta técnica puede ser usada para cualquier
+ criterio que desee usar. También puede redireccionar, o incluso reescribir estas
+ peticiones, si se prefiere ese enfoque.
+ </p>
+
+ <p>La directiva <directive type="section" module="core">If</directive>,
+ añadida en la 2.4, sustituye muchas cosas que <module>mod_rewrite</module>
+ tradicionalmente solía hacer, y deberá comprobar estas antes de recurrir a
+ </p>
+
+</section>
+
+<section id="moreinformation"><title>Más información</title>
+
+ <p>El <a href="../expr.html">motor de expresiones</a> le da una gran
+ capacidad de poder para hacer una gran variedad de cosas basadas en
+ las variables arbitrarias del servidor, y debe consultar este
+ documento para más detalles.</p>
+
+ <p>También, deberá leer la documentación de <module>mod_authz_core</module>
+ para ejemplos de combinaciones de múltiples requisitos de acceso y especificar
+ cómo interactúan.
+ </p>
+
+ <p>Vea también los howtos de <a href="auth.html">Authenticación y Autorización</a>
+ </p>
+</section>
+
+</manualpage>
diff --git a/docs/manual/howto/access.xml.meta b/docs/manual/howto/access.xml.meta index 605822ecb4..95d284ca3a 100644 --- a/docs/manual/howto/access.xml.meta +++ b/docs/manual/howto/access.xml.meta @@ -8,6 +8,7 @@ <variants> <variant>en</variant> + <variant>es</variant> <variant>fr</variant> </variants> </metafile> diff --git a/docs/manual/howto/auth.html b/docs/manual/howto/auth.html index a8c8b7e37d..c62314a8bf 100644 --- a/docs/manual/howto/auth.html +++ b/docs/manual/howto/auth.html @@ -4,6 +4,10 @@ URI: auth.html.en Content-Language: en Content-type: text/html; charset=ISO-8859-1 +URI: auth.html.es +Content-Language: es +Content-type: text/html; charset=ISO-8859-1 + URI: auth.html.fr Content-Language: fr Content-type: text/html; charset=ISO-8859-1 diff --git a/docs/manual/howto/auth.html.es b/docs/manual/howto/auth.html.es new file mode 100644 index 0000000000..4589cc1f93 --- /dev/null +++ b/docs/manual/howto/auth.html.es @@ -0,0 +1,713 @@ +<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head>
+<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" />
+<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + -->
+<title>Autenticación y Autorización - Servidor Apache HTTP Versión 2.4</title>
+<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
+<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
+<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
+<script src="../style/scripts/prettify.min.js" type="text/javascript">
+</script>
+
+<link href="../images/favicon.ico" rel="shortcut icon" /></head>
+<body id="manual-page"><div id="page-header">
+<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p>
+<p class="apache">Versión 2.4 del Servidor HTTP Apache</p>
+<img alt="" src="../images/feather.png" /></div>
+<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Servidor HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentación</a> > <a href="../">Versión 2.4</a> > <a href="./">How-To / Tutoriales</a></div><div id="page-content"><div id="preamble"><h1>Autenticación y Autorización</h1>
+<div class="toplang">
+<p><span>Idiomas disponibles: </span><a href="../en/howto/auth.html" hreflang="en" rel="alternate" title="English"> en </a> |
+<a href="../es/howto/auth.html" title="Español"> es </a> |
+<a href="../fr/howto/auth.html" hreflang="fr" rel="alternate" title="Français"> fr </a> |
+<a href="../ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
+<a href="../ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
+<a href="../tr/howto/auth.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
+</div>
+
+ <p>Autenticación es cualquier proceso por el cuál se verifica que uno es
+ quien dice ser. Autorización es cualquier proceso en el cuál cualquiera
+ está permitido a estar donde se quiera, o tener información la cuál se
+ quiera tener.
+ </p>
+
+ <p>Para información de control de acceso de forma genérica visite<a href="access.html">How to de Control de Acceso</a>.</p>
+</div>
+<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Módulos y Directivas Relacionados</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#introduction">Introducción</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#theprerequisites">Los Prerequisitos</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#gettingitworking">Conseguir que funcione</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#lettingmorethanonepersonin">Dejar que más de una persona
+ entre</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#possibleproblems">Posibles Problemas</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#dbmdbd">Método alternativo de almacenamiento de las
+ contraseñas</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#multprovider">Uso de múltiples proveedores</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#beyond">Más allá de la Autorización</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#socache">Cache de Autenticación</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#moreinformation">Más información</a></li>
+</ul><h3>Consulte también</h3><ul class="seealso"><li><a href="#comments_section">Comentarios</a></li></ul></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="related" id="related">Módulos y Directivas Relacionados</a></h2>
+
+<p>Hay tres tipos de módulos involucrados en los procesos de la autenticación
+ y autorización. Normalmente deberás escoger al menos un módulo de cada grupo.</p>
+
+<ul>
+ <li>Modos de Autenticación (consulte la directiva
+ <code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code> )
+ <ul>
+ <li><code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code></li>
+ <li><code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code></li>
+ </ul>
+ </li>
+ <li>Proveedor de Autenticación (consulte la directiva
+ <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> y
+ <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code>)
+
+ <ul>
+ <li><code class="module"><a href="../mod/mod_authn_anon.html">mod_authn_anon</a></code></li>
+ <li><code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code></li>
+ <li><code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code></li>
+ <li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li>
+ <li><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></li>
+ <li><code class="module"><a href="../mod/mod_authn_socache.html">mod_authn_socache</a></code></li>
+ </ul>
+ </li>
+ <li>Autorización (consulte la directiva
+ <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>)
+ <ul>
+ <li><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></li>
+ <li><code class="module"><a href="../mod/mod_authz_dbd.html">mod_authz_dbd</a></code></li>
+ <li><code class="module"><a href="../mod/mod_authz_dbm.html">mod_authz_dbm</a></code></li>
+ <li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li>
+ <li><code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code></li>
+ <li><code class="module"><a href="../mod/mod_authz_owner.html">mod_authz_owner</a></code></li>
+ <li><code class="module"><a href="../mod/mod_authz_user.html">mod_authz_user</a></code></li>
+ </ul>
+ </li>
+</ul>
+
+ <p>A parte de éstos módulos, también están
+ <code class="module"><a href="../mod/mod_authn_core.html">mod_authn_core</a></code> y
+ <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code>. Éstos módulos implementan las directivas
+ esenciales que son el centro de todos los módulos de autenticación.</p>
+
+ <p>El módulo <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> es tanto un proveedor de
+ autenticación como de autorización. El módulo
+ <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> proporciona autorización y control de acceso
+ basado en el nombre del Host, la dirección IP o características de la propia
+ petición, pero no es parte del sistema proveedor de
+ autenticación. Para tener compatibilidad inversa con el mod_access,
+ hay un nuevo modulo llamado <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code>.</p>
+
+ <p>También puedes mirar el how-to de <a href="access.html">Control de Acceso </a>, donde se plantean varias formas del control de acceso al servidor.</p>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="introduction" id="introduction">Introducción</a></h2>
+ <p>Si se tiene información en nuestra página web que sea información
+ sensible o pensada para un grupo reducido de usuarios/personas,
+ las técnicas que se describen en este manual, le servirán
+ de ayuda para asegurarse de que las personas que ven esas páginas sean
+ las personas que uno quiere.</p>
+
+ <p>Este artículo cubre la parte "estándar" de cómo proteger partes de un
+ sitio web que muchos usarán.</p>
+
+ <div class="note"><h3>Nota:</h3>
+ <p>Si de verdad es necesario que tus datos estén en un sitio seguro,
+ considera usar <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> como método de autenticación adicional a cualquier forma de autenticación.</p>
+ </div>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="theprerequisites" id="theprerequisites">Los Prerequisitos</a></h2>
+ <p>Las directivas que se usan en este artículo necesitaran ponerse ya sea
+ en el fichero de configuración principal del servidor ( típicamente en
+ la sección
+ <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> de httpd.conf ), o
+ en cada uno de los ficheros de configuraciones del propio directorio
+ (los archivos <code>.htaccess</code>).</p>
+
+ <p>Si planea usar los ficheros <code>.htaccess</code> , necesitarás
+ tener en la configuración global del servidor, una configuración que permita
+ poner directivas de autenticación en estos ficheros. Esto se hace con la
+ directiva <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>, la cual especifica
+ que directivas, en su caso, pueden ser puestas en cada fichero de configuración
+ por directorio.</p>
+
+ <p>Ya que estamos hablando aquí de autenticación, necesitarás una directiva
+ <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> como la siguiente:
+ </p>
+
+ <pre class="prettyprint lang-config">AllowOverride AuthConfig</pre>
+
+
+ <p>O, si solo se van a poner las directivas directamente en la configuración
+ principal del servidor, deberás tener, claro está, permisos de escritura
+ en el archivo. </p>
+
+ <p>Y necesitarás saber un poco de como está estructurado el árbol de
+ directorios de tu servidor, para poder saber donde se encuentran algunos
+ archivos. Esto no debería ser una tarea difícil, aún así intentaremos
+ dejarlo claro llegado el momento de comentar dicho aspecto.</p>
+
+ <p>También deberás de asegurarte de que los módulos
+ <code class="module"><a href="../mod/mod_authn_core.html">mod_authn_core</a></code> y <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code>
+ han sido incorporados, o añadidos a la hora de compilar en tu binario httpd o
+ cargados mediante el archivo de configuración <code>httpd.conf</code>. Estos
+ dos módulos proporcionan directivas básicas y funcionalidades que son críticas
+ para la configuración y uso de autenticación y autorización en el servidor web.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="gettingitworking" id="gettingitworking">Conseguir que funcione</a></h2>
+ <p>Aquí está lo básico de cómo proteger con contraseña un directorio en tu
+ servidor.</p>
+
+ <p>Primero, necesitarás crear un fichero de contraseña. Dependiendo de que
+ proveedor de autenticación se haya elegido, se hará de una forma u otra. Para empezar,
+ usaremos un fichero de contraseña de tipo texto.</p>
+
+ <p>Este fichero deberá estar en un sitio que no se pueda tener acceso desde
+ la web. Esto también implica que nadie pueda descargarse el fichero de
+ contraseñas. Por ejemplo, si tus documentos están guardados fuera de
+ <code>/usr/local/apache/htdocs</code>, querrás poner tu archivo de contraseñas en
+ <code>/usr/local/apache/passwd</code>.</p>
+
+ <p>Para crear el fichero de contraseñas, usa la utilidad
+ <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> que viene con Apache. Esta herramienta se
+ encuentra en el directorio <code>/bin</code> en donde sea que se ha
+ instalado el Apache. Si ha instalado Apache desde un paquete de terceros,
+ puede ser que se encuentre en su ruta de ejecución.</p>
+
+ <p>Para crear el fichero, escribiremos:</p>
+
+ <div class="example"><p><code>
+ htpasswd -c /usr/local/apache/passwd/passwords rbowen
+ </code></p></div>
+
+ <p><code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> te preguntará por una contraseña, y después
+ te pedirá que la vuelvas a escribir para confirmarla:</p>
+
+ <div class="example"><p><code>
+ $ htpasswd -c /usr/local/apache/passwd/passwords rbowen<br />
+ New password: mypassword<br />
+ Re-type new password: mypassword<br />
+ Adding password for user rbowen
+ </code></p></div>
+
+ <p>Si <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> no está en tu variable de entorno "path" del
+ sistema, por supuesto deberás escribir la ruta absoluta del ejecutable para
+ poder hacer que se ejecute. En una instalación por defecto, está en:
+ <code>/usr/local/apache2/bin/htpasswd</code></p>
+
+ <p>Lo próximo que necesitas, será configurar el servidor para que pida una
+ contraseña y así decirle al servidor que usuarios están autorizados a acceder.
+ Puedes hacer esto ya sea editando el fichero <code>httpd.conf</code>
+ de configuración o usando in fichero <code>.htaccess</code>. Por ejemplo,
+ si quieres proteger el directorio
+ <code>/usr/local/apache/htdocs/secret</code>, puedes usar las siguientes
+ directivas, ya sea en el fichero <code>.htaccess</code> localizado en
+ following directives, either placed in the file
+ <code>/usr/local/apache/htdocs/secret/.htaccess</code>, o
+ en la configuración global del servidor <code>httpd.conf</code> dentro de la
+ sección <Directory
+ "/usr/local/apache/htdocs/secret"> , como se muestra a continuación:</p>
+
+ <pre class="prettyprint lang-config"><Directory "/usr/local/apache/htdocs/secret">
+AuthType Basic
+AuthName "Restricted Files"
+# (Following line optional)
+AuthBasicProvider file
+AuthUserFile "/usr/local/apache/passwd/passwords"
+Require user rbowen
+</Directory></pre>
+
+
+ <p>Vamos a explicar cada una de las directivas individualmente.
+ La directiva <code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code> selecciona el método
+ que se usa para autenticar al usuario. El método más común es
+ <code>Basic</code>, y éste es el método que implementa
+ <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>. Es muy importante ser consciente,
+ de que la autenticación básica, envía las contraseñas desde el cliente
+ al servidor sin cifrar.
+ Este método por tanto, no debe ser utilizado para proteger datos muy sensibles,
+ a no ser que, este método de autenticación básica, sea acompañado del módulo
+ <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>.
+ Apache soporta otro método más de autenticación que es del tipo
+ <code>AuthType Digest</code>. Este método, es implementado por el módulo <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code> y con el se pretendía crear una autenticación más
+ segura. Este ya no es el caso, ya que la conexión deberá realizarse con <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> en su lugar.
+ </p>
+
+ <p>La directiva <code class="directive"><a href="../mod/mod_authn_core.html#authname">AuthName</a></code>
+ establece el <dfn>Realm</dfn> para ser usado en la autenticación. El
+ <dfn>Realm</dfn> tiene dos funciones principales.
+ La primera, el cliente presenta a menudo esta información al usuario como
+ parte del cuadro de diálogo de contraseña. La segunda, que es utilizado por
+ el cliente para determinar qué contraseña enviar a para una determinada zona
+ de autenticación.</p>
+
+ <p>Así que, por ejemple, una vez que el cliente se ha autenticado en el área de
+ los <code>"Ficheros Restringidos"</code>, entonces re-intentará automáticamente
+ la misma contraseña para cualquier área en el mismo servidor que es marcado
+ con el Realm de <code>"Ficheros Restringidos"</code>
+ Por lo tanto, puedes prevenir que a un usuario se le pida mas de una vez por su
+ contraseña, compartiendo así varias áreas restringidas el mismo Realm
+ Por supuesto, por razones de seguridad, el cliente pedirá siempre por una contraseña,
+ siempre y cuando el nombre del servidor cambie.
+ </p>
+
+ <p>La directiva <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> es,
+ en este caso, opcional, ya que <code>file</code> es el valor por defecto
+ para esta directiva. Deberás usar esta directiva si estas usando otro medio
+ diferente para la autenticación, como por ejemplo
+ <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> o <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>.</p>
+
+ <p>La directiva <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>
+ establece el path al fichero de contraseñas que acabamos de crear con el
+ comando <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code>. Si tiene un número muy grande de usuarios,
+ puede ser realmente lento el buscar el usuario en ese fichero de texto plano
+ para autenticar a los usuarios en cada petición.
+ Apache también tiene la habilidad de almacenar información de usuarios en
+ unos ficheros de rápido acceso a modo de base de datos.
+ El módulo <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> proporciona la directiva <code class="directive"><a href="../mod/mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></code>. Estos ficheros pueden ser creados y
+ manipulados con el programa <code class="program"><a href="../programs/dbmmanage.html">dbmmanage</a></code> y <code class="program"><a href="../programs/htdbm.html">htdbm</a></code>.
+ Muchos otros métodos de autenticación así como otras opciones, están disponibles en
+ módulos de terceros
+ <a href="http://modules.apache.org/">Base de datos de Módulos disponibles</a>.</p>
+
+ <p>Finalmente, la directiva <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>
+ proporciona la parte del proceso de autorización estableciendo el o los
+ usuarios que se les está permitido acceder a una región del servidor.
+ En la próxima sección, discutiremos las diferentes vías de utilizar la
+ directiva <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="lettingmorethanonepersonin" id="lettingmorethanonepersonin">Dejar que más de una persona
+ entre</a></h2>
+ <p>Las directivas mencionadas arriba sólo permiten a una persona
+ (especialmente con un usuario que en ej ejemplo es <code>rbowen</code>)
+ en el directorio. En la mayoría de los casos, se querrá permitir el acceso
+ a más de una persona. Aquí es donde la directiva
+ <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code> entra en juego.</p>
+
+ <p>Si lo que se desea es permitir a más de una persona el acceso, necesitarás
+ crear un archivo de grupo que asocie los nombres de grupos con el de personas
+ para permitirles el acceso. El formato de este fichero es bastante sencillo,
+ y puedes crearlo con tu editor de texto favorito. El contenido del fichero
+ se parecerá a:</p>
+
+ <div class="example"><p><code>
+ GroupName: rbowen dpitts sungo rshersey
+ </code></p></div>
+
+ <p>Básicamente eso es la lista de miembros los cuales están en un mismo fichero
+ de grupo en una sola linea separados por espacios.</p>
+
+ <p>Para añadir un usuario a tu fichero de contraseñas existente teclee:</p>
+
+ <div class="example"><p><code>
+ htpasswd /usr/local/apache/passwd/passwords dpitts
+ </code></p></div>
+
+ <p>Te responderá lo mismo que anteriormente, pero se añadirá al fichero
+ existente en vez de crear uno nuevo. (Es decir el flag <code>-c</code> será
+ el que haga que se genere un nuevo
+ fichero de contraseñas).</p>
+
+ <p>Ahora, tendrá que modificar su fichero <code>.htaccess</code> para que sea
+ parecido a lo siguiente:</p>
+
+ <pre class="prettyprint lang-config">AuthType Basic
+AuthName "By Invitation Only"
+# Optional line:
+AuthBasicProvider file
+AuthUserFile "/usr/local/apache/passwd/passwords"
+AuthGroupFile "/usr/local/apache/passwd/groups"
+Require group GroupName</pre>
+
+
+ <p>Ahora, cualquiera que esté listado en el grupo <code>GroupName</code>,
+ y tiene una entrada en el fichero de <code>contraseñas</code>, se les
+ permitirá el acceso, si introducen su contraseña correctamente.</p>
+
+ <p>Hay otra manera de dejar entrar a varios usuarios, que es menos específica.
+ En lugar de crear un archivo de grupo, sólo puede utilizar la siguiente
+ directiva:</p>
+
+ <pre class="prettyprint lang-config">Require valid-user</pre>
+
+
+ <p>Usando ésto en vez de la línea <code>Require user rbowen</code>
+ permitirá a cualquier persona acceder, la cuál aparece en el archivo de
+ contraseñas, y que introduzca correctamente su contraseña. Incluso puede
+ emular el comportamiento del grupo aquí, sólo manteniendo un fichero de
+ contraseñas independiente para cada grupo. La ventaja de este enfoque es
+ que Apache sólo tiene que comprobar un archivo, en lugar de dos. La desventaja
+ es que se tiene que mantener un montón de ficheros de contraseña de grupo, y
+ recuerde hacer referencia al fichero correcto en la directiva
+ <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="possibleproblems" id="possibleproblems">Posibles Problemas</a></h2>
+ <p>Debido a la forma en que se especifica la autenticación básica,
+ su nombre de usuario y la contraseña deben ser verificados cada vez
+ que se solicita un documento desde el servidor. Esto es, incluso si
+ se vuelve a cargar la misma página, y para cada imagen de la página (si
+ provienen de un directorio protegido). Como se puede imaginar, esto
+ ralentiza las cosas un poco. La cantidad que ralentiza las cosas es
+ proporcional al tamaño del archivo de contraseñas, porque tiene que
+ abrir ese archivo, recorrer lista de usuarios hasta que llega a su nombre.
+ Y tiene que hacer esto cada vez que se carga una página.</p>
+
+ <p>Una consecuencia de esto, es que hay un limite práctico de cuantos
+ usuarios puedes introducir en el fichero de contraseñas. Este límite
+ variará dependiendo de la máquina en la que tengas el servidor,
+ pero puedes notar ralentizaciones en cuanto se metan cientos de entradas,
+ y por lo tanto consideraremos entonces otro método de autenticación
+ en ese momento.
+ </p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="dbmdbd" id="dbmdbd">Método alternativo de almacenamiento de las
+ contraseñas</a></h2>
+
+ <p>Debido a que el almacenamiento de las contraseñas en texto plano tiene
+ el problema mencionado anteriormente, puede que se prefiera guardar
+ las contraseñas en otro lugar como por ejemplo una base de datos.
+ </p>
+
+ <p>Los módulos <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> y <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code> son
+ dos módulos que hacen esto posible. En vez de seleccionar la directiva de fichero
+ <code><code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> </code>, en su lugar
+ se puede elegir <code>dbm</code> o <code>dbd</code> como formato de almacenamiento.</p>
+
+ <p>Para seleccionar los ficheros de tipo dbm en vez de texto plano, podremos hacer algo parecido a lo siguiente:</p>
+
+ <pre class="prettyprint lang-config"><Directory "/www/docs/private">
+ AuthName "Private"
+ AuthType Basic
+ AuthBasicProvider dbm
+ AuthDBMUserFile "/www/passwords/passwd.dbm"
+ Require valid-user
+</Directory></pre>
+
+
+ <p>Hay otras opciones disponibles. Consulta la documentación de
+ <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> para más detalles.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="multprovider" id="multprovider">Uso de múltiples proveedores</a></h2>
+
+ <p>Con la introducción de la nueva autenticación basada en un proveedor y
+ una arquitectura de autorización, ya no estaremos restringidos a un único
+ método de autenticación o autorización. De hecho, cualquier número de
+ los proveedores pueden ser mezclados y emparejados para ofrecerle
+ exactamente el esquema que se adapte a sus necesidades.
+ En el siguiente ejemplo, veremos como ambos proveedores tanto el fichero
+ como el LDAP son usados en la autenticación:
+ </p>
+
+ <pre class="prettyprint lang-config"><Directory "/www/docs/private">
+ AuthName "Private"
+ AuthType Basic
+ AuthBasicProvider file ldap
+ AuthUserFile "/usr/local/apache/passwd/passwords"
+ AuthLDAPURL ldap://ldaphost/o=yourorg
+ Require valid-user
+</Directory></pre>
+
+
+ <p>En este ejemplo el fichero, que actúa como proveedor, intentará autenticar
+ primero al usuario. Si no puede autenticar al usuario, el proveedor del LDAP
+ será llamado para que realice la autenticación.
+ Esto permite al ámbito de autenticación ser amplio, si su organización
+ implementa más de un tipo de almacén de autenticación.
+ Otros escenarios de autenticación y autorización pueden incluir la
+ mezcla de un tipo de autenticación con un tipo diferente de autorización.
+ Por ejemplo, autenticar contra un fichero de contraseñas pero autorizando
+ dicho acceso mediante el directorio del LDAP.</p>
+
+ <p>Así como múltiples métodos y proveedores de autenticación pueden
+ ser implementados, también pueden usarse múltiples formas de
+ autorización.
+ En este ejemplo ambos ficheros de autorización de grupo así como
+ autorización de grupo mediante LDAP va a ser usado:
+ </p>
+
+ <pre class="prettyprint lang-config"><Directory "/www/docs/private">
+ AuthName "Private"
+ AuthType Basic
+ AuthBasicProvider file
+ AuthUserFile "/usr/local/apache/passwd/passwords"
+ AuthLDAPURL ldap://ldaphost/o=yourorg
+ AuthGroupFile "/usr/local/apache/passwd/groups"
+ Require group GroupName
+ Require ldap-group cn=mygroup,o=yourorg
+</Directory></pre>
+
+
+ <p>Para llevar la autorización un poco más lejos, las directivas
+ de autorización de contenedores tales como
+ <code class="directive"><a href="../mod/mod_authz_core.html#requireall"><RequireAll></a></code>
+ and
+ <code class="directive"><a href="../mod/mod_authz_core.html#requireany"><RequireAny></a></code>
+ nos permiten aplicar una lógica de en qué orden se manejará la autorización dependiendo
+ de la configuración y controlada a través de ella.
+ Mire también <a href="../mod/mod_authz_core.html#logic">Contenedores de
+ Autorización</a> para ejemplos de cómo pueden ser aplicados.</p>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="beyond" id="beyond">Más allá de la Autorización</a></h2>
+
+ <p>El modo en que la autorización puede ser aplicada es ahora mucho más flexible
+ que us solo chequeo contra un almacén de datos (contraseñas). Ordenando la
+ lógica y escoger la forma en que la autorización es realizada, ahora es posible
+ </p>
+
+ <h3><a name="authandororder" id="authandororder">Aplicando la lógica y ordenación</a></h3>
+ <p>Controlar el cómo y en qué orden se va a aplicar la autorización ha
+ sido un misterio en el pasado. En Apache 2.2 un proveedor del
+ mecanismo de autenticación fue introducido para disociar el proceso actual
+ de autenticación y soportar funcionalidad.
+ Uno de los beneficios secundarios fue que los proveedores de autenticación
+ podían ser configurados y llamados en un orden especifico que no dependieran
+ en el orden de carga del propio modulo.
+ Este proveedor de dicho mecanismo, ha sido introducido en la autorización
+ también. Lo que esto significa es que la directiva
+ <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>
+ no sólo especifica que método de autorización deberá ser usado, si no
+ también especifica el orden en que van a ser llamados. Múltiples
+ métodos de autorización son llamados en el mismo orden en que la directiva
+ <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> aparece en la
+ configuración.
+ </p>
+
+ <p>
+ Con la Introducción del contenedor de directivas de autorización tales como
+ <code class="directive"><a href="../mod/mod_authz_core.html#requireall"><RequireAll></a></code>
+ y
+ <code class="directive"><a href="../mod/mod_authz_core.html#requireany"><RequireAny></a></code>,
+ La configuración también tiene control sobre cuándo se llaman a los métodos
+ de autorización y qué criterios determinan cuándo se concede el acceso.
+ Vease
+ <a href="../mod/mod_authz_core.html#logic">Contenedores de autorización</a>
+ Para un ejemplo de cómo pueden ser utilizados para expresar una lógica
+ más compleja de autorización.
+ </p>
+
+ <p>
+ Por defecto todas las directivas
+ <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>
+ son manejadas como si estuvieran contenidas en una directiva
+ <code class="directive"><a href="../mod/mod_authz_core.html#requireany"><RequireAny></a></code>.
+ En otras palabras, Si alguno de los métodos de autorización
+ especificados tiene éxito, se concede la autorización.
+ </p>
+
+
+
+ <h3><a name="reqaccessctrl" id="reqaccessctrl">Uso de los proveedores de autorización para
+ el control de acceso</a></h3>
+
+ <p>
+ La autenticación de nombre de usuario y contraseña es sólo parte
+ de toda la historia que conlleva el proceso. Frecuentemente quiere
+ dar acceso a la gente en base a algo más que lo que son.
+ Algo como de donde vienen.
+ </p>
+
+ <p>
+ Los proveedores de autorización <code>all</code>,
+ <code>env</code>, <code>host</code> y <code>ip</code>
+ te permiten denegar o permitir el acceso basándose en otros
+ criterios como el nombre de la máquina o la IP de la máquina que
+ realiza la consulta para un documento.
+ </p>
+
+ <p>
+ El uso de estos proveedores se especifica a través de la directiva
+ <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>.
+ La directiva registra los proveedores de autorización que serán llamados
+ durante la solicitud de la fase del proceso de autorización. Por ejemplo:
+ </p>
+
+ <pre class="prettyprint lang-config">Require ip <var>address</var>
+ </pre>
+
+
+ <p>
+ Donde <var>address</var> es una dirección IP (o una dirección IP parcial)
+ o bien:
+ </p>
+
+ <pre class="prettyprint lang-config">Require host <var>domain_name</var>
+ </pre>
+
+
+ <p>
+ Donde <var>domain_name</var> es el nombre completamente cualificado de un nombre
+ de dominio (FQDN) (o un nombre parcial del dominio);
+ puede proporcionar múltiples direcciones o nombres de dominio, si se desea.
+ </p>
+
+ <p>
+ Por ejemplo, si alguien envía spam a su tablón de mensajes y desea
+ mantenerlos alejados, podría hacer lo siguiente:</p>
+
+ <pre class="prettyprint lang-config"><RequireAll>
+ Require all granted
+ Require not ip 10.252.46.165
+</RequireAll></pre>
+
+
+ <p>
+ Visitantes que vengan desde esa IP no serán capaces de ver el contenido
+ que cubre esta directiva. Si, en cambio, lo que se tiene es el nombre de
+ la máquina, en vez de la dirección IP, podría usar:
+ </p>
+
+ <pre class="prettyprint lang-config"><RequireAll>
+ Require all granted
+ Require not host host.example.com
+</RequireAll></pre>
+
+
+ <p>
+ Y, si lo que se quiere es bloquear el acceso desde un determinado dominio
+ (bloquear el acceso desde el dominio entero), puede especificar parte
+ de la dirección o del propio dominio a bloquear:
+ </p>
+
+ <pre class="prettyprint lang-config"><RequireAll>
+ Require all granted
+ Require not ip 192.168.205
+ Require not host phishers.example.com moreidiots.example
+ Require not host ke
+</RequireAll></pre>
+
+
+ <p>
+ Usando <code class="directive"><a href="../mod/mod_authz_core.html#requireall"><RequireAll></a></code>
+ con múltiples directivas <code class="directive"><a href="../mod/mod_authz_core.html#require"><Require></a></code>, cada una negada con un <code>not</code>,
+ Sólo permitirá el acceso, si todas las condiciones negadas son verdaderas.
+ En otras palabras, el acceso será bloqueado, si cualquiera de las condiciones
+ negadas fallara.
+ </p>
+
+
+
+ <h3><a name="filesystem" id="filesystem">Compatibilidad de Control de Acceso con versiones
+ anteriores </a></h3>
+
+ <p>
+ Uno de los efectos secundarios de adoptar proveedores basados en
+ mecanismos de autenticación es que las directivas anteriores
+ <code class="directive"><a href="../mod/mod_access_compat.html#order">Order</a></code>,
+ <code class="directive"><a href="../mod/mod_access_compat.html#allow">Allow</a></code>,
+ <code class="directive"><a href="../mod/mod_access_compat.html#deny">Deny</a></code> y
+ <code class="directive"><a href="../mod/mod_access_compat.html#satisfy">Satisfy</a></code> ya no son necesarias.
+ Sin embargo, para proporcionar compatibilidad con configuraciones antiguas,
+ estas directivas se han movido al módulo <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code>.
+ </p>
+
+ <div class="warning"><h3>Nota:</h3>
+ <p>
+ Las directivas proporcionadas por <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code>
+ han quedado obsoletas por <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>. Mezclar
+ directivas antiguas como
+ <code class="directive"><a href="../mod/mod_access_compat.html#order">Order</a></code>,
+ <code class="directive"><a href="../mod/mod_access_compat.html#allow">Allow</a></code> ó
+ <code class="directive"><a href="../mod/mod_access_compat.html#deny">Deny</a></code> con las nuevas
+ como
+ <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>
+ es técnicamente posible pero desaconsejable. El módulo
+ <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code> se creó para soportar configuraciones
+ que contuvieran sólo directivas antiguas para facilitar la actualización
+ a la versión 2.4.
+ Por favor revise la documentación de
+ <a href="../upgrading.html">actualización</a> para más información al
+ respecto.
+ </p>
+ </div>
+
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="socache" id="socache">Cache de Autenticación</a></h2>
+ <p>
+ Puede haber momentos en que la autenticación ponga una carga
+ inaceptable en el proveedor (de autenticación) o en tu red.
+ Esto suele afectar a los usuarios de <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>
+ (u otros proveedores de terceros/personalizados).
+ Para lidiar con este problema, HTTPD 2.3/2.4 introduce un nuevo proveedor
+ de caché <code class="module"><a href="../mod/mod_authn_socache.html">mod_authn_socache</a></code> para cachear las credenciales
+ y reducir la carga en el proveedor(es) original.
+ </p>
+ <p>
+ Esto puede ofrecer un aumento de rendimiento sustancial para algunos usuarios.
+ </p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="moreinformation" id="moreinformation">Más información</a></h2>
+
+ <p>
+ También debería leer la documentación para
+ <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> y <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>
+ la cuál contiene más información de como funciona todo esto.
+ La directiva <code class="directive"><a href="../mod/mod_authn_core.html#authnprovideralias"><AuthnProviderAlias></a></code> puede también ayudar
+ a la hora de simplificar ciertas configuraciones de autenticación.
+ </p>
+
+ <p>
+ Los diferentes algoritmos de cifrado que están soportados por Apache
+ para la autenticación se explican en
+ <a href="../misc/password_encryptions.html">Cifrado de Contraseñas</a>.
+ </p>
+
+ <p>
+ Y tal vez quiera ojear la documentación de "how to"
+ <a href="access.html">Control de Acceso</a> donde se mencionan temas
+ relacionados.</p>
+
+</div></div>
+<div class="bottomlang">
+<p><span>Idiomas disponibles: </span><a href="../en/howto/auth.html" hreflang="en" rel="alternate" title="English"> en </a> |
+<a href="../es/howto/auth.html" title="Español"> es </a> |
+<a href="../fr/howto/auth.html" hreflang="fr" rel="alternate" title="Français"> fr </a> |
+<a href="../ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
+<a href="../ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
+<a href="../tr/howto/auth.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
+</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comentarios</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
+<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/auth.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer">
+<p class="apache">Copyright 2017 The Apache Software Foundation.<br />Licencia bajo los términos de <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
+<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script>
+</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/auth.xml.es b/docs/manual/howto/auth.xml.es new file mode 100644 index 0000000000..4d6e1c93ff --- /dev/null +++ b/docs/manual/howto/auth.xml.es @@ -0,0 +1,682 @@ +<?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: 1738542 --> +<!-- Translated by: Luis Gil de Bernabé Pfeiffer lgilbernabe [AT] 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="auth.xml.meta"> +<parentdocument href="./">How-To / Tutoriales</parentdocument> + +<title>Autenticación y Autorización</title> + +<summary> + <p>Autenticación es cualquier proceso por el cuál se verifica que uno es + quien dice ser. Autorización es cualquier proceso en el cuál cualquiera + está permitido a estar donde se quiera, o tener información la cuál se + quiera tener. + </p> + + <p>Para información de control de acceso de forma genérica visite<a href="access.html">How to de Control de Acceso</a>.</p> +</summary> + +<section id="related"><title>Módulos y Directivas Relacionados</title> + +<p>Hay tres tipos de módulos involucrados en los procesos de la autenticación + y autorización. Normalmente deberás escoger al menos un módulo de cada grupo.</p> + +<ul> + <li>Modos de Autenticación (consulte la directiva + <directive module="mod_authn_core">AuthType</directive> ) + <ul> + <li><module>mod_auth_basic</module></li> + <li><module>mod_auth_digest</module></li> + </ul> + </li> + <li>Proveedor de Autenticación (consulte la directiva + <directive module="mod_auth_basic">AuthBasicProvider</directive> y + <directive module="mod_auth_digest">AuthDigestProvider</directive>) + + <ul> + <li><module>mod_authn_anon</module></li> + <li><module>mod_authn_dbd</module></li> + <li><module>mod_authn_dbm</module></li> + <li><module>mod_authn_file</module></li> + <li><module>mod_authnz_ldap</module></li> + <li><module>mod_authn_socache</module></li> + </ul> + </li> + <li>Autorización (consulte la directiva + <directive module="mod_authz_core">Require</directive>) + <ul> + <li><module>mod_authnz_ldap</module></li> + <li><module>mod_authz_dbd</module></li> + <li><module>mod_authz_dbm</module></li> + <li><module>mod_authz_groupfile</module></li> + <li><module>mod_authz_host</module></li> + <li><module>mod_authz_owner</module></li> + <li><module>mod_authz_user</module></li> + </ul> + </li> +</ul> + + <p>A parte de éstos módulos, también están + <module>mod_authn_core</module> y + <module>mod_authz_core</module>. Éstos módulos implementan las directivas + esenciales que son el centro de todos los módulos de autenticación.</p> + + <p>El módulo <module>mod_authnz_ldap</module> es tanto un proveedor de + autenticación como de autorización. El módulo + <module>mod_authz_host</module> proporciona autorización y control de acceso + basado en el nombre del Host, la dirección IP o características de la propia + petición, pero no es parte del sistema proveedor de + autenticación. Para tener compatibilidad inversa con el mod_access, + hay un nuevo modulo llamado <module>mod_access_compat</module>.</p> + + <p>También puedes mirar el how-to de <a + href="access.html">Control de Acceso </a>, donde se plantean varias formas del control de acceso al servidor.</p> + +</section> + +<section id="introduction"><title>Introducción</title> + <p>Si se tiene información en nuestra página web que sea información + sensible o pensada para un grupo reducido de usuarios/personas, + las técnicas que se describen en este manual, le servirán + de ayuda para asegurarse de que las personas que ven esas páginas sean + las personas que uno quiere.</p> + + <p>Este artículo cubre la parte "estándar" de cómo proteger partes de un + sitio web que muchos usarán.</p> + + <note><title>Nota:</title> + <p>Si de verdad es necesario que tus datos estén en un sitio seguro, + considera usar <module>mod_ssl</module> como método de autenticación adicional a cualquier forma de autenticación.</p> + </note> +</section> + +<section id="theprerequisites"><title>Los Prerequisitos</title> + <p>Las directivas que se usan en este artículo necesitaran ponerse ya sea + en el fichero de configuración principal del servidor ( típicamente en + la sección + <directive module="core" type="section">Directory</directive> de httpd.conf ), o + en cada uno de los ficheros de configuraciones del propio directorio + (los archivos <code>.htaccess</code>).</p> + + <p>Si planea usar los ficheros <code>.htaccess</code> , necesitarás + tener en la configuración global del servidor, una configuración que permita + poner directivas de autenticación en estos ficheros. Esto se hace con la + directiva <directive module="core">AllowOverride</directive>, la cual especifica + que directivas, en su caso, pueden ser puestas en cada fichero de configuración + por directorio.</p> + + <p>Ya que estamos hablando aquí de autenticación, necesitarás una directiva + <directive module="core">AllowOverride</directive> como la siguiente: + </p> + + <highlight language="config"> +AllowOverride AuthConfig + </highlight> + + <p>O, si solo se van a poner las directivas directamente en la configuración + principal del servidor, deberás tener, claro está, permisos de escritura + en el archivo. </p> + + <p>Y necesitarás saber un poco de como está estructurado el árbol de + directorios de tu servidor, para poder saber donde se encuentran algunos + archivos. Esto no debería ser una tarea difícil, aún así intentaremos + dejarlo claro llegado el momento de comentar dicho aspecto.</p> + + <p>También deberás de asegurarte de que los módulos + <module>mod_authn_core</module> y <module>mod_authz_core</module> + han sido incorporados, o añadidos a la hora de compilar en tu binario httpd o + cargados mediante el archivo de configuración <code>httpd.conf</code>. Estos + dos módulos proporcionan directivas básicas y funcionalidades que son críticas + para la configuración y uso de autenticación y autorización en el servidor web.</p> +</section> + +<section id="gettingitworking"><title>Conseguir que funcione</title> + <p>Aquí está lo básico de cómo proteger con contraseña un directorio en tu + servidor.</p> + + <p>Primero, necesitarás crear un fichero de contraseña. Dependiendo de que + proveedor de autenticación se haya elegido, se hará de una forma u otra. Para empezar, + usaremos un fichero de contraseña de tipo texto.</p> + + <p>Este fichero deberá estar en un sitio que no se pueda tener acceso desde + la web. Esto también implica que nadie pueda descargarse el fichero de + contraseñas. Por ejemplo, si tus documentos están guardados fuera de + <code>/usr/local/apache/htdocs</code>, querrás poner tu archivo de contraseñas en + <code>/usr/local/apache/passwd</code>.</p> + + <p>Para crear el fichero de contraseñas, usa la utilidad + <program>htpasswd</program> que viene con Apache. Esta herramienta se + encuentra en el directorio <code>/bin</code> en donde sea que se ha + instalado el Apache. Si ha instalado Apache desde un paquete de terceros, + puede ser que se encuentre en su ruta de ejecución.</p> + + <p>Para crear el fichero, escribiremos:</p> + + <example> + htpasswd -c /usr/local/apache/passwd/passwords rbowen + </example> + + <p><program>htpasswd</program> te preguntará por una contraseña, y después + te pedirá que la vuelvas a escribir para confirmarla:</p> + + <example> + $ htpasswd -c /usr/local/apache/passwd/passwords rbowen<br /> + New password: mypassword<br /> + Re-type new password: mypassword<br /> + Adding password for user rbowen + </example> + + <p>Si <program>htpasswd</program> no está en tu variable de entorno "path" del + sistema, por supuesto deberás escribir la ruta absoluta del ejecutable para + poder hacer que se ejecute. En una instalación por defecto, está en: + <code>/usr/local/apache2/bin/htpasswd</code></p> + + <p>Lo próximo que necesitas, será configurar el servidor para que pida una + contraseña y así decirle al servidor que usuarios están autorizados a acceder. + Puedes hacer esto ya sea editando el fichero <code>httpd.conf</code> + de configuración o usando in fichero <code>.htaccess</code>. Por ejemplo, + si quieres proteger el directorio + <code>/usr/local/apache/htdocs/secret</code>, puedes usar las siguientes + directivas, ya sea en el fichero <code>.htaccess</code> localizado en + following directives, either placed in the file + <code>/usr/local/apache/htdocs/secret/.htaccess</code>, o + en la configuración global del servidor <code>httpd.conf</code> dentro de la + sección <Directory + "/usr/local/apache/htdocs/secret"> , como se muestra a continuación:</p> + + <highlight language="config"> +<Directory "/usr/local/apache/htdocs/secret"> +AuthType Basic +AuthName "Restricted Files" +# (Following line optional) +AuthBasicProvider file +AuthUserFile "/usr/local/apache/passwd/passwords" +Require user rbowen +</Directory> + </highlight> + + <p>Vamos a explicar cada una de las directivas individualmente. + La directiva <directive + module="mod_authn_core">AuthType</directive> selecciona el método + que se usa para autenticar al usuario. El método más común es + <code>Basic</code>, y éste es el método que implementa + <module>mod_auth_basic</module>. Es muy importante ser consciente, + de que la autenticación básica, envía las contraseñas desde el cliente + al servidor sin cifrar. + Este método por tanto, no debe ser utilizado para proteger datos muy sensibles, + a no ser que, este método de autenticación básica, sea acompañado del módulo + <module>mod_ssl</module>. + Apache soporta otro método más de autenticación que es del tipo + <code>AuthType Digest</code>. Este método, es implementado por el módulo <module + >mod_auth_digest</module> y con el se pretendía crear una autenticación más + segura. Este ya no es el caso, ya que la conexión deberá realizarse con <module + >mod_ssl</module> en su lugar. + </p> + + <p>La directiva <directive module="mod_authn_core">AuthName</directive> + establece el <dfn>Realm</dfn> para ser usado en la autenticación. El + <dfn>Realm</dfn> tiene dos funciones principales. + La primera, el cliente presenta a menudo esta información al usuario como + parte del cuadro de diálogo de contraseña. La segunda, que es utilizado por + el cliente para determinar qué contraseña enviar a para una determinada zona + de autenticación.</p> + + <p>Así que, por ejemple, una vez que el cliente se ha autenticado en el área de + los <code>"Ficheros Restringidos"</code>, entonces re-intentará automáticamente + la misma contraseña para cualquier área en el mismo servidor que es marcado + con el Realm de <code>"Ficheros Restringidos"</code> + Por lo tanto, puedes prevenir que a un usuario se le pida mas de una vez por su + contraseña, compartiendo así varias áreas restringidas el mismo Realm + Por supuesto, por razones de seguridad, el cliente pedirá siempre por una contraseña, + siempre y cuando el nombre del servidor cambie. + </p> + + <p>La directiva <directive + module="mod_auth_basic">AuthBasicProvider</directive> es, + en este caso, opcional, ya que <code>file</code> es el valor por defecto + para esta directiva. Deberás usar esta directiva si estas usando otro medio + diferente para la autenticación, como por ejemplo + <module>mod_authn_dbm</module> o <module>mod_authn_dbd</module>.</p> + + <p>La directiva <directive module="mod_authn_file">AuthUserFile</directive> + establece el path al fichero de contraseñas que acabamos de crear con el + comando <program>htpasswd</program>. Si tiene un número muy grande de usuarios, + puede ser realmente lento el buscar el usuario en ese fichero de texto plano + para autenticar a los usuarios en cada petición. + Apache también tiene la habilidad de almacenar información de usuarios en + unos ficheros de rápido acceso a modo de base de datos. + El módulo <module>mod_authn_dbm</module> proporciona la directiva <directive + module="mod_authn_dbm">AuthDBMUserFile</directive>. Estos ficheros pueden ser creados y + manipulados con el programa <program>dbmmanage</program> y <program>htdbm</program>. + Muchos otros métodos de autenticación así como otras opciones, están disponibles en + módulos de terceros + <a href="http://modules.apache.org/">Base de datos de Módulos disponibles</a>.</p> + + <p>Finalmente, la directiva <directive module="mod_authz_core">Require</directive> + proporciona la parte del proceso de autorización estableciendo el o los + usuarios que se les está permitido acceder a una región del servidor. + En la próxima sección, discutiremos las diferentes vías de utilizar la + directiva <directive module="mod_authz_core">Require</directive>.</p> +</section> + +<section id="lettingmorethanonepersonin"><title>Dejar que más de una persona + entre</title> + <p>Las directivas mencionadas arriba sólo permiten a una persona + (especialmente con un usuario que en ej ejemplo es <code>rbowen</code>) + en el directorio. En la mayoría de los casos, se querrá permitir el acceso + a más de una persona. Aquí es donde la directiva + <directive module="mod_authz_groupfile">AuthGroupFile</directive> entra en juego.</p> + + <p>Si lo que se desea es permitir a más de una persona el acceso, necesitarás + crear un archivo de grupo que asocie los nombres de grupos con el de personas + para permitirles el acceso. El formato de este fichero es bastante sencillo, + y puedes crearlo con tu editor de texto favorito. El contenido del fichero + se parecerá a:</p> + + <example> + GroupName: rbowen dpitts sungo rshersey + </example> + + <p>Básicamente eso es la lista de miembros los cuales están en un mismo fichero + de grupo en una sola linea separados por espacios.</p> + + <p>Para añadir un usuario a tu fichero de contraseñas existente teclee:</p> + + <example> + htpasswd /usr/local/apache/passwd/passwords dpitts + </example> + + <p>Te responderá lo mismo que anteriormente, pero se añadirá al fichero + existente en vez de crear uno nuevo. (Es decir el flag <code>-c</code> será + el que haga que se genere un nuevo + fichero de contraseñas).</p> + + <p>Ahora, tendrá que modificar su fichero <code>.htaccess</code> para que sea + parecido a lo siguiente:</p> + + <highlight language="config"> +AuthType Basic +AuthName "By Invitation Only" +# Optional line: +AuthBasicProvider file +AuthUserFile "/usr/local/apache/passwd/passwords" +AuthGroupFile "/usr/local/apache/passwd/groups" +Require group GroupName + </highlight> + + <p>Ahora, cualquiera que esté listado en el grupo <code>GroupName</code>, + y tiene una entrada en el fichero de <code>contraseñas</code>, se les + permitirá el acceso, si introducen su contraseña correctamente.</p> + + <p>Hay otra manera de dejar entrar a varios usuarios, que es menos específica. + En lugar de crear un archivo de grupo, sólo puede utilizar la siguiente + directiva:</p> + + <highlight language="config"> +Require valid-user + </highlight> + + <p>Usando ésto en vez de la línea <code>Require user rbowen</code> + permitirá a cualquier persona acceder, la cuál aparece en el archivo de + contraseñas, y que introduzca correctamente su contraseña. Incluso puede + emular el comportamiento del grupo aquí, sólo manteniendo un fichero de + contraseñas independiente para cada grupo. La ventaja de este enfoque es + que Apache sólo tiene que comprobar un archivo, en lugar de dos. La desventaja + es que se tiene que mantener un montón de ficheros de contraseña de grupo, y + recuerde hacer referencia al fichero correcto en la directiva + <directive module="mod_authn_file">AuthUserFile</directive>.</p> +</section> + +<section id="possibleproblems"><title>Posibles Problemas</title> + <p>Debido a la forma en que se especifica la autenticación básica, + su nombre de usuario y la contraseña deben ser verificados cada vez + que se solicita un documento desde el servidor. Esto es, incluso si + se vuelve a cargar la misma página, y para cada imagen de la página (si + provienen de un directorio protegido). Como se puede imaginar, esto + ralentiza las cosas un poco. La cantidad que ralentiza las cosas es + proporcional al tamaño del archivo de contraseñas, porque tiene que + abrir ese archivo, recorrer lista de usuarios hasta que llega a su nombre. + Y tiene que hacer esto cada vez que se carga una página.</p> + + <p>Una consecuencia de esto, es que hay un limite práctico de cuantos + usuarios puedes introducir en el fichero de contraseñas. Este límite + variará dependiendo de la máquina en la que tengas el servidor, + pero puedes notar ralentizaciones en cuanto se metan cientos de entradas, + y por lo tanto consideraremos entonces otro método de autenticación + en ese momento. + </p> +</section> + +<section id="dbmdbd"><title>Método alternativo de almacenamiento de las + contraseñas</title> + + <p>Debido a que el almacenamiento de las contraseñas en texto plano tiene + el problema mencionado anteriormente, puede que se prefiera guardar + las contraseñas en otro lugar como por ejemplo una base de datos. + </p> + + <p>Los módulos <module>mod_authn_dbm</module> y <module>mod_authn_dbd</module> son + dos módulos que hacen esto posible. En vez de seleccionar la directiva de fichero + <code><directive module="mod_auth_basic">AuthBasicProvider</directive> </code>, en su lugar + se puede elegir <code>dbm</code> o <code>dbd</code> como formato de almacenamiento.</p> + + <p>Para seleccionar los ficheros de tipo dbm en vez de texto plano, podremos hacer algo parecido a lo siguiente:</p> + + <highlight language="config"> +<Directory "/www/docs/private"> + AuthName "Private" + AuthType Basic + AuthBasicProvider dbm + AuthDBMUserFile "/www/passwords/passwd.dbm" + Require valid-user +</Directory> + </highlight> + + <p>Hay otras opciones disponibles. Consulta la documentación de + <module>mod_authn_dbm</module> para más detalles.</p> +</section> + +<section id="multprovider"><title>Uso de múltiples proveedores</title> + + <p>Con la introducción de la nueva autenticación basada en un proveedor y + una arquitectura de autorización, ya no estaremos restringidos a un único + método de autenticación o autorización. De hecho, cualquier número de + los proveedores pueden ser mezclados y emparejados para ofrecerle + exactamente el esquema que se adapte a sus necesidades. + En el siguiente ejemplo, veremos como ambos proveedores tanto el fichero + como el LDAP son usados en la autenticación: + </p> + + <highlight language="config"> +<Directory "/www/docs/private"> + AuthName "Private" + AuthType Basic + AuthBasicProvider file ldap + AuthUserFile "/usr/local/apache/passwd/passwords" + AuthLDAPURL ldap://ldaphost/o=yourorg + Require valid-user +</Directory> + </highlight> + + <p>En este ejemplo el fichero, que actúa como proveedor, intentará autenticar + primero al usuario. Si no puede autenticar al usuario, el proveedor del LDAP + será llamado para que realice la autenticación. + Esto permite al ámbito de autenticación ser amplio, si su organización + implementa más de un tipo de almacén de autenticación. + Otros escenarios de autenticación y autorización pueden incluir la + mezcla de un tipo de autenticación con un tipo diferente de autorización. + Por ejemplo, autenticar contra un fichero de contraseñas pero autorizando + dicho acceso mediante el directorio del LDAP.</p> + + <p>Así como múltiples métodos y proveedores de autenticación pueden + ser implementados, también pueden usarse múltiples formas de + autorización. + En este ejemplo ambos ficheros de autorización de grupo así como + autorización de grupo mediante LDAP va a ser usado: + </p> + + <highlight language="config"> +<Directory "/www/docs/private"> + AuthName "Private" + AuthType Basic + AuthBasicProvider file + AuthUserFile "/usr/local/apache/passwd/passwords" + AuthLDAPURL ldap://ldaphost/o=yourorg + AuthGroupFile "/usr/local/apache/passwd/groups" + Require group GroupName + Require ldap-group cn=mygroup,o=yourorg +</Directory> + </highlight> + + <p>Para llevar la autorización un poco más lejos, las directivas + de autorización de contenedores tales como + <directive module="mod_authz_core" type="section">RequireAll</directive> + and + <directive module="mod_authz_core" type="section">RequireAny</directive> + nos permiten aplicar una lógica de en qué orden se manejará la autorización dependiendo + de la configuración y controlada a través de ella. + Mire también <a href="../mod/mod_authz_core.html#logic">Contenedores de + Autorización</a> para ejemplos de cómo pueden ser aplicados.</p> + +</section> + +<section id="beyond"><title>Más allá de la Autorización</title> + + <p>El modo en que la autorización puede ser aplicada es ahora mucho más flexible + que us solo chequeo contra un almacén de datos (contraseñas). Ordenando la + lógica y escoger la forma en que la autorización es realizada, ahora es posible + </p> + + <section id="authandororder"><title>Aplicando la lógica y ordenación</title> + <p>Controlar el cómo y en qué orden se va a aplicar la autorización ha + sido un misterio en el pasado. En Apache 2.2 un proveedor del + mecanismo de autenticación fue introducido para disociar el proceso actual + de autenticación y soportar funcionalidad. + Uno de los beneficios secundarios fue que los proveedores de autenticación + podían ser configurados y llamados en un orden especifico que no dependieran + en el orden de carga del propio modulo. + Este proveedor de dicho mecanismo, ha sido introducido en la autorización + también. Lo que esto significa es que la directiva + <directive module="mod_authz_core">Require</directive> + no sólo especifica que método de autorización deberá ser usado, si no + también especifica el orden en que van a ser llamados. Múltiples + métodos de autorización son llamados en el mismo orden en que la directiva + <directive module="mod_authz_core">Require</directive> aparece en la + configuración. + </p> + + <p> + Con la Introducción del contenedor de directivas de autorización tales como + <directive module="mod_authz_core" type="section">RequireAll</directive> + y + <directive module="mod_authz_core" type="section">RequireAny</directive>, + La configuración también tiene control sobre cuándo se llaman a los métodos + de autorización y qué criterios determinan cuándo se concede el acceso. + Vease + <a href="../mod/mod_authz_core.html#logic">Contenedores de autorización</a> + Para un ejemplo de cómo pueden ser utilizados para expresar una lógica + más compleja de autorización. + </p> + + <p> + Por defecto todas las directivas + <directive module="mod_authz_core">Require</directive> + son manejadas como si estuvieran contenidas en una directiva + <directive module="mod_authz_core" type="section">RequireAny</directive>. + En otras palabras, Si alguno de los métodos de autorización + especificados tiene éxito, se concede la autorización. + </p> + + </section> + + <section id="reqaccessctrl"><title>Uso de los proveedores de autorización para + el control de acceso</title> + + <p> + La autenticación de nombre de usuario y contraseña es sólo parte + de toda la historia que conlleva el proceso. Frecuentemente quiere + dar acceso a la gente en base a algo más que lo que son. + Algo como de donde vienen. + </p> + + <p> + Los proveedores de autorización <code>all</code>, + <code>env</code>, <code>host</code> y <code>ip</code> + te permiten denegar o permitir el acceso basándose en otros + criterios como el nombre de la máquina o la IP de la máquina que + realiza la consulta para un documento. + </p> + + <p> + El uso de estos proveedores se especifica a través de la directiva + <directive module="mod_authz_core">Require</directive>. + La directiva registra los proveedores de autorización que serán llamados + durante la solicitud de la fase del proceso de autorización. Por ejemplo: + </p> + + <highlight language="config"> +Require ip <var>address</var> + </highlight> + + <p> + Donde <var>address</var> es una dirección IP (o una dirección IP parcial) + o bien: + </p> + + <highlight language="config"> +Require host <var>domain_name</var> + </highlight> + + <p> + Donde <var>domain_name</var> es el nombre completamente cualificado de un nombre + de dominio (FQDN) (o un nombre parcial del dominio); + puede proporcionar múltiples direcciones o nombres de dominio, si se desea. + </p> + + <p> + Por ejemplo, si alguien envía spam a su tablón de mensajes y desea + mantenerlos alejados, podría hacer lo siguiente:</p> + + <highlight language="config"> +<RequireAll> + Require all granted + Require not ip 10.252.46.165 +</RequireAll> + </highlight> + + <p> + Visitantes que vengan desde esa IP no serán capaces de ver el contenido + que cubre esta directiva. Si, en cambio, lo que se tiene es el nombre de + la máquina, en vez de la dirección IP, podría usar: + </p> + + <highlight language="config"> +<RequireAll> + Require all granted + Require not host host.example.com +</RequireAll> + </highlight> + + <p> + Y, si lo que se quiere es bloquear el acceso desde un determinado dominio + (bloquear el acceso desde el dominio entero), puede especificar parte + de la dirección o del propio dominio a bloquear: + </p> + + <highlight language="config"> +<RequireAll> + Require all granted + Require not ip 192.168.205 + Require not host phishers.example.com moreidiots.example + Require not host ke +</RequireAll> + </highlight> + + <p> + Usando <directive module="mod_authz_core" type="section">RequireAll</directive> + con múltiples directivas <directive module="mod_authz_core" + type="section">Require</directive>, cada una negada con un <code>not</code>, + Sólo permitirá el acceso, si todas las condiciones negadas son verdaderas. + En otras palabras, el acceso será bloqueado, si cualquiera de las condiciones + negadas fallara. + </p> + + </section> + + <section id="filesystem"><title>Compatibilidad de Control de Acceso con versiones + anteriores </title> + + <p> + Uno de los efectos secundarios de adoptar proveedores basados en + mecanismos de autenticación es que las directivas anteriores + <directive module="mod_access_compat">Order</directive>, + <directive module="mod_access_compat">Allow</directive>, + <directive module="mod_access_compat">Deny</directive> y + <directive module="mod_access_compat">Satisfy</directive> ya no son necesarias. + Sin embargo, para proporcionar compatibilidad con configuraciones antiguas, + estas directivas se han movido al módulo <module>mod_access_compat</module>. + </p> + + <note type="warning"><title>Nota:</title> + <p> + Las directivas proporcionadas por <module>mod_access_compat</module> + han quedado obsoletas por <module>mod_authz_host</module>. Mezclar + directivas antiguas como + <directive module="mod_access_compat">Order</directive>, + <directive module="mod_access_compat">Allow</directive> ó + <directive module="mod_access_compat">Deny</directive> con las nuevas + como + <directive module="mod_authz_core">Require</directive> + es técnicamente posible pero desaconsejable. El módulo + <module>mod_access_compat</module> se creó para soportar configuraciones + que contuvieran sólo directivas antiguas para facilitar la actualización + a la versión 2.4. + Por favor revise la documentación de + <a href="../upgrading.html">actualización</a> para más información al + respecto. + </p> + </note> + </section> + + </section> + +<section id="socache"><title>Cache de Autenticación</title> + <p> + Puede haber momentos en que la autenticación ponga una carga + inaceptable en el proveedor (de autenticación) o en tu red. + Esto suele afectar a los usuarios de <module>mod_authn_dbd</module> + (u otros proveedores de terceros/personalizados). + Para lidiar con este problema, HTTPD 2.3/2.4 introduce un nuevo proveedor + de caché <module>mod_authn_socache</module> para cachear las credenciales + y reducir la carga en el proveedor(es) original. + </p> + <p> + Esto puede ofrecer un aumento de rendimiento sustancial para algunos usuarios. + </p> +</section> + +<section id="moreinformation"><title>Más información</title> + + <p> + También debería leer la documentación para + <module>mod_auth_basic</module> y <module>mod_authz_host</module> + la cuál contiene más información de como funciona todo esto. + La directiva <directive type="section" + module="mod_authn_core">AuthnProviderAlias</directive> puede también ayudar + a la hora de simplificar ciertas configuraciones de autenticación. + </p> + + <p> + Los diferentes algoritmos de cifrado que están soportados por Apache + para la autenticación se explican en + <a href="../misc/password_encryptions.html">Cifrado de Contraseñas</a>. + </p> + + <p> + Y tal vez quiera ojear la documentación de "how to" + <a href="access.html">Control de Acceso</a> donde se mencionan temas + relacionados.</p> + +</section> + +</manualpage> diff --git a/docs/manual/howto/auth.xml.meta b/docs/manual/howto/auth.xml.meta index 250ddc5cad..1ec45a49e7 100644 --- a/docs/manual/howto/auth.xml.meta +++ b/docs/manual/howto/auth.xml.meta @@ -8,6 +8,7 @@ <variants> <variant>en</variant> + <variant>es</variant> <variant>fr</variant> <variant outdated="yes">ja</variant> <variant outdated="yes">ko</variant> diff --git a/docs/manual/howto/cgi.html b/docs/manual/howto/cgi.html index 5a965e3380..4f069faacf 100644 --- a/docs/manual/howto/cgi.html +++ b/docs/manual/howto/cgi.html @@ -4,6 +4,10 @@ URI: cgi.html.en Content-Language: en Content-type: text/html; charset=ISO-8859-1 +URI: cgi.html.es +Content-Language: es +Content-type: text/html; charset=ISO-8859-1 + URI: cgi.html.fr Content-Language: fr Content-type: text/html; charset=ISO-8859-1 diff --git a/docs/manual/howto/cgi.html.es b/docs/manual/howto/cgi.html.es new file mode 100644 index 0000000000..5ead2d908c --- /dev/null +++ b/docs/manual/howto/cgi.html.es @@ -0,0 +1,615 @@ +<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head>
+<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" />
+<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + -->
+<title>Tutorial de Apache: Contenido Dinámico con CGI - Servidor Apache HTTP Versión 2.4</title>
+<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
+<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
+<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
+<script src="../style/scripts/prettify.min.js" type="text/javascript">
+</script>
+
+<link href="../images/favicon.ico" rel="shortcut icon" /></head>
+<body id="manual-page"><div id="page-header">
+<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p>
+<p class="apache">Versión 2.4 del Servidor HTTP Apache</p>
+<img alt="" src="../images/feather.png" /></div>
+<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Servidor HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentación</a> > <a href="../">Versión 2.4</a> > <a href="./">How-To / Tutoriales</a></div><div id="page-content"><div id="preamble"><h1>Tutorial de Apache: Contenido Dinámico con CGI</h1>
+<div class="toplang">
+<p><span>Idiomas disponibles: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> |
+<a href="../es/howto/cgi.html" title="Español"> es </a> |
+<a href="../fr/howto/cgi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> |
+<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
+<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>
+</div>
+</div>
+<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#intro">Introducción</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#configuring">Configurando Apache para permitir CGI</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#writing">Escribiendo un programa CGI</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">¡Pero todavía no funciona!</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#behindscenes">¿Qué ocurre entre bastidores?</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#libraries">Módulos/librerías CGI</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#moreinfo">Para más información</a></li>
+</ul><h3>Consulte también</h3><ul class="seealso"><li><a href="#comments_section">Comentarios</a></li></ul></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="intro" id="intro">Introducción</a></h2>
+
+ <table class="related"><tr><th>Módulos Relacionados</th><th>Directivas Relacionadas</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li></ul></td></tr></table>
+
+ <p>CGI (Common Gateway Interface) es un método por el cual
+ un servidor web puede interactuar con programas externos de
+ generación de contenido, a ellos nos referimos comúnmente como
+ programas CGI o scripts CGI. Es el método más común y sencillo de
+ mostrar contenido dinámico en su sitio web. Este documento es una
+ introducción para configurar CGI en su servidor web Apache, y de
+ iniciación para escribir programas CGI.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="configuring" id="configuring">Configurando Apache para permitir CGI</a></h2>
+
+
+ <p>Para conseguir que sus programas CGI funcionen correctamente,
+ deberá configurar Apache para que permita la ejecución de CGI. Hay
+ distintas formas de hacerlo.</p>
+
+ <div class="warning">Nota: Si Apache ha sido compilado con soporte
+ de módulos compartidos, necesitará que el módulo de CGI esté cargado;
+ en su <code>httpd.conf</code> tiene que asegurarse de que la directiva
+ <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code>
+ no ha sido comentada. Una directiva configurada correctamente sería así:
+
+ <pre class="prettyprint lang-config">LoadModule cgid_module modules/mod_cgid.so</pre>
+
+
+ En Windows, o si usa un mpm que no es multihilo, como prefork, una
+ directiva configurada correctamente podría definirse así:
+
+ <pre class="prettyprint lang-config">LoadModule cgi_module modules/mod_cgi.so</pre>
+</div>
+
+ <h3><a name="scriptalias" id="scriptalias">ScriptAlias</a></h3>
+
+
+ <p>La directiva
+ <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
+ indica a Apache que un directorio se ha configurado específicamente
+ para programas CGI. Apache asumirá que cada fichero en este
+ directorio es un programa CGI, e intentará ejecutarlos cuando un
+ cliente solicita este recurso.</p>
+
+ <p>La directiva
+ <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> se puede
+ definir así:</p>
+
+ <pre class="prettyprint lang-config">ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"</pre>
+
+
+ <p>El ejemplo que se muestra es de un archivo de configuración
+ <code>httpd.conf</code> por defecto si usted instaló Apache
+ en la ubicación por defecto. La directiva
+ <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> es muy
+ parecida a la directiva <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>,
+ ésta define un prefijo de URL que se enlaza a un directorio
+ en particular. <code class="directive">Alias</code> y
+ <code class="directive">ScriptAlias</code> se usan generalmente para
+ directorios que se encuentran fuera del directorio
+ <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>. La diferencia
+ entre <code class="directive">Alias</code> y <code class="directive">ScriptAlias</code>
+ es que en <code class="directive">ScriptAlias</code> cualquier elemento
+ debajo de ese prefijo de URL será considerado un programa CGI. Así,
+ el ejemplo de más arriba le indica a Apache que
+ cualquier solicitud para un recurso que comience con
+ <code>/cgi-bin/</code> debería servirse desde el directorio
+ <code>/usr/local/apache2/cgi-bin/</code>, y debería tratarse como un
+ programa CGI.</p>
+
+ <p>Por ejemplo, si se solicita la URL
+ <code>http://www.example.com/cgi-bin/test.pl</code>,
+ Apache intentará ejecutar el archivo
+ <code>/usr/local/apache2/cgi-bin/test.pl</code> y dar
+ el resultado. Por supuesto el archivo debe existir y ser ejecutable,
+ y dar el resultado de una manera específica o Apache devolverá
+ un mensaje de error.</p>
+
+
+ <h3><a name="nonscriptalias" id="nonscriptalias">CGI fuera de directorios ScriptAlias</a></h3>
+
+
+ <p>Los programas CGI habitualmente se restringen a los directorios de
+ <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> por razones de
+ seguridad. De esta manera, los administradores pueden controlar de una
+ manera más segura quien puede ejecutar programas CGI. Aun así, si no
+ se toman suficientes precauciones, no hay ninguna razón por la que
+ programas CGI no se puedan ejecutar desde directorios seleccionados de
+ manera arbitraria. Por ejemplo, quizás quiera permitir que usuarios del
+ sistema tengan contenido web en sus directorios home con la directiva
+ <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>. Si quieren
+ tener sus propios programas CGI, pero no tienen acceso al directorio
+ principal <code>cgi-bin</code>, necesitarán ser capaces de
+ ejecutar sus scripts CGI en algún otro sitio.</p>
+
+ <p>Hay dos pasos a seguir para permitir la ejecución CGI en directorios
+ seleccionados de manera arbitraria. Primero, el handler
+ <code>cgi-script</code> debe estar activado usando la directiva
+ <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> o la directiva
+ <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code>. Segundo, el parámetro
+ <code>ExecCGI</code> debe estar definido en la directiva
+ <code class="directive"><a href="../mod/core.html#options">Options</a></code>.</p>
+
+
+ <h3><a name="options" id="options">Usando Options de manera explícita para permitir ejecución de
+ CGI</a></h3>
+
+
+ <p>Puede usar la directiva
+ <code class="directive"><a href="../mod/core.html#options">Options</a></code>, en el archivo de
+ configuración principal para especificar que se permite la ejecución
+ de CGI en un directorio en particular:</p>
+
+ <pre class="prettyprint lang-config"><Directory "/usr/local/apache2/htdocs/somedir">
+ Options +ExecCGI
+</Directory></pre>
+
+
+ <p>Esta directiva de aquí arriba le indica a Apache que debe
+ permitir la ejecución de archivos CGI. También necesitará indicarle
+ al servidor que los archivos son archivos CGI. La directiva
+ <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> le indica al
+ servidor que debe tratar a todos los archivos con la extensión
+ <code>cgi</code> o <code>pl</code> como programas CGI:</p>
+
+ <pre class="prettyprint lang-config">AddHandler cgi-script .cgi .pl</pre>
+
+
+
+ <h3><a name="htaccess" id="htaccess">Ficheros .htaccess</a></h3>
+
+
+ <p>El <a href="htaccess.html">tutorial <code>.htaccess</code></a>
+ enseña como activar programas CGI si no tienes acceso a
+ <code>httpd.conf</code>.</p>
+
+
+ <h3><a name="userdir" id="userdir">Directorios de Usuario</a></h3>
+
+
+ <p>Para permitir la ejecución de programas CGI para cualquier
+ archivo que acabe en <code>.cgi</code> en directorios de usuario,
+ puedes usar la siguiente configuración:</p>
+
+ <pre class="prettyprint lang-config"><Directory "/home/*/public_html">
+ Options +ExecCGI
+ AddHandler cgi-script .cgi
+</Directory></pre>
+
+
+ <p>Si quiere designar un subdirectorio <code>cgi-bin</code> dentro
+ de un directorio de usuario en el que todos los ficheros serán
+ tratados como un programa CGI, puede usar lo siguiente:</p>
+
+ <pre class="prettyprint lang-config"><Directory "/home/*/public_html/cgi-bin">
+ Options ExecCGI
+ SetHandler cgi-script
+</Directory></pre>
+
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="writing" id="writing">Escribiendo un programa CGI</a></h2>
+
+
+ <p>Hay dos diferencias principales entre programación ``regular'' y
+ programación en CGI.</p>
+
+ <p>Primera, el resultado al completo de tu programa CGI debe estar
+ precedido de una cabecera <a class="glossarylink" href="../glossary.html#mime-type" title="ver glosario">MIME-type</a>. Esta
+ cabecera HTTP le indica al cliente que tipo de contenido está
+ recibiendo. La mayor parte de las veces, ésto será algo como:</p>
+
+ <div class="example"><p><code>
+ Content-type: text/html
+ </code></p></div>
+
+ <p>Segunda, el resultado debe estar en formato HTML, o cualquier
+ otro formato que su navegador sea capaz de mostrar. La mayor
+ parte de las veces, será HTML, pero otras escribirá un programa
+ CGI que devuelve una imagen gif, u otro contenido no-HTML.</p>
+
+ <p>Aparte de estas dos cosas, escribir un programa en CGI se
+ parecerá bastante a cualquier otro programa que vaya a escribir.
+ </p>
+
+
+ <h3><a name="firstcgi" id="firstcgi">Su primer programa CGI</a></h3>
+
+
+ <p>A continuación podrá ver un ejemplo de programa CGI que muestra
+ una línea de texto en su navegador. Escriba lo siguiente,
+ guárdelo en un archivo con el nombre <code>first.pl</code>, y
+ póngalo en su directorio <code>cgi-bin</code>.</p>
+
+ <pre class="prettyprint lang-perl">#!/usr/bin/perl
+print "Content-type: text/html\n\n";
+print "Hola, Mundo.";</pre>
+
+
+ <p>Incluso si Perl no le resulta familiar, podrá ver lo que está
+ ocurriendo aquí. La primera línea le dice a Apache (o a
+ cualquier shell en la que se esté ejecutando) que este programa
+ puede ejecutarse con el intérprete en la ubicación
+ <code>/usr/bin/perl</code>. La segunda línea imprime la
+ declaración de Content-Type que mencionamos antes, seguida de
+ dos pares de retornos de carro. Esto pone una línea en blanco
+ después de la cabecera para indicar el final de las cabeceras
+ HTTP, y el comienzo del cuerpo del contenido. La tercera
+ imprime la cadena de caracteres "Hola, Mundo.". Y ese es el
+ final del programa.</p>
+
+ <p>Si lo abre con su navegador favorito y le dice que solicite la
+ dirección</p>
+
+ <div class="example"><p><code>
+ http://www.example.com/cgi-bin/first.pl
+ </code></p></div>
+
+ <p>o donde quiera que pusiera el archivo, verá una línea
+ <code>Hola, Mundo.</code> aparecerán la ventana del navegador. No es
+ muy emocionante, pero una vez que consiga que funcione podrá hacer
+ lo mismo con casi cualquier programa.</p>
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="troubleshoot" id="troubleshoot">¡Pero todavía no funciona!</a></h2>
+
+
+ <p>Hay 4 cosas básicas que puede llegar a ver en su navegador cuando
+ intenta acceder a un programa CGI desde la web:</p>
+
+ <dl>
+ <dt>El resultado del programa CGI</dt>
+ <dd>¡Genial! Esto indica que todo funcionó correctamente. Si el
+ resultado es correcto, pero el navegador no lo procesa
+ correctamente, asegúrese de que tiene especificado
+ correctamente el <code>Content-Type</code> en su programa
+ CGI.</dd>
+
+ <dt>El código fuente de su programa CGI o un mensaje del tipo
+ "POST Method Not Allowed".</dt>
+
+ <dd>Eso significa que no ha configurado Apache de manera
+ apropiada para interpretar su programa CGI. Relea la sección
+ de <a href="#configuring">Configurando Apache</a> e intente
+ encontrar qué le falta.</dd>
+
+ <dt>Un mensaje que empieza con "Forbidden"</dt>
+ <dd>Eso significa que hay un problema de permisos. Compruebe el
+ <a href="#errorlogs">Log de Errores de Apache</a> y la
+ sección de más abajo de <a href="#permissions">Permisos de
+ Fichero</a>.</dd>
+
+ <dt>Un mensaje indicando "Internal Server Error"</dt>
+ <dd>Si comprueba el <a href="#errorlogs">Log de errores de
+ Apache</a>, probablemente encontrará que indica "Premature
+ end of script headers", posiblemente acompañado de otro
+ mensaje de error generado por su programa CGI. En este caso,
+ querrá comprobar cada una de las secciones de más adelante
+ para ver qué impide que su programa CGI genere las cabeceras
+ HTTP adecuadas.</dd>
+ </dl>
+
+ <h3><a name="permissions" id="permissions">Permisos de Fichero</a></h3>
+
+
+ <p>Recuerde que el servidor no se ejecuta con su usuario. Es decir,
+ cuando el servidor arranca, está funcionando con un usuario sin
+ privilegios, generalmente el usuario <code>nobody</code>, o
+ <code>www-data</code>, así que necesitará permisos extra para
+ ejecutar los archivos de los que usted es dueño. Generalmente,
+ el método para dar permisos suficientes para que se pueda
+ ejecutar con <code>nobody</code> es dar permisos de ejecución a
+ todo el mundo en el fichero:</p>
+
+ <div class="example"><p><code>
+ chmod a+x first.pl
+ </code></p></div>
+
+ <p>Además, si su programa lee desde o escribe a cualquier otro/s
+ archivo/s, esos archivos necesitarán tener los permisos correctos
+ para permitir esas acciones.</p>
+
+
+
+ <h3><a name="pathinformation" id="pathinformation">Información de Ruta y Entorno</a></h3>
+
+
+ <p>Cuando ejecuta un programa desde la línea de comandos, usted tiene
+ cierta información que se le pasa a la shell sin que usted se
+ percate de ello. Por ejemplo, usted tiene un <code>PATH</code>,
+ que le indica a la shell dónde debe buscar archivos a los que usted
+ hace referencia.</p>
+
+ <p>Cuando un programa se ejecuta a través del servidor web como un
+ programa CGI, puede que no tenga el mismo <code>PATH</code>.
+ Cualquier programa que invoque desde su programa CGI (como por
+ ejemplo <code>sendmail</code>) necesitará que se le indique la
+ ruta absoluta, así la shell puede encontrarlos cuando intenta
+ ejecutar su programa CGI.</p>
+
+ <p>Una manifestación común de esto es la ruta del intérprete del
+ script (a menudo <code>perl</code>) indicado en la primera línea
+ de su programa CGI, que parecerá algo como:</p>
+
+ <pre class="prettyprint lang-perl">#!/usr/bin/perl</pre>
+
+
+ <p>Asegúrese de que éste es de hecho el path de su intérprete.</p>
+ <div class="warning">
+ Cuando edita scripts CGI en Windows, los caracteres de retorno de
+ carro podrían añadirse a la línea donde se especifica el intérprete.
+ Asegúrese de que los archivos se transfieren al servidor en modo
+ ASCII. Fallar en esto puede acabar con avisos del tipo "Command not
+ found" del Sistema Operativo, debido a que éste no reconoce los
+ caracteres de final de línea interpretados como parte del nombre
+ de fichero del intérprete.
+ </div>
+
+
+ <h3><a name="missingenv" id="missingenv">Faltan Variables de Entorno</a></h3>
+
+
+ <p>Si su programa CGI depende de <a href="#env">variables de entorno</a> no estándar, necesitará
+ asegurarse de que Apache pasa esas variables.</p>
+
+ <p>Cuando no encuentra ciertas cabeceras HTTP del entorno, asegúrese
+ de que están formateadas según el
+ <a href="http://tools.ietf.org/html/rfc2616">RFC 2616</a>,
+ sección 4.2: Nombres de Cabeceras deben empezar con una letra,
+ seguida solo de letras, números o guión. Cualquier cabecera
+ que no cumpla esta regla será ignorada de manera silenciosa.</p>
+
+
+
+ <h3><a name="syntaxerrors" id="syntaxerrors">Errores de Programa</a></h3>
+
+
+ <p>La mayor parte de las veces cuando un programa CGI falla, es por un
+ problema en el programa mismo. Esto ocurre generalmente cuando se
+ maneja bien con "esto del CGI", y ya no comete los dos errores
+ mencionados más arriba. Lo primero que hay que hacer es asegurarse
+ de que su programa se ejecuta correctamente en línea de comandos
+ antes de probarlo a través del servidor web. Por ejemplo,
+ intente:</p>
+
+ <div class="example"><p><code>
+ cd /usr/local/apache2/cgi-bin<br />
+ ./first.pl
+ </code></p></div>
+
+ <p>(No llame al intérprete de <code>perl</code>. La consola y Apache
+ tienen que poder encontrar el intérprete usando línea
+ <a href="#pathinformation">línea de información</a> en la primera
+ línea del script.)</p>
+
+ <p>Lo primero que debe ver escrito por su programa es un conjunto de
+ cabeceras HTTP, incluyendo el <code>Content-Type</code>,
+ seguido de una línea en blanco. Si ve alguna otra cosa, Apache
+ devolverá el error <code>Premature end of script headers</code> si
+ intenta lanzar el script en el servidor web. Vea
+ <a href="#writing">Escribiendo un programa CGI</a> más arriba para
+ más detalle.</p>
+
+
+ <h3><a name="errorlogs" id="errorlogs">Log de Errores</a></h3>
+
+
+ <p>El log de errores es su amigo. Cualquier cosa que vaya mal generará
+ un mensaje en el log de errores. Debería mirar siempre ahí primero.
+ Si el lugar donde está alojando su sitio web no permite que acceda
+ al log de errores, probablemente debería alojarlo en otro sitio.
+ Aprenda a leer el log de errores y se dará cuenta de que enseguida
+ averiguará el motivo del error y lo solucionará rápidamente.</p>
+
+
+ <h3><a name="suexec" id="suexec">Suexec</a></h3>
+
+
+ <p>El programa de soporte <a href="../suexec.html">suexec</a> permite
+ que programas CGI se ejecuten con permisos de usuario distintos,
+ dependiendo del virtualhost o el directorio home donde se
+ encuentren. Suexec tiene una comprobación de permisos muy estricta,
+ y cualquier fallo en esa comprobación dará como resultado un error
+ con el mensaje <code>Premature end of script headers</code>.</p>
+
+ <p>Para comprobar si está usando Suexec, ejecute
+ <code>apachectl -V</code> y compruebe la ubicación de
+ <code>SUEXEC_BIN</code>. Si Apache encuentra un binario
+ <code class="program"><a href="../programs/suexec.html">suexec</a></code> al arrancar, suexec se activará.</p>
+
+ <p>A menos que comprenda suxec perfectamente, no debería usarlo.
+ Para desactivar suexec, basta con eliminar el binario
+ <code class="program"><a href="../programs/suexec.html">suexec</a></code> al que apunta <code>SUEXEC_BIN</code> y
+ reiniciar el servidor. Si después de leer sobre
+ <a href="../suexec.html">suexec</a> todavía quiere usarlo, entonces
+ ejecute <code>suexec -V</code> para encontrar la ubicación del
+ fichero log de suexec, y use ese log para encontrar que política no
+ está cumpliendo.</p>
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="behindscenes" id="behindscenes">¿Qué ocurre entre bastidores?</a></h2>
+
+
+ <p>En cuanto tenga conocimiento avanzado de programación CGI, le será
+ útil comprender más de lo que ocurre entre bastidores.
+ Específicamente, cómo el navegador y el servidor se comunican el uno
+ con el otro. Porque aunque esté muy bien escribir un programa que
+ diga "Hola, Mundo.", no tiene una gran utilidad.</p>
+
+ <h3><a name="env" id="env">Variables de Entorno</a></h3>
+
+
+ <p>Las variables de entorno son valores que están ahí cuando
+ usa el ordenador. Son cosas útiles como el path (donde su ordenador
+ busca el archivo específico que se lanza cuando usted escribe un
+ comando), su nombre de usuario, el tipo de terminal que usa, etc.
+ Para una lista completa de la variables de entorno normales que se
+ se usan en su día a día escriba <code>env</code> en la línea de
+ comandos.</p>
+
+ <p>Durante la transacción CGI, el servidor y el navegador también
+ configuran variables de entorno, y así pueden comunicarse entre
+ ellos. Cosas como el tipo de navegador (Netscape, IE, Lynx), el tipo
+ de servidor (Apache, IIS, WebSite), el nombre del programa CGI que
+ se está ejecutando, etc.</p>
+
+ <p>Estas variables están disponibles para el programador de CGI, y son
+ la mitad de la historia de la comunicación cliente-servidor. La
+ lista completa de las variables necesarias se encuentra en
+ <a href="http://www.ietf.org/rfc/rfc3875">el RFC de Common Gateway
+ Interface</a>.</p>
+
+ <p>Este sencillo programa CGI en Perl mostrará todas las variables
+ de entorno que se están pasando entre el cliente y el navegador. Dos
+ programas similares están incluidos en el directorio
+ <code>cgi-bin</code> de la distribución de Apache. Tenga en cuenta
+ que algunas variables son necesarias mientras que otras son
+ opcionales, así que es posible que vea algunas variables que no
+ están en la lista oficial. Adicionalmente, Apache aporta distintas
+ maneras diferentes para que pueda
+ <a href="../env.html">añadir sus variables de entorno</a> a las
+ básicas que se proveen por defecto.</p>
+
+ <pre class="prettyprint lang-perl">#!/usr/bin/perl
+use strict;
+use warnings;
+
+print "Content-type: text/html\n\n";
+
+foreach my $key (keys %ENV) {
+ print "$key --> $ENV{$key}<br>";
+}</pre>
+
+
+
+ <h3><a name="stdin" id="stdin">STDIN y STDOUT</a></h3>
+
+
+ <p>Otra comunicación entre el servidor y el cliente ocurre en la
+ entrada estándar (<code>STDIN</code>) y la salida estándar
+ (<code>STDOUT</code>). En el contexto normal de cada día,
+ <code>STDIN</code> es la entrada con el teclado, o un fichero que se
+ le da a un programa para que actúe sobre él, y <code>STDOUT</code>
+ generalmente es la consola o la pantalla.</p>
+
+ <p>Cuando hace <code>POST</code> con un formulario de web a un programa
+ CGI, los datos en ese formulario se empaquetan en un formato especial
+ que se entrega a su programa CGI en el <code>STDIN</code>.
+ Entonces el programa puede procesar la información como si le llegara
+ desde el teclado, o desde un fichero.</p>
+
+ <p>El "formato especial" es muy sencillo. Un nombre de campo y su
+ valor se asocian juntos con el signo igual (=), y pares de valores
+ se asocian juntos con el ampersand ó et en español (&).
+ Caracteres inconvenientes como los espacios, ampersands y signos de
+ igual, se convierten en su equivalente hexadecimal para no impidan
+ el funcionamiento correcto del programa. La cadena de datos al
+ completo será algo como:</p>
+
+ <div class="example"><p><code>
+ name=Rich%20Bowen&city=Lexington&state=KY&sidekick=Squirrel%20Monkey
+ </code></p></div>
+
+ <p>A veces tendrá este tipo de cadena de caracteres al final de una
+ URL. Cuando esto ocurre, el servidor pone esa cadena en una variable
+ de entorno que se llama <code>QUERY_STRING</code>. Esto se llama
+ solicitud <code>GET</code>. Su formulario HTML especifica si se usa
+ un <code>GET</code> o un <code>POST</code> para entregar la
+ información, configurando el atributo <code>METHOD</code> en la
+ etiqueta <code>FORM</code>.</p>
+
+ <p>Su programa es el responsable de convertir esa cadena de
+ caracteres en información útil. Afortunadamente, hay librerías y
+ módulos disponibles que ayudan a procesar la información, así como a
+ gestionar los distintos aspectos de su programa CGI.</p>
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="libraries" id="libraries">Módulos/librerías CGI</a></h2>
+
+
+ <p>Cuando escribe programas CGI, debería considerar usar una librería de
+ código, o módulo, para hacer todo el trabajo más arduo por usted.
+ Esto lleva a tener menos errores y un desarrollo de código más
+ rápido.</p>
+
+ <p>Si está escribiendo un programa CGI en Perl, existen módulos
+ disponibles en <a href="http://www.cpan.org/">CPAN</a>. El módulo más
+ conocido para este propósito es <code>CGI.pm</code>. Quizás quiera
+ considerar <code>CGI::Lite</code>, que implementa una funcionalidad
+ mínima, que es todo lo que se necesita en la mayoría de los programas.</p>
+
+ <p>Si está escribiendo programas CGI en C, hay varidad de opciones. Una
+ de estas es la librería <code>CGIC</code>, de
+ <a href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a>.
+ </p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="moreinfo" id="moreinfo">Para más información</a></h2>
+
+
+ <p>La especificación actual de CGI está disponible en el
+ <a href="http://www.ietf.org/rfc/rfc3875">RFC de Common Gateway
+ Interface</a>.</p>
+
+ <p>Cuando envíe una pregunta sobre un problema de CGI, o bien a una
+ lista de correo, o a un grupo de noticias, asegúrese de que facilita suficiente
+ información de lo que ha ocurrido, de lo que espera que ocurra, y de
+ lo que está ocurriendo en su lugar que es diferente, el servidor que
+ está ejecutando, en qué lenguaje CGI está hecho su programa, y si es
+ posible, el código que falla. Esto hará encontrar el problema mucho más
+ fácil.</p>
+
+ <p>Tenga en cuenta que las preguntas sobre problemas CGI
+ <strong>nunca</strong> deberían enviarse a la base de datos de bugs de
+ bugs de Apache a menos que esté seguro de haber encontrado un
+ problema en el código fuente de Apache.</p>
+ </div></div>
+<div class="bottomlang">
+<p><span>Idiomas disponibles: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> |
+<a href="../es/howto/cgi.html" title="Español"> es </a> |
+<a href="../fr/howto/cgi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> |
+<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
+<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>
+</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comentarios</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
+<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/cgi.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer">
+<p class="apache">Copyright 2017 The Apache Software Foundation.<br />Licencia bajo los términos de <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
+<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script>
+</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/cgi.xml.es b/docs/manual/howto/cgi.xml.es new file mode 100644 index 0000000000..90eed02716 --- /dev/null +++ b/docs/manual/howto/cgi.xml.es @@ -0,0 +1,594 @@ +<?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: 1773247 --> +<!-- Spanish translation : Daniel Ferradal --> +<!-- Reviewed by Luis Gil de Bernabé Pfeiffer lgilbernabe[AT]apache.org --> + +<!-- + 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="cgi.xml.meta"> + <parentdocument href="./">How-To / Tutoriales</parentdocument> + <title>Tutorial de Apache: Contenido Dinámico con CGI</title> + + <section id="intro"> + <title>Introducción</title> + <related> + <modulelist> + <module>mod_alias</module> + <module>mod_cgi</module> + <module>mod_cgid</module> + </modulelist> + + <directivelist> + <directive module="mod_mime">AddHandler</directive> + <directive module="core">Options</directive> + <directive module="mod_alias">ScriptAlias</directive> + </directivelist> + </related> + + <p>CGI (Common Gateway Interface) es un método por el cual + un servidor web puede interactuar con programas externos de + generación de contenido, a ellos nos referimos comúnmente como + programas CGI o scripts CGI. Es el método más común y sencillo de + mostrar contenido dinámico en su sitio web. Este documento es una + introducción para configurar CGI en su servidor web Apache, y de + iniciación para escribir programas CGI.</p> + </section> + + <section id="configuring"> + <title>Configurando Apache para permitir CGI</title> + + <p>Para conseguir que sus programas CGI funcionen correctamente, + deberá configurar Apache para que permita la ejecución de CGI. Hay + distintas formas de hacerlo.</p> + + <note type="warning">Nota: Si Apache ha sido compilado con soporte + de módulos compartidos, necesitará que el módulo de CGI esté cargado; + en su <code>httpd.conf</code> tiene que asegurarse de que la directiva + <directive module="mod_so">LoadModule</directive> + no ha sido comentada. Una directiva configurada correctamente sería así: + + <highlight language="config"> + LoadModule cgid_module modules/mod_cgid.so + </highlight> + + En Windows, o si usa un mpm que no es multihilo, como prefork, una + directiva configurada correctamente podría definirse así: + + <highlight language="config"> + LoadModule cgi_module modules/mod_cgi.so + </highlight></note> + + <section id="scriptalias"> + <title>ScriptAlias</title> + + <p>La directiva + <directive module="mod_alias">ScriptAlias</directive> + indica a Apache que un directorio se ha configurado específicamente + para programas CGI. Apache asumirá que cada fichero en este + directorio es un programa CGI, e intentará ejecutarlos cuando un + cliente solicita este recurso.</p> + + <p>La directiva + <directive module="mod_alias">ScriptAlias</directive> se puede + definir así:</p> + + <highlight language="config"> + ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/" + </highlight> + + <p>El ejemplo que se muestra es de un archivo de configuración + <code>httpd.conf</code> por defecto si usted instaló Apache + en la ubicación por defecto. La directiva + <directive module="mod_alias">ScriptAlias</directive> es muy + parecida a la directiva <directive module="mod_alias">Alias</directive>, + ésta define un prefijo de URL que se enlaza a un directorio + en particular. <directive>Alias</directive> y + <directive>ScriptAlias</directive> se usan generalmente para + directorios que se encuentran fuera del directorio + <directive module="core">DocumentRoot</directive>. La diferencia + entre <directive>Alias</directive> y <directive>ScriptAlias</directive> + es que en <directive>ScriptAlias</directive> cualquier elemento + debajo de ese prefijo de URL será considerado un programa CGI. Así, + el ejemplo de más arriba le indica a Apache que + cualquier solicitud para un recurso que comience con + <code>/cgi-bin/</code> debería servirse desde el directorio + <code>/usr/local/apache2/cgi-bin/</code>, y debería tratarse como un + programa CGI.</p> + + <p>Por ejemplo, si se solicita la URL + <code>http://www.example.com/cgi-bin/test.pl</code>, + Apache intentará ejecutar el archivo + <code>/usr/local/apache2/cgi-bin/test.pl</code> y dar + el resultado. Por supuesto el archivo debe existir y ser ejecutable, + y dar el resultado de una manera específica o Apache devolverá + un mensaje de error.</p> + </section> + + <section id="nonscriptalias"> + <title>CGI fuera de directorios ScriptAlias</title> + + <p>Los programas CGI habitualmente se restringen a los directorios de + <directive module="mod_alias">ScriptAlias</directive> por razones de + seguridad. De esta manera, los administradores pueden controlar de una + manera más segura quien puede ejecutar programas CGI. Aun así, si no + se toman suficientes precauciones, no hay ninguna razón por la que + programas CGI no se puedan ejecutar desde directorios seleccionados de + manera arbitraria. Por ejemplo, quizás quiera permitir que usuarios del + sistema tengan contenido web en sus directorios home con la directiva + <directive module="mod_userdir">UserDir</directive>. Si quieren + tener sus propios programas CGI, pero no tienen acceso al directorio + principal <code>cgi-bin</code>, necesitarán ser capaces de + ejecutar sus scripts CGI en algún otro sitio.</p> + + <p>Hay dos pasos a seguir para permitir la ejecución CGI en directorios + seleccionados de manera arbitraria. Primero, el handler + <code>cgi-script</code> debe estar activado usando la directiva + <directive module="mod_mime">AddHandler</directive> o la directiva + <directive module="core">SetHandler</directive>. Segundo, el parámetro + <code>ExecCGI</code> debe estar definido en la directiva + <directive module="core">Options</directive>.</p> + </section> + + <section id="options"> + <title>Usando Options de manera explícita para permitir ejecución de + CGI</title> + + <p>Puede usar la directiva + <directive module="core">Options</directive>, en el archivo de + configuración principal para especificar que se permite la ejecución + de CGI en un directorio en particular:</p> + + <highlight language="config"> +<Directory "/usr/local/apache2/htdocs/somedir"> + Options +ExecCGI +</Directory> + </highlight> + + <p>Esta directiva de aquí arriba le indica a Apache que debe + permitir la ejecución de archivos CGI. También necesitará indicarle + al servidor que los archivos son archivos CGI. La directiva + <directive module="mod_mime">AddHandler</directive> le indica al + servidor que debe tratar a todos los archivos con la extensión + <code>cgi</code> o <code>pl</code> como programas CGI:</p> + + <highlight language="config"> + AddHandler cgi-script .cgi .pl + </highlight> + </section> + + <section id="htaccess"> + <title>Ficheros .htaccess</title> + + <p>El <a href="htaccess.html">tutorial <code>.htaccess</code></a> + enseña como activar programas CGI si no tienes acceso a + <code>httpd.conf</code>.</p> + </section> + + <section id="userdir"> + <title>Directorios de Usuario</title> + + <p>Para permitir la ejecución de programas CGI para cualquier + archivo que acabe en <code>.cgi</code> en directorios de usuario, + puedes usar la siguiente configuración:</p> + + <highlight language="config"> +<Directory "/home/*/public_html"> + Options +ExecCGI + AddHandler cgi-script .cgi +</Directory> + </highlight> + + <p>Si quiere designar un subdirectorio <code>cgi-bin</code> dentro + de un directorio de usuario en el que todos los ficheros serán + tratados como un programa CGI, puede usar lo siguiente:</p> + + <highlight language="config"> +<Directory "/home/*/public_html/cgi-bin"> + Options ExecCGI + SetHandler cgi-script +</Directory> + </highlight> + </section> + </section> + + <section id="writing"> + <title>Escribiendo un programa CGI</title> + + <p>Hay dos diferencias principales entre programación ``regular'' y + programación en CGI.</p> + + <p>Primera, el resultado al completo de tu programa CGI debe estar + precedido de una cabecera <glossary>MIME-type</glossary>. Esta + cabecera HTTP le indica al cliente que tipo de contenido está + recibiendo. La mayor parte de las veces, ésto será algo como:</p> + + <example> + Content-type: text/html + </example> + + <p>Segunda, el resultado debe estar en formato HTML, o cualquier + otro formato que su navegador sea capaz de mostrar. La mayor + parte de las veces, será HTML, pero otras escribirá un programa + CGI que devuelve una imagen gif, u otro contenido no-HTML.</p> + + <p>Aparte de estas dos cosas, escribir un programa en CGI se + parecerá bastante a cualquier otro programa que vaya a escribir. + </p> + + + <section id="firstcgi"> + <title>Su primer programa CGI</title> + + <p>A continuación podrá ver un ejemplo de programa CGI que muestra + una línea de texto en su navegador. Escriba lo siguiente, + guárdelo en un archivo con el nombre <code>first.pl</code>, y + póngalo en su directorio <code>cgi-bin</code>.</p> + + <highlight language="perl"> +#!/usr/bin/perl +print "Content-type: text/html\n\n"; +print "Hola, Mundo."; + </highlight> + + <p>Incluso si Perl no le resulta familiar, podrá ver lo que está + ocurriendo aquí. La primera línea le dice a Apache (o a + cualquier shell en la que se esté ejecutando) que este programa + puede ejecutarse con el intérprete en la ubicación + <code>/usr/bin/perl</code>. La segunda línea imprime la + declaración de Content-Type que mencionamos antes, seguida de + dos pares de retornos de carro. Esto pone una línea en blanco + después de la cabecera para indicar el final de las cabeceras + HTTP, y el comienzo del cuerpo del contenido. La tercera + imprime la cadena de caracteres "Hola, Mundo.". Y ese es el + final del programa.</p> + + <p>Si lo abre con su navegador favorito y le dice que solicite la + dirección</p> + + <example> + http://www.example.com/cgi-bin/first.pl + </example> + + <p>o donde quiera que pusiera el archivo, verá una línea + <code>Hola, Mundo.</code> aparecerán la ventana del navegador. No es + muy emocionante, pero una vez que consiga que funcione podrá hacer + lo mismo con casi cualquier programa.</p> + </section> + </section> + + <section id="troubleshoot"> + <title>¡Pero todavía no funciona!</title> + + <p>Hay 4 cosas básicas que puede llegar a ver en su navegador cuando + intenta acceder a un programa CGI desde la web:</p> + + <dl> + <dt>El resultado del programa CGI</dt> + <dd>¡Genial! Esto indica que todo funcionó correctamente. Si el + resultado es correcto, pero el navegador no lo procesa + correctamente, asegúrese de que tiene especificado + correctamente el <code>Content-Type</code> en su programa + CGI.</dd> + + <dt>El código fuente de su programa CGI o un mensaje del tipo + "POST Method Not Allowed".</dt> + + <dd>Eso significa que no ha configurado Apache de manera + apropiada para interpretar su programa CGI. Relea la sección + de <a href="#configuring">Configurando Apache</a> e intente + encontrar qué le falta.</dd> + + <dt>Un mensaje que empieza con "Forbidden"</dt> + <dd>Eso significa que hay un problema de permisos. Compruebe el + <a href="#errorlogs">Log de Errores de Apache</a> y la + sección de más abajo de <a href="#permissions">Permisos de + Fichero</a>.</dd> + + <dt>Un mensaje indicando "Internal Server Error"</dt> + <dd>Si comprueba el <a href="#errorlogs">Log de errores de + Apache</a>, probablemente encontrará que indica "Premature + end of script headers", posiblemente acompañado de otro + mensaje de error generado por su programa CGI. En este caso, + querrá comprobar cada una de las secciones de más adelante + para ver qué impide que su programa CGI genere las cabeceras + HTTP adecuadas.</dd> + </dl> + + <section id="permissions"> + <title>Permisos de Fichero</title> + + <p>Recuerde que el servidor no se ejecuta con su usuario. Es decir, + cuando el servidor arranca, está funcionando con un usuario sin + privilegios, generalmente el usuario <code>nobody</code>, o + <code>www-data</code>, así que necesitará permisos extra para + ejecutar los archivos de los que usted es dueño. Generalmente, + el método para dar permisos suficientes para que se pueda + ejecutar con <code>nobody</code> es dar permisos de ejecución a + todo el mundo en el fichero:</p> + + <example> + chmod a+x first.pl + </example> + + <p>Además, si su programa lee desde o escribe a cualquier otro/s + archivo/s, esos archivos necesitarán tener los permisos correctos + para permitir esas acciones.</p> + + </section> + + <section id="pathinformation"> + <title>Información de Ruta y Entorno</title> + + <p>Cuando ejecuta un programa desde la línea de comandos, usted tiene + cierta información que se le pasa a la shell sin que usted se + percate de ello. Por ejemplo, usted tiene un <code>PATH</code>, + que le indica a la shell dónde debe buscar archivos a los que usted + hace referencia.</p> + + <p>Cuando un programa se ejecuta a través del servidor web como un + programa CGI, puede que no tenga el mismo <code>PATH</code>. + Cualquier programa que invoque desde su programa CGI (como por + ejemplo <code>sendmail</code>) necesitará que se le indique la + ruta absoluta, así la shell puede encontrarlos cuando intenta + ejecutar su programa CGI.</p> + + <p>Una manifestación común de esto es la ruta del intérprete del + script (a menudo <code>perl</code>) indicado en la primera línea + de su programa CGI, que parecerá algo como:</p> + + <highlight language="perl"> + #!/usr/bin/perl + </highlight> + + <p>Asegúrese de que éste es de hecho el path de su intérprete.</p> + <note type="warning"> + Cuando edita scripts CGI en Windows, los caracteres de retorno de + carro podrían añadirse a la línea donde se especifica el intérprete. + Asegúrese de que los archivos se transfieren al servidor en modo + ASCII. Fallar en esto puede acabar con avisos del tipo "Command not + found" del Sistema Operativo, debido a que éste no reconoce los + caracteres de final de línea interpretados como parte del nombre + de fichero del intérprete. + </note> + </section> + + <section id="missingenv"> + <title>Faltan Variables de Entorno</title> + + <p>Si su programa CGI depende de <a + href="#env">variables de entorno</a> no estándar, necesitará + asegurarse de que Apache pasa esas variables.</p> + + <p>Cuando no encuentra ciertas cabeceras HTTP del entorno, asegúrese + de que están formateadas según el + <a href="http://tools.ietf.org/html/rfc2616">RFC 2616</a>, + sección 4.2: Nombres de Cabeceras deben empezar con una letra, + seguida solo de letras, números o guión. Cualquier cabecera + que no cumpla esta regla será ignorada de manera silenciosa.</p> + + </section> + + <section id="syntaxerrors"> + <title>Errores de Programa</title> + + <p>La mayor parte de las veces cuando un programa CGI falla, es por un + problema en el programa mismo. Esto ocurre generalmente cuando se + maneja bien con "esto del CGI", y ya no comete los dos errores + mencionados más arriba. Lo primero que hay que hacer es asegurarse + de que su programa se ejecuta correctamente en línea de comandos + antes de probarlo a través del servidor web. Por ejemplo, + intente:</p> + + <example> + cd /usr/local/apache2/cgi-bin<br/> + ./first.pl + </example> + + <p>(No llame al intérprete de <code>perl</code>. La consola y Apache + tienen que poder encontrar el intérprete usando línea + <a href="#pathinformation">línea de información</a> en la primera + línea del script.)</p> + + <p>Lo primero que debe ver escrito por su programa es un conjunto de + cabeceras HTTP, incluyendo el <code>Content-Type</code>, + seguido de una línea en blanco. Si ve alguna otra cosa, Apache + devolverá el error <code>Premature end of script headers</code> si + intenta lanzar el script en el servidor web. Vea + <a href="#writing">Escribiendo un programa CGI</a> más arriba para + más detalle.</p> + </section> + + <section id="errorlogs"> + <title>Log de Errores</title> + + <p>El log de errores es su amigo. Cualquier cosa que vaya mal generará + un mensaje en el log de errores. Debería mirar siempre ahí primero. + Si el lugar donde está alojando su sitio web no permite que acceda + al log de errores, probablemente debería alojarlo en otro sitio. + Aprenda a leer el log de errores y se dará cuenta de que enseguida + averiguará el motivo del error y lo solucionará rápidamente.</p> + </section> + + <section id="suexec"> + <title>Suexec</title> + + <p>El programa de soporte <a href="../suexec.html">suexec</a> permite + que programas CGI se ejecuten con permisos de usuario distintos, + dependiendo del virtualhost o el directorio home donde se + encuentren. Suexec tiene una comprobación de permisos muy estricta, + y cualquier fallo en esa comprobación dará como resultado un error + con el mensaje <code>Premature end of script headers</code>.</p> + + <p>Para comprobar si está usando Suexec, ejecute + <code>apachectl -V</code> y compruebe la ubicación de + <code>SUEXEC_BIN</code>. Si Apache encuentra un binario + <program>suexec</program> al arrancar, suexec se activará.</p> + + <p>A menos que comprenda suxec perfectamente, no debería usarlo. + Para desactivar suexec, basta con eliminar el binario + <program>suexec</program> al que apunta <code>SUEXEC_BIN</code> y + reiniciar el servidor. Si después de leer sobre + <a href="../suexec.html">suexec</a> todavía quiere usarlo, entonces + ejecute <code>suexec -V</code> para encontrar la ubicación del + fichero log de suexec, y use ese log para encontrar que política no + está cumpliendo.</p> + </section> + </section> + + <section id="behindscenes"> + <title>¿Qué ocurre entre bastidores?</title> + + <p>En cuanto tenga conocimiento avanzado de programación CGI, le será + útil comprender más de lo que ocurre entre bastidores. + Específicamente, cómo el navegador y el servidor se comunican el uno + con el otro. Porque aunque esté muy bien escribir un programa que + diga "Hola, Mundo.", no tiene una gran utilidad.</p> + + <section id="env"> + <title>Variables de Entorno</title> + + <p>Las variables de entorno son valores que están ahí cuando + usa el ordenador. Son cosas útiles como el path (donde su ordenador + busca el archivo específico que se lanza cuando usted escribe un + comando), su nombre de usuario, el tipo de terminal que usa, etc. + Para una lista completa de la variables de entorno normales que se + se usan en su día a día escriba <code>env</code> en la línea de + comandos.</p> + + <p>Durante la transacción CGI, el servidor y el navegador también + configuran variables de entorno, y así pueden comunicarse entre + ellos. Cosas como el tipo de navegador (Netscape, IE, Lynx), el tipo + de servidor (Apache, IIS, WebSite), el nombre del programa CGI que + se está ejecutando, etc.</p> + + <p>Estas variables están disponibles para el programador de CGI, y son + la mitad de la historia de la comunicación cliente-servidor. La + lista completa de las variables necesarias se encuentra en + <a href="http://www.ietf.org/rfc/rfc3875">el RFC de Common Gateway + Interface</a>.</p> + + <p>Este sencillo programa CGI en Perl mostrará todas las variables + de entorno que se están pasando entre el cliente y el navegador. Dos + programas similares están incluidos en el directorio + <code>cgi-bin</code> de la distribución de Apache. Tenga en cuenta + que algunas variables son necesarias mientras que otras son + opcionales, así que es posible que vea algunas variables que no + están en la lista oficial. Adicionalmente, Apache aporta distintas + maneras diferentes para que pueda + <a href="../env.html">añadir sus variables de entorno</a> a las + básicas que se proveen por defecto.</p> + + <highlight language="perl"> +#!/usr/bin/perl +use strict; +use warnings; + +print "Content-type: text/html\n\n"; + +foreach my $key (keys %ENV) { + print "$key --> $ENV{$key}<br>"; +} + </highlight> + </section> + + <section id="stdin"> + <title>STDIN y STDOUT</title> + + <p>Otra comunicación entre el servidor y el cliente ocurre en la + entrada estándar (<code>STDIN</code>) y la salida estándar + (<code>STDOUT</code>). En el contexto normal de cada día, + <code>STDIN</code> es la entrada con el teclado, o un fichero que se + le da a un programa para que actúe sobre él, y <code>STDOUT</code> + generalmente es la consola o la pantalla.</p> + + <p>Cuando hace <code>POST</code> con un formulario de web a un programa + CGI, los datos en ese formulario se empaquetan en un formato especial + que se entrega a su programa CGI en el <code>STDIN</code>. + Entonces el programa puede procesar la información como si le llegara + desde el teclado, o desde un fichero.</p> + + <p>El "formato especial" es muy sencillo. Un nombre de campo y su + valor se asocian juntos con el signo igual (=), y pares de valores + se asocian juntos con el ampersand ó et en español (&). + Caracteres inconvenientes como los espacios, ampersands y signos de + igual, se convierten en su equivalente hexadecimal para no impidan + el funcionamiento correcto del programa. La cadena de datos al + completo será algo como:</p> + + <example> + name=Rich%20Bowen&city=Lexington&state=KY&sidekick=Squirrel%20Monkey + </example> + + <p>A veces tendrá este tipo de cadena de caracteres al final de una + URL. Cuando esto ocurre, el servidor pone esa cadena en una variable + de entorno que se llama <code>QUERY_STRING</code>. Esto se llama + solicitud <code>GET</code>. Su formulario HTML especifica si se usa + un <code>GET</code> o un <code>POST</code> para entregar la + información, configurando el atributo <code>METHOD</code> en la + etiqueta <code>FORM</code>.</p> + + <p>Su programa es el responsable de convertir esa cadena de + caracteres en información útil. Afortunadamente, hay librerías y + módulos disponibles que ayudan a procesar la información, así como a + gestionar los distintos aspectos de su programa CGI.</p> + </section> + </section> + + <section id="libraries"> + <title>Módulos/librerías CGI</title> + + <p>Cuando escribe programas CGI, debería considerar usar una librería de + código, o módulo, para hacer todo el trabajo más arduo por usted. + Esto lleva a tener menos errores y un desarrollo de código más + rápido.</p> + + <p>Si está escribiendo un programa CGI en Perl, existen módulos + disponibles en <a href="http://www.cpan.org/">CPAN</a>. El módulo más + conocido para este propósito es <code>CGI.pm</code>. Quizás quiera + considerar <code>CGI::Lite</code>, que implementa una funcionalidad + mínima, que es todo lo que se necesita en la mayoría de los programas.</p> + + <p>Si está escribiendo programas CGI en C, hay varidad de opciones. Una + de estas es la librería <code>CGIC</code>, de + <a href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a>. + </p> + </section> + + <section id="moreinfo"> + <title>Para más información</title> + + <p>La especificación actual de CGI está disponible en el + <a href="http://www.ietf.org/rfc/rfc3875">RFC de Common Gateway + Interface</a>.</p> + + <p>Cuando envíe una pregunta sobre un problema de CGI, o bien a una + lista de correo, o a un grupo de noticias, asegúrese de que facilita suficiente + información de lo que ha ocurrido, de lo que espera que ocurra, y de + lo que está ocurriendo en su lugar que es diferente, el servidor que + está ejecutando, en qué lenguaje CGI está hecho su programa, y si es + posible, el código que falla. Esto hará encontrar el problema mucho más + fácil.</p> + + <p>Tenga en cuenta que las preguntas sobre problemas CGI + <strong>nunca</strong> deberían enviarse a la base de datos de bugs de + bugs de Apache a menos que esté seguro de haber encontrado un + problema en el código fuente de Apache.</p> + </section> +</manualpage> diff --git a/docs/manual/howto/cgi.xml.meta b/docs/manual/howto/cgi.xml.meta index 3070905d45..7eaed2ca20 100644 --- a/docs/manual/howto/cgi.xml.meta +++ b/docs/manual/howto/cgi.xml.meta @@ -8,6 +8,7 @@ <variants> <variant>en</variant> + <variant>es</variant> <variant>fr</variant> <variant outdated="yes">ja</variant> <variant outdated="yes">ko</variant> diff --git a/docs/manual/howto/htaccess.html b/docs/manual/howto/htaccess.html index afb2b04fe2..f9aa7ff1aa 100644 --- a/docs/manual/howto/htaccess.html +++ b/docs/manual/howto/htaccess.html @@ -4,6 +4,10 @@ URI: htaccess.html.en Content-Language: en Content-type: text/html; charset=ISO-8859-1 +URI: htaccess.html.es +Content-Language: es +Content-type: text/html; charset=ISO-8859-1 + URI: htaccess.html.fr Content-Language: fr Content-type: text/html; charset=ISO-8859-1 diff --git a/docs/manual/howto/htaccess.html.es b/docs/manual/howto/htaccess.html.es new file mode 100644 index 0000000000..f4db6d769c --- /dev/null +++ b/docs/manual/howto/htaccess.html.es @@ -0,0 +1,464 @@ +<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head>
+<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" />
+<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + -->
+<title>Tutorial del Servidor Apache HTTP: Ficheros .htaccess - Servidor Apache HTTP Versión 2.4</title>
+<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
+<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
+<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
+<script src="../style/scripts/prettify.min.js" type="text/javascript">
+</script>
+
+<link href="../images/favicon.ico" rel="shortcut icon" /></head>
+<body id="manual-page"><div id="page-header">
+<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p>
+<p class="apache">Versión 2.4 del Servidor HTTP Apache</p>
+<img alt="" src="../images/feather.png" /></div>
+<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Servidor HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentación</a> > <a href="../">Versión 2.4</a> > <a href="./">How-To / Tutoriales</a></div><div id="page-content"><div id="preamble"><h1>Tutorial del Servidor Apache HTTP: Ficheros .htaccess</h1>
+<div class="toplang">
+<p><span>Idiomas disponibles: </span><a href="../en/howto/htaccess.html" hreflang="en" rel="alternate" title="English"> en </a> |
+<a href="../es/howto/htaccess.html" title="Español"> es </a> |
+<a href="../fr/howto/htaccess.html" hreflang="fr" rel="alternate" title="Français"> fr </a> |
+<a href="../ja/howto/htaccess.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
+<a href="../ko/howto/htaccess.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
+<a href="../pt-br/howto/htaccess.html" hreflang="pt-br" rel="alternate" title="Português (Brasil)"> pt-br </a></p>
+</div>
+
+ <p>Los ficheros <code>.htaccess</code> facilitan una forma de realizar
+ cambios en la configuración en contexto directorio.</p>
+</div>
+<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Ficheros .htaccess</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#what">Qué son/Cómo usarlos</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#when">Cuando (no) usar ficheros .htaccess</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#how">How directives are applied</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#auth">Ejemplo de Autenticación</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#ssi">Ejemplo de Server Side Includes</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#rewrite">Reglas de Rewrite en ficheros .htaccess</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#cgi">Ejemplo de CGI</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">Resolución de problemas</a></li>
+</ul><h3>Consulte también</h3><ul class="seealso"><li><a href="#comments_section">Comentarios</a></li></ul></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="related" id="related">Ficheros .htaccess</a></h2>
+ <table class="related"><tr><th>Módulos Relacionados</th><th>Directivas Relacionadas</th></tr><tr><td><ul><li><code class="module"><a href="../mod/core.html">core</a></code></li><li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li><li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code></li><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code></li><li><code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code></li><li><code class="directive"><a href="../mod/mod_authn_core.html#authname">AuthName</a></code></li><li><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code></li></ul></td></tr></table>
+
+ <div class="note">Debería evitar usar ficheros <code>.htaccess</code> completamente si
+ tiene acceso al fichero de configuración principal de httpd. Usar ficheros
+ <code>.htaccess</code> ralentiza su servidor Apache http. Cualquier
+ directiva que pueda incluir en un fichero <code>.htaccess</code>
+ estará mejor configurada dentro de una sección
+ <code class="directive"><a href="../mod/core.html#directory">Directory</a></code>, tendrá el mismo efecto y
+ mejor rendimiento.</div>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="what" id="what">Qué son/Cómo usarlos</a></h2>
+
+
+ <p>Los ficheros <code>.htaccess</code> (o "ficheros de configuración
+ distribuida") facilitan una forma de realizar cambios en la configuración
+ en contexto directorio. Un fichero, que contiene una o más directivas, se
+ coloca en un documento específico de un directorio, y estas directivas
+ aplican a ese directorio y todos sus subdirectorios.</p>
+
+ <div class="note"><h3>Nota:</h3>
+ <p>Si quiere llamar a su fichero <code>.htaccess</code> de otra manera,
+ puede cambiar el nombre del fichero usando la directiva <code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code>. Por ejemplo, si usted prefiere
+ llamar al fichero <code>.config</code>, entonces puede poner lo siguiente
+ en el fichero de configuración de su servidor:</p>
+
+ <pre class="prettyprint lang-config">AccessFileName ".config"</pre>
+
+ </div>
+
+ <p>Generalmente, los ficheros <code>.htaccess</code> usan la misma sintáxis
+ que los <a href="../configuring.html#syntax">ficheros de la configuración
+ principal</a>. Lo que puede utilizar en estos ficheros lo determina la
+ directiva <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>. Esta directiva
+ especifica, en categorías, qué directivas tendrán efecto si se encuentran en
+ un fichero <code>.htaccess</code>. Si se permite una directiva en un fichero
+ <code>.htaccess</code>, la documentación para esa directiva contendrá una
+ sección Override, especificando qué valor debe ir en
+ <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> para que se permita esa
+ directiva.</p>
+
+ <p>Por ejemplo, si busca en la documentación la directiva <code class="directive"><a href="../mod/core.html#adddefaultcharset">AddDefaultCharset</a></code>, encontrará que se permite en
+ ficheros <code>.htaccess</code>. (Vea la línea de Contexto en el sumario de
+ la directiva.) La línea <a href="../mod/directive-dict.html#Context">Override</a> muestra
+ <code>FileInfo</code>. De este modo, debe tener al menos
+ <code>AllowOverride FileInfo</code> para que esta directiva se aplique en
+ ficheros <code>.htaccess</code>.</p>
+
+ <div class="example"><h3>Ejemplo:</h3><table>
+ <tr>
+ <td><a href="../mod/directive-dict.html#Context">Context:</a></td>
+ <td>server config, virtual host, directory, .htaccess</td>
+ </tr>
+
+ <tr>
+ <td><a href="../mod/directive-dict.html#Override">Override:</a></td>
+ <td>FileInfo</td>
+ </tr>
+ </table></div>
+
+ <p>Si no está seguro de cuándo, una directiva en concreto, se puede usar en un
+ fichero <code>.htaccess</code>, consulte la documentación para esa directiva,
+ y compruebe la línea Context buscando ".htaccess".</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="when" id="when">Cuando (no) usar ficheros .htaccess</a></h2>
+
+ <p>Generalmente, solo debería usar ficheros <code>.htaccess</code> cuando no
+ tiene acceso al fichero principal de configuración del servidor. Hay, por
+ ejemplo, una creencia errónea de que la autenticación de usuario debería
+ hacerse siempre dentro de ficheros <code>.htaccess</code>, y, más recientemente, otra creencia errónea de que las directivas de
+ <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> deben ir en ficheros <code>.htaccess</code>.
+ Esto sencillamente no es el caso. Puede poner las configuraciones de
+ autenticación de usuario en la configuración principal del servidor, y esto
+ es de hecho, el método preferido de configurar Apache. Del mismo modo, las
+ directivas <code>mod_rewrite</code> funcionan mejor, en muchos sentidos, en
+ el fichero de configuración principal del servidor.</p>
+
+ <p>Los ficheros <code>.htaccess</code> deberían usarse cuando su proveedor
+ de contenidos le permite hacer modificaciones de configuración
+ en contexto directorio, pero usted no tiene acceso de root en el servidor.
+ En el caso de que el administrador no esté dispuesto a hacer cambios
+ frecuentes en la configuración, puede que sea necesario permitir a usuarios
+ individuales realizar estos cambios de configuración en ficheros
+ <code>.htaccess</code> por ellos mismos. Lo cual ocurre a menudo, por
+ ejemplo, en casos donde los ISP están albergando múltiples sitios web de
+ usuario en una sola máquina, y quieren que sus usuarios tengan la
+ posibilidad de modificar sus configuraciones.</p>
+
+ <p>Aun así, generalmente, el uso de ficheros <code>.htaccess</code> debería
+ evitarse cuando sea posible. Cualquier configuración que consideraría poner
+ en un fichero <code>.htaccess</code>, puede usarse con la misma efectividad
+ en una sección <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> en el fichero de configuración
+ del servidor.</p>
+
+ <p>Hay dos razones para evitar el uso de ficheros <code>.htaccess</code>.</p>
+
+ <p>La primera es el rendimiento. Cuando <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>
+ está configurado para permitir el uso de ficheros <code>.htaccess</code>,
+ httpd buscará ficheros <code>.htaccess</code> en cada directorio. Así,
+ permitiendo ficheros <code>.htaccess</code> provoca una pérdida de
+ rendimiento, ¡incluso aunque no los use! Además, los ficheros
+ <code>.htaccess</code> se cargan cada vez que se solicita un documento.</p>
+
+ <p>Además tenga en cuenta que httpd debe buscar ficheros
+ <code>.htaccess</code> en todos los directorios de mayor jerarquía,
+ para poder terner la lista completa de directivas que debe aplicar. (Vea
+ la sección sobre <a href="#how">Cómo se aplican las directivas</a>.) Así, si
+ se solicita un fichero de un directorio <code>/www/htdocs/example</code>,
+ httpd debe buscar los siguientes ficheros:</p>
+
+ <div class="example"><p><code>
+ /.htaccess<br />
+ /www/.htaccess<br />
+ /www/htdocs/.htaccess<br />
+ /www/htdocs/example/.htaccess
+ </code></p></div>
+
+ <p>De esta manera, por cada acceso a un fichero de ese directorio, hay 4
+ accesos adicionales al sistema de ficheros, incluso si ninguno de esos
+ ficheros está presente. (Tenga en cuenta que este caso solo se daría si los
+ ficheros <code>.htaccess</code> están activados en <code>/</code>, que
+ generalmente no es el caso.).</p>
+
+ <p>En el caso de las directivas <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>, en el contexto de
+ <code>.htaccess</code> estas expresiones regulares deben recompilarse con
+ cada solicitud a ese directorio, cuando en el contexto de configuración del
+ servidor solo se compilan una vez y se cachean. Adicionalmente, las reglas
+ en sí mismas son más complicadas, puesto que uno debe sortear las
+ restricciones que vienen acompañadas del contexto directorio y
+ <code>mod_rewrite</code>. Consulte la <a href="../rewrite/intro.html#htaccess">Guía de Rewrite</a> para un mayor
+ detalle sobre este tema.</p>
+
+ <p>La segunda consideración es de seguridad. Estará permitiendo que usuarios
+ modifiquen la configuración del servidor, lo cual puede dar lugar a cambios sobre los que usted no tendrá ningún control. Medite profundamente si debe
+ dar a sus usuarios ese privilegio. Además tenga en cuenta que dar a los usuarios menos privilegios de los que necesitan dará lugar a más peticiones
+ de soporte. Asegúrese de que le indica a sus usuarios claramente el nivel de privilegios que les está dando. Especificando exactamente cómo ha
+ configurado <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>, e invíteles
+ a revisar la documentación relacionada, lo cual le ahorrará
+ bastantes confusiones más adelante.</p>
+
+ <p>Tenga en cuenta que esto es equivalente por completo a poner un fichero
+ <code>.htaccess</code> en un directorio <code>/www/htdocs/example</code>
+ con una directiva, y poner la misma directiva en una sección
+ Directory <code><Directory "/www/htdocs/example"></code> en su
+ configuración principal del servidor:</p>
+
+ <p>Fichero <code>.htaccess</code> en <code>/www/htdocs/example</code>:</p>
+
+ <div class="example"><h3>Contenido de fichero .htaccess en
+ <code>/www/htdocs/example</code></h3><pre class="prettyprint lang-config">AddType text/example ".exm"</pre>
+</div>
+
+ <div class="example"><h3>Sección de su fichero <code>httpd.conf</code></h3><pre class="prettyprint lang-config"><Directory "/www/htdocs/example">
+ AddType text/example ".exm"
+</Directory></pre>
+</div>
+
+ <p>Aun así, poniendo ésta en el fichero de configuración dará como resultado
+ una menor pérdida de rendimiento, y como la configuración se carga una vez
+ cuando el httpd arranca, en lugar de cada vez que se solicita un fichero.</p>
+
+ <p>El uso de ficheros <code>.htaccess</code> puede desactivarse por completo
+ configurando la directiva <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>
+ a <code>none</code>:</p>
+
+ <pre class="prettyprint lang-config">AllowOverride None</pre>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="how" id="how">How directives are applied</a></h2>
+
+ <p>Las directivas de configuración que se encuentran en el fichero
+ <code>.htaccess</code> se aplican al directorio en el que el fichero
+ <code>.htaccess</code> se encuentra, y a todos sus subdirectorios. Sin
+ embargo, es importante recordar que puede haber otros ficheros
+ <code>.htaccess</code> en directorios previos. Las directivas se aplican en
+ el orden en el que se encuentran. Por lo tanto, un fichero
+ <code>.htaccess</code> puede sobrescribir directivas que se encuentran
+ en ficheros <code>.htaccess</code> que se encuentran en directorios previos
+ del árbol de directorios. Y estos, en cambio, pueden haber sobrescrito
+ directivas que se encontraban más arriba, o en el fichero principal de
+ configuración del servidor mismo.</p>
+
+ <p>Ejemplo:</p>
+
+ <p>En el directorio <code>/www/htdocs/example1</code> tenemos un fichero
+ <code>.htaccess</code> que contiene lo siguiente:</p>
+
+ <pre class="prettyprint lang-config">Options +ExecCGI</pre>
+
+
+ <p>(Nota: debe terner "<code>AllowOverride Options</code>" configurado para
+ permitir el uso de la directiva "<code class="directive"><a href="../mod/core.html#options">Options</a></code>" en ficheros
+ <code>.htaccess</code> files.)</p>
+
+ <p>En el directorio <code>/www/htdocs/example1/example2</code> tenemos un
+ fichero <code>.htaccess</code> que contiene:</p>
+
+ <pre class="prettyprint lang-config">Options Includes</pre>
+
+
+ <p>Por este segundo fichero <code>.htaccess</code>, en el directorio
+ <code>/www/htdocs/example1/example2</code>, la ejecución de CGI execution no
+ está permitida, porque solo se ha definido <code>Options Includes</code>,
+ que sobrescribe completamente una configuración previa que se pudiera haber
+ definido.</p>
+
+ <h3><a name="merge" id="merge">Incorporando el .htaccess en los ficheros de
+ configuración principal</a></h3>
+
+ <p>Como se ha comentado en la documentación en las <a href="../sections.html">Secciones de Configuración</a>, los ficheros
+ <code>.htaccess</code> pueden sobrescribir las secciones <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> por el directorio
+ correspondiente, pero se sobrescribirán por otros tipos de secciones de
+ configuración de los ficheros de configuración principal. Este hecho se
+ puede usar para forzar ciertas configuraciones, incluso en presencia
+ de una configuración laxa de
+ <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>. Por ejemplo, para
+ prevenir la ejecución de un script mientras se permite cualquier otra cosa
+ en <code>.htaccess</code> puede usar:</p>
+
+ <pre class="prettyprint lang-config"><Directory "/www/htdocs">
+ AllowOverride All
+</Directory>
+
+<Location "/">
+ Options +IncludesNoExec -ExecCGI
+</Location></pre>
+
+
+ <div class="note">Este ejemplo asume que su <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> es <code>/www/htdocs</code>.</div>
+
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="auth" id="auth">Ejemplo de Autenticación</a></h2>
+
+ <p>Si saltó directamente a esta parte del documento para averiguar como
+ hacer la autenticación, es important que tenga en cuenta una cosa. Hay una
+ creencia errónea de que necesita usar ficheros <code>.htaccess</code> para
+ configurar autenticación con contraseña. Este no es el caso. Colocar las
+ directivas de autenticación en una sección
+ <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>, en su fichero
+ de configuración principal, es el método recomendado para configurar esto,
+ y los ficheros <code>.htaccess</code> deberían usarse solamente si no tiene
+ acceso al fichero de configuración principal del servidor. Vea <a href="#when">más arriba</a> una explicación de cuando debería y cuando no
+ debería usar ficheros <code>.htaccess</code>.</p>
+
+ <p>Dicho esto, si todavía cree que debe usar el fichero
+ <code>.htaccess</code>, podrá ver que una configuración como la que sigue
+ podría servirle.</p>
+
+ <p>Contenido del fichero <code>.htaccess</code>:</p>
+
+ <pre class="prettyprint lang-config">AuthType Basic
+AuthName "Password Required"
+AuthUserFile "/www/passwords/password.file"
+AuthGroupFile "/www/passwords/group.file"
+Require group admins</pre>
+
+
+ <p>Tenga en cuenta que <code>AllowOverride AuthConfig</code> debe estar
+ habilitado para que estas directivas tengan algún efecto.</p>
+
+ <p>Por favor vea el <a href="auth.html">tutorial de autenticación</a> para
+ una explicación más completa de la autenticación y la autorización.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="ssi" id="ssi">Ejemplo de Server Side Includes</a></h2>
+
+ <p>Otro uso común de ficheros <code>.htaccess</code> es activar Server Side
+ Includes para un directorio en particular. Esto puede hacerse
+ con las siguientes directivas de configuración, colocadas en un fichero
+ <code>.htaccess</code> y el directorio deseado:</p>
+
+ <pre class="prettyprint lang-config">Options +Includes
+AddType text/html "shtml"
+AddHandler server-parsed shtml</pre>
+
+
+ <p>Tenga en cuenta que <code>AllowOverride Options</code> y
+ <code>AllowOverride FileInfo</code> deben estar activadas para que estas
+ directivas tengan efecto.</p>
+
+ <p>Por favor vea el <a href="ssi.html">tutorial de SSI</a> para una
+ explicación más completa de server-side includes.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="rewrite" id="rewrite">Reglas de Rewrite en ficheros .htaccess</a></h2>
+ <p>Cuando use <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> en
+ ficheros <code>.htaccess</code>, tenga en cuenta que el contexto
+ directorio cambia las cosas un poco. En concreto, las reglas son
+ relativas al directorio actual, en lugar de serlo de la petición de URI
+ solicitada originalmente.
+ Considere los siguientes ejemplos:</p>
+
+<pre class="prettyprint lang-config"># En httpd.conf
+RewriteRule "^/images/(.+)\.jpg" "/images/$1.png"
+
+# En .htaccess en el directorio raíz
+RewriteRule "^images/(.+)\.jpg" "images/$1.png"
+
+# En .htaccess en images/
+RewriteRule "^(.+)\.jpg" "$1.png"</pre>
+
+
+ <p>En un <code>.htaccess</code> en cualquier directorio del DocumentRoot, la
+ barra ("/") inicial se elimina del valor facilitado a <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>, y en el subdirectorio
+ <code>images</code>, se elimina <code>/images/</code> también de este valor.
+ Así, su expresión regular necesita omitir también esa parte.</p>
+
+ <p>Consulte la <a href="../rewrite/">documentación de mod_rewrite</a> para
+ más detalles al usar <code>mod_rewrite</code>.</p>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="cgi" id="cgi">Ejemplo de CGI</a></h2>
+
+ <p>Finalmente, puede que quiera usar un fichero <code>.htaccess</code> para
+ permitir la ejecución de programas CGI en un directorio en particular. Esto
+ se puede implementar con la siguiente configuración:</p>
+
+ <pre class="prettyprint lang-config">Options +ExecCGI
+AddHandler cgi-script "cgi" "pl"</pre>
+
+
+ <p>Alternativamente, si quiere considerar como programas CGI todos los
+ ficheros de un directorio concreto, esto se puede conseguir con la siguiente
+ configuración:</p>
+
+ <pre class="prettyprint lang-config">Options +ExecCGI
+SetHandler cgi-script</pre>
+
+
+ <p>Tenga en cuenta que <code>AllowOverride Options</code> y
+ <code>AllowOverride FileInfo</code> deben estar ambas activadas para que
+ estas directivas tengan efecto.</p>
+
+ <p>Por favor vea el <a href="cgi.html">tutorial CGI</a> para mayor detalle
+ sobre programación y configuración de CGI.</p>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="troubleshoot" id="troubleshoot">Resolución de problemas</a></h2>
+
+ <p>Cuando pone directivas en un fichero <code>.htaccess</code> y no obtiene
+ el efecto deseado hay una serie de cosas que pueden haber ido mal.</p>
+
+ <p>El problema más común es que <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride
+ </a></code> no está configurada para que sus directivas puedan surtir
+ efecto. Asegúrese de que no tiene <code>AllowOverride None</code>
+ configurado para el directorio en cuestión. Una buena forma de probar esto
+ es poner "basura" en su fichero <code>.htaccess</code> y recargar la página.
+ Si no se genera un error en el servidor, casi seguro que tiene configurado
+ <code>AllowOverride None</code>.</p>
+
+ <p>Si, por otro lado, obtiene errores de servidor al intentar acceder a
+ documentos, compruebe el log de errores de httpd. Seguramente le indiquen
+ que la directiva en uso en su fichero <code>.htaccess</code> no está
+ permitida.</p>
+
+ <div class="example"><p><code>
+ [Fri Sep 17 18:43:16 2010] [alert] [client 192.168.200.51] /var/www/html/.htaccess: DirectoryIndex not allowed here
+ </code></p></div>
+
+ <p>Esto indicará que o bien ha usado una directiva que no se permite nunca
+ en ficheros <code>.htaccess</code>, o que simplementa no tiene
+ <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> configurado
+ a un nivel suficiente para la directiva que ha usado. Consulte la
+ documentación para esa directiva en particular para determinar cual es el
+ caso.</p>
+
+ <p>Alternativamente, puede que le indique que hay un error de sintaxis en
+ el uso de la propia directiva.</p>
+
+ <div class="example"><p><code>
+ [Sat Aug 09 16:22:34 2008] [alert] [client 192.168.200.51] /var/www/html/.htaccess: RewriteCond: bad flag delimiters
+ </code></p></div>
+
+ <p>En este caso, el mensaje de error debería ser específico para el error de
+ sintaxis concreto que ha cometido.</p>
+
+</div></div>
+<div class="bottomlang">
+<p><span>Idiomas disponibles: </span><a href="../en/howto/htaccess.html" hreflang="en" rel="alternate" title="English"> en </a> |
+<a href="../es/howto/htaccess.html" title="Español"> es </a> |
+<a href="../fr/howto/htaccess.html" hreflang="fr" rel="alternate" title="Français"> fr </a> |
+<a href="../ja/howto/htaccess.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
+<a href="../ko/howto/htaccess.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
+<a href="../pt-br/howto/htaccess.html" hreflang="pt-br" rel="alternate" title="Português (Brasil)"> pt-br </a></p>
+</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comentarios</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
+<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/htaccess.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer">
+<p class="apache">Copyright 2017 The Apache Software Foundation.<br />Licencia bajo los términos de <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
+<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script>
+</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/htaccess.xml.es b/docs/manual/howto/htaccess.xml.es new file mode 100644 index 0000000000..0e25a9525b --- /dev/null +++ b/docs/manual/howto/htaccess.xml.es @@ -0,0 +1,475 @@ +<?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: 1741841 --> +<!-- Spanish translation : Daniel Ferradal --> +<!-- Reviewed by Luis Joaquin Gil de Bernabé Pfeiffer --> +<!-- + 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="htaccess.xml.meta"> +<parentdocument href="./">How-To / Tutoriales</parentdocument> + +<title>Tutorial del Servidor Apache HTTP: Ficheros .htaccess</title> + +<summary> + <p>Los ficheros <code>.htaccess</code> facilitan una forma de realizar + cambios en la configuración en contexto directorio.</p> +</summary> + +<section id="related"><title>Ficheros .htaccess</title> + <related> + <modulelist> + <module>core</module> + <module>mod_authn_file</module> + <module>mod_authz_groupfile</module> + <module>mod_cgi</module> + <module>mod_include</module> + <module>mod_mime</module> + </modulelist> + + <directivelist> + <directive module="core">AccessFileName</directive> + <directive module="core">AllowOverride</directive> + <directive module="core">Options</directive> + <directive module="mod_mime">AddHandler</directive> + <directive module="core">SetHandler</directive> + <directive module="mod_authn_core">AuthType</directive> + <directive module="mod_authn_core">AuthName</directive> + <directive module="mod_authn_file">AuthUserFile</directive> + <directive module="mod_authz_groupfile">AuthGroupFile</directive> + <directive module="mod_authz_core">Require</directive> + </directivelist> + + </related> + + <note>Debería evitar usar ficheros <code>.htaccess</code> completamente si + tiene acceso al fichero de configuración principal de httpd. Usar ficheros + <code>.htaccess</code> ralentiza su servidor Apache http. Cualquier + directiva que pueda incluir en un fichero <code>.htaccess</code> + estará mejor configurada dentro de una sección + <directive module="core">Directory</directive>, tendrá el mismo efecto y + mejor rendimiento.</note> +</section> + +<section id="what"> +<title>Qué son/Cómo usarlos</title> + + <p>Los ficheros <code>.htaccess</code> (o "ficheros de configuración + distribuida") facilitan una forma de realizar cambios en la configuración + en contexto directorio. Un fichero, que contiene una o más directivas, se + coloca en un documento específico de un directorio, y estas directivas + aplican a ese directorio y todos sus subdirectorios.</p> + + <note><title>Nota:</title> + <p>Si quiere llamar a su fichero <code>.htaccess</code> de otra manera, + puede cambiar el nombre del fichero usando la directiva <directive + module="core">AccessFileName</directive>. Por ejemplo, si usted prefiere + llamar al fichero <code>.config</code>, entonces puede poner lo siguiente + en el fichero de configuración de su servidor:</p> + + <highlight language="config"> +AccessFileName ".config" + </highlight> + </note> + + <p>Generalmente, los ficheros <code>.htaccess</code> usan la misma sintáxis + que los <a href="../configuring.html#syntax">ficheros de la configuración + principal</a>. Lo que puede utilizar en estos ficheros lo determina la + directiva <directive module="core">AllowOverride</directive>. Esta directiva + especifica, en categorías, qué directivas tendrán efecto si se encuentran en + un fichero <code>.htaccess</code>. Si se permite una directiva en un fichero + <code>.htaccess</code>, la documentación para esa directiva contendrá una + sección Override, especificando qué valor debe ir en + <directive module="core">AllowOverride</directive> para que se permita esa + directiva.</p> + + <p>Por ejemplo, si busca en la documentación la directiva <directive + module="core">AddDefaultCharset</directive>, encontrará que se permite en + ficheros <code>.htaccess</code>. (Vea la línea de Contexto en el sumario de + la directiva.) La línea <a + href="../mod/directive-dict.html#Context">Override</a> muestra + <code>FileInfo</code>. De este modo, debe tener al menos + <code>AllowOverride FileInfo</code> para que esta directiva se aplique en + ficheros <code>.htaccess</code>.</p> + + <example><title>Ejemplo:</title> + <table> + <tr> + <td><a + href="../mod/directive-dict.html#Context">Context:</a></td> + <td>server config, virtual host, directory, .htaccess</td> + </tr> + + <tr> + <td><a + href="../mod/directive-dict.html#Override">Override:</a></td> + <td>FileInfo</td> + </tr> + </table> + </example> + + <p>Si no está seguro de cuándo, una directiva en concreto, se puede usar en un + fichero <code>.htaccess</code>, consulte la documentación para esa directiva, + y compruebe la línea Context buscando ".htaccess".</p> + </section> + + <section id="when"><title>Cuando (no) usar ficheros .htaccess</title> + + <p>Generalmente, solo debería usar ficheros <code>.htaccess</code> cuando no + tiene acceso al fichero principal de configuración del servidor. Hay, por + ejemplo, una creencia errónea de que la autenticación de usuario debería + hacerse siempre dentro de ficheros <code>.htaccess</code>, y, más recientemente, otra creencia errónea de que las directivas de + <module>mod_rewrite</module> deben ir en ficheros <code>.htaccess</code>. + Esto sencillamente no es el caso. Puede poner las configuraciones de + autenticación de usuario en la configuración principal del servidor, y esto + es de hecho, el método preferido de configurar Apache. Del mismo modo, las + directivas <code>mod_rewrite</code> funcionan mejor, en muchos sentidos, en + el fichero de configuración principal del servidor.</p> + + <p>Los ficheros <code>.htaccess</code> deberían usarse cuando su proveedor + de contenidos le permite hacer modificaciones de configuración + en contexto directorio, pero usted no tiene acceso de root en el servidor. + En el caso de que el administrador no esté dispuesto a hacer cambios + frecuentes en la configuración, puede que sea necesario permitir a usuarios + individuales realizar estos cambios de configuración en ficheros + <code>.htaccess</code> por ellos mismos. Lo cual ocurre a menudo, por + ejemplo, en casos donde los ISP están albergando múltiples sitios web de + usuario en una sola máquina, y quieren que sus usuarios tengan la + posibilidad de modificar sus configuraciones.</p> + + <p>Aun así, generalmente, el uso de ficheros <code>.htaccess</code> debería + evitarse cuando sea posible. Cualquier configuración que consideraría poner + en un fichero <code>.htaccess</code>, puede usarse con la misma efectividad + en una sección <directive module="core" + type="section">Directory</directive> en el fichero de configuración + del servidor.</p> + + <p>Hay dos razones para evitar el uso de ficheros <code>.htaccess</code>.</p> + + <p>La primera es el rendimiento. Cuando <directive + module="core">AllowOverride</directive> + está configurado para permitir el uso de ficheros <code>.htaccess</code>, + httpd buscará ficheros <code>.htaccess</code> en cada directorio. Así, + permitiendo ficheros <code>.htaccess</code> provoca una pérdida de + rendimiento, ¡incluso aunque no los use! Además, los ficheros + <code>.htaccess</code> se cargan cada vez que se solicita un documento.</p> + + <p>Además tenga en cuenta que httpd debe buscar ficheros + <code>.htaccess</code> en todos los directorios de mayor jerarquía, + para poder terner la lista completa de directivas que debe aplicar. (Vea + la sección sobre <a href="#how">Cómo se aplican las directivas</a>.) Así, si + se solicita un fichero de un directorio <code>/www/htdocs/example</code>, + httpd debe buscar los siguientes ficheros:</p> + + <example> + /.htaccess<br /> + /www/.htaccess<br /> + /www/htdocs/.htaccess<br /> + /www/htdocs/example/.htaccess + </example> + + <p>De esta manera, por cada acceso a un fichero de ese directorio, hay 4 + accesos adicionales al sistema de ficheros, incluso si ninguno de esos + ficheros está presente. (Tenga en cuenta que este caso solo se daría si los + ficheros <code>.htaccess</code> están activados en <code>/</code>, que + generalmente no es el caso.).</p> + + <p>En el caso de las directivas <directive + module="mod_rewrite">RewriteRule</directive>, en el contexto de + <code>.htaccess</code> estas expresiones regulares deben recompilarse con + cada solicitud a ese directorio, cuando en el contexto de configuración del + servidor solo se compilan una vez y se cachean. Adicionalmente, las reglas + en sí mismas son más complicadas, puesto que uno debe sortear las + restricciones que vienen acompañadas del contexto directorio y + <code>mod_rewrite</code>. Consulte la <a + href="../rewrite/intro.html#htaccess">Guía de Rewrite</a> para un mayor + detalle sobre este tema.</p> + + <p>La segunda consideración es de seguridad. Estará permitiendo que usuarios + modifiquen la configuración del servidor, lo cual puede dar lugar a cambios sobre los que usted no tendrá ningún control. Medite profundamente si debe + dar a sus usuarios ese privilegio. Además tenga en cuenta que dar a los usuarios menos privilegios de los que necesitan dará lugar a más peticiones + de soporte. Asegúrese de que le indica a sus usuarios claramente el nivel de privilegios que les está dando. Especificando exactamente cómo ha + configurado <directive module="core">AllowOverride</directive>, e invíteles + a revisar la documentación relacionada, lo cual le ahorrará + bastantes confusiones más adelante.</p> + + <p>Tenga en cuenta que esto es equivalente por completo a poner un fichero + <code>.htaccess</code> en un directorio <code>/www/htdocs/example</code> + con una directiva, y poner la misma directiva en una sección + Directory <code><Directory "/www/htdocs/example"></code> en su + configuración principal del servidor:</p> + + <p>Fichero <code>.htaccess</code> en <code>/www/htdocs/example</code>:</p> + + <example><title>Contenido de fichero .htaccess en + <code>/www/htdocs/example</code></title> + <highlight language="config"> +AddType text/example ".exm" + </highlight> + </example> + + <example><title>Sección de su fichero <code>httpd.conf</code></title> + <highlight language="config"> +<Directory "/www/htdocs/example"> + AddType text/example ".exm" +</Directory> + </highlight> + </example> + + <p>Aun así, poniendo ésta en el fichero de configuración dará como resultado + una menor pérdida de rendimiento, y como la configuración se carga una vez + cuando el httpd arranca, en lugar de cada vez que se solicita un fichero.</p> + + <p>El uso de ficheros <code>.htaccess</code> puede desactivarse por completo + configurando la directiva <directive module="core">AllowOverride</directive> + a <code>none</code>:</p> + + <highlight language="config"> +AllowOverride None + </highlight> +</section> + +<section id="how"><title>How directives are applied</title> + + <p>Las directivas de configuración que se encuentran en el fichero + <code>.htaccess</code> se aplican al directorio en el que el fichero + <code>.htaccess</code> se encuentra, y a todos sus subdirectorios. Sin + embargo, es importante recordar que puede haber otros ficheros + <code>.htaccess</code> en directorios previos. Las directivas se aplican en + el orden en el que se encuentran. Por lo tanto, un fichero + <code>.htaccess</code> puede sobrescribir directivas que se encuentran + en ficheros <code>.htaccess</code> que se encuentran en directorios previos + del árbol de directorios. Y estos, en cambio, pueden haber sobrescrito + directivas que se encontraban más arriba, o en el fichero principal de + configuración del servidor mismo.</p> + + <p>Ejemplo:</p> + + <p>En el directorio <code>/www/htdocs/example1</code> tenemos un fichero + <code>.htaccess</code> que contiene lo siguiente:</p> + + <highlight language="config"> +Options +ExecCGI + </highlight> + + <p>(Nota: debe terner "<code>AllowOverride Options</code>" configurado para + permitir el uso de la directiva "<directive + module="core">Options</directive>" en ficheros + <code>.htaccess</code> files.)</p> + + <p>En el directorio <code>/www/htdocs/example1/example2</code> tenemos un + fichero <code>.htaccess</code> que contiene:</p> + + <highlight language="config"> +Options Includes + </highlight> + + <p>Por este segundo fichero <code>.htaccess</code>, en el directorio + <code>/www/htdocs/example1/example2</code>, la ejecución de CGI execution no + está permitida, porque solo se ha definido <code>Options Includes</code>, + que sobrescribe completamente una configuración previa que se pudiera haber + definido.</p> + + <section id="merge"><title>Incorporando el .htaccess en los ficheros de + configuración principal</title> + + <p>Como se ha comentado en la documentación en las <a + href="../sections.html">Secciones de Configuración</a>, los ficheros + <code>.htaccess</code> pueden sobrescribir las secciones <directive + type="section" module="core">Directory</directive> por el directorio + correspondiente, pero se sobrescribirán por otros tipos de secciones de + configuración de los ficheros de configuración principal. Este hecho se + puede usar para forzar ciertas configuraciones, incluso en presencia + de una configuración laxa de + <directive module="core">AllowOverride</directive>. Por ejemplo, para + prevenir la ejecución de un script mientras se permite cualquier otra cosa + en <code>.htaccess</code> puede usar:</p> + + <highlight language="config"> +<Directory "/www/htdocs"> + AllowOverride All +</Directory> + +<Location "/"> + Options +IncludesNoExec -ExecCGI +</Location> + </highlight> + + <note>Este ejemplo asume que su <directive + module="core">DocumentRoot</directive> es <code>/www/htdocs</code>.</note> +</section> + +</section> + +<section id="auth"><title>Ejemplo de Autenticación</title> + + <p>Si saltó directamente a esta parte del documento para averiguar como + hacer la autenticación, es important que tenga en cuenta una cosa. Hay una + creencia errónea de que necesita usar ficheros <code>.htaccess</code> para + configurar autenticación con contraseña. Este no es el caso. Colocar las + directivas de autenticación en una sección + <directive module="core" type="section">Directory</directive>, en su fichero + de configuración principal, es el método recomendado para configurar esto, + y los ficheros <code>.htaccess</code> deberían usarse solamente si no tiene + acceso al fichero de configuración principal del servidor. Vea <a + href="#when">más arriba</a> una explicación de cuando debería y cuando no + debería usar ficheros <code>.htaccess</code>.</p> + + <p>Dicho esto, si todavía cree que debe usar el fichero + <code>.htaccess</code>, podrá ver que una configuración como la que sigue + podría servirle.</p> + + <p>Contenido del fichero <code>.htaccess</code>:</p> + + <highlight language="config"> +AuthType Basic +AuthName "Password Required" +AuthUserFile "/www/passwords/password.file" +AuthGroupFile "/www/passwords/group.file" +Require group admins + </highlight> + + <p>Tenga en cuenta que <code>AllowOverride AuthConfig</code> debe estar + habilitado para que estas directivas tengan algún efecto.</p> + + <p>Por favor vea el <a href="auth.html">tutorial de autenticación</a> para + una explicación más completa de la autenticación y la autorización.</p> +</section> + +<section id="ssi"><title>Ejemplo de Server Side Includes</title> + + <p>Otro uso común de ficheros <code>.htaccess</code> es activar Server Side + Includes para un directorio en particular. Esto puede hacerse + con las siguientes directivas de configuración, colocadas en un fichero + <code>.htaccess</code> y el directorio deseado:</p> + + <highlight language="config"> +Options +Includes +AddType text/html "shtml" +AddHandler server-parsed shtml + </highlight> + + <p>Tenga en cuenta que <code>AllowOverride Options</code> y + <code>AllowOverride FileInfo</code> deben estar activadas para que estas + directivas tengan efecto.</p> + + <p>Por favor vea el <a href="ssi.html">tutorial de SSI</a> para una + explicación más completa de server-side includes.</p> +</section> + +<section id="rewrite"><title>Reglas de Rewrite en ficheros .htaccess</title> + <p>Cuando use <directive module="mod_rewrite">RewriteRule</directive> en + ficheros <code>.htaccess</code>, tenga en cuenta que el contexto + directorio cambia las cosas un poco. En concreto, las reglas son + relativas al directorio actual, en lugar de serlo de la petición de URI + solicitada originalmente. + Considere los siguientes ejemplos:</p> + +<highlight language="config"> +# En httpd.conf +RewriteRule "^/images/(.+)\.jpg" "/images/$1.png" + +# En .htaccess en el directorio raíz +RewriteRule "^images/(.+)\.jpg" "images/$1.png" + +# En .htaccess en images/ +RewriteRule "^(.+)\.jpg" "$1.png" +</highlight> + + <p>En un <code>.htaccess</code> en cualquier directorio del DocumentRoot, la + barra ("/") inicial se elimina del valor facilitado a <directive + module="mod_rewrite">RewriteRule</directive>, y en el subdirectorio + <code>images</code>, se elimina <code>/images/</code> también de este valor. + Así, su expresión regular necesita omitir también esa parte.</p> + + <p>Consulte la <a href="../rewrite/">documentación de mod_rewrite</a> para + más detalles al usar <code>mod_rewrite</code>.</p> + +</section> + +<section id="cgi"><title>Ejemplo de CGI</title> + + <p>Finalmente, puede que quiera usar un fichero <code>.htaccess</code> para + permitir la ejecución de programas CGI en un directorio en particular. Esto + se puede implementar con la siguiente configuración:</p> + + <highlight language="config"> +Options +ExecCGI +AddHandler cgi-script "cgi" "pl" + </highlight> + + <p>Alternativamente, si quiere considerar como programas CGI todos los + ficheros de un directorio concreto, esto se puede conseguir con la siguiente + configuración:</p> + + <highlight language="config"> +Options +ExecCGI +SetHandler cgi-script + </highlight> + + <p>Tenga en cuenta que <code>AllowOverride Options</code> y + <code>AllowOverride FileInfo</code> deben estar ambas activadas para que + estas directivas tengan efecto.</p> + + <p>Por favor vea el <a href="cgi.html">tutorial CGI</a> para mayor detalle + sobre programación y configuración de CGI.</p> + +</section> + +<section id="troubleshoot"><title>Resolución de problemas</title> + + <p>Cuando pone directivas en un fichero <code>.htaccess</code> y no obtiene + el efecto deseado hay una serie de cosas que pueden haber ido mal.</p> + + <p>El problema más común es que <directive module="core">AllowOverride + </directive> no está configurada para que sus directivas puedan surtir + efecto. Asegúrese de que no tiene <code>AllowOverride None</code> + configurado para el directorio en cuestión. Una buena forma de probar esto + es poner "basura" en su fichero <code>.htaccess</code> y recargar la página. + Si no se genera un error en el servidor, casi seguro que tiene configurado + <code>AllowOverride None</code>.</p> + + <p>Si, por otro lado, obtiene errores de servidor al intentar acceder a + documentos, compruebe el log de errores de httpd. Seguramente le indiquen + que la directiva en uso en su fichero <code>.htaccess</code> no está + permitida.</p> + + <example> + [Fri Sep 17 18:43:16 2010] [alert] [client 192.168.200.51] /var/www/html/.htaccess: DirectoryIndex not allowed here + </example> + + <p>Esto indicará que o bien ha usado una directiva que no se permite nunca + en ficheros <code>.htaccess</code>, o que simplementa no tiene + <directive module="core">AllowOverride</directive> configurado + a un nivel suficiente para la directiva que ha usado. Consulte la + documentación para esa directiva en particular para determinar cual es el + caso.</p> + + <p>Alternativamente, puede que le indique que hay un error de sintaxis en + el uso de la propia directiva.</p> + + <example> + [Sat Aug 09 16:22:34 2008] [alert] [client 192.168.200.51] /var/www/html/.htaccess: RewriteCond: bad flag delimiters + </example> + + <p>En este caso, el mensaje de error debería ser específico para el error de + sintaxis concreto que ha cometido.</p> + +</section> + +</manualpage> diff --git a/docs/manual/howto/htaccess.xml.meta b/docs/manual/howto/htaccess.xml.meta index a962e7243c..f230926987 100644 --- a/docs/manual/howto/htaccess.xml.meta +++ b/docs/manual/howto/htaccess.xml.meta @@ -8,6 +8,7 @@ <variants> <variant>en</variant> + <variant>es</variant> <variant>fr</variant> <variant outdated="yes">ja</variant> <variant outdated="yes">ko</variant> diff --git a/docs/manual/howto/http2.html.es b/docs/manual/howto/http2.html.es new file mode 100644 index 0000000000..c85ca8e28c --- /dev/null +++ b/docs/manual/howto/http2.html.es @@ -0,0 +1,283 @@ +<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head>
+<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" />
+<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + -->
+<title>Guía HTTP/2 - Servidor Apache HTTP Versión 2.4</title>
+<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
+<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
+<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
+<script src="../style/scripts/prettify.min.js" type="text/javascript">
+</script>
+
+<link href="../images/favicon.ico" rel="shortcut icon" /></head>
+<body id="manual-page"><div id="page-header">
+<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p>
+<p class="apache">Versión 2.4 del Servidor HTTP Apache</p>
+<img alt="" src="../images/feather.png" /></div>
+<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Servidor HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentación</a> > <a href="../">Versión 2.4</a> > <a href="./">How-To / Tutoriales</a></div><div id="page-content"><div id="preamble"><h1>Guía HTTP/2</h1>
+<div class="toplang">
+<p><span>Idiomas disponibles: </span><a href="../en/howto/http2.html" hreflang="en" rel="alternate" title="English"> en </a> |
+<a href="../es/howto/http2.html" title="Español"> es </a> |
+<a href="../fr/howto/http2.html" hreflang="fr" rel="alternate" title="Français"> fr </a></p>
+</div>
+
+ <p>Esta es la guía para configurar HTTP/2 en Apache httpd. Ésta
+ característica es <em>experimental</em> así que es de esperar que algunas
+ directivas e interfaces cambien con nuevas versiones.
+ </p>
+ </div>
+<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#protocol">El protocolo HTTP/2</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#implementation">HTTP/2 en Apache httpd</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#building">Compilar httpd con soporte HTTP/2</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#basic-config">Configuración básica</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#mpm-config">Configuración MPM</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#clients">Clientes</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#tools">Herramientas útiles para depurar HTTP/2</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#push">Server Push</a></li>
+</ul><h3>Consulte también</h3><ul class="seealso"><li><a href="../mod/mod_http2.html">mod_http2</a></li><li><a href="#comments_section">Comentarios</a></li></ul></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="protocol" id="protocol">El protocolo HTTP/2</a></h2>
+
+
+ <p>HTTP/2 es la evolución del protocolo de la capa de aplicación con más
+ éxito, HTTP. Se centra en hacer un uso más eficiente de los recursos de red. No cambia la característica fundamental de HTTP, la semántica. Todavía hay solicitudes, respuestas, cabeceras y todo los elementos típicos de HTTP/1. Así que, si ya conoce HTTP/1, también conoce el 95% de HTTP/2.</p>
+
+ <p>Se ha escrito mucho sobre HTTP/2 y de cómo funciona. La norma más
+ estándar es, por supuesto, su
+ <a href="https://tools.ietf.org/html/rfc7540">RFC 7540</a>
+ (<a href="http://httpwg.org/specs/rfc7540.html"> también disponible en un
+ formato más legible, YMMV</a>). Así que, ahí encontrará toda la especificación del protocolo.</p>
+
+ <p>Pero, como con todos los RFC, no es ideal como primera lectura. Es mejor
+ entender primero <em>qué</em> se quiere hacer y después leer el RFC sobre
+ <em>cómo</em> hacerlo. Un documento mucho mejor con el que empezar es
+ <a href="https://daniel.haxx.se/http2/">http2 explicado</a>
+ por Daniel Stenberg, el autor de <a href="https://curl.haxx.se">curl</a>.
+ ¡También está disponible cada vez en un mayor número lenguajes!</p>
+
+ <p>Si le parece demasiado largo, o no lo ha leido, hay algunos términos
+ y elementos a tener en cuenta cuando lea este documento:</p>
+ <ul>
+ <li>HTTP/2 es un <strong>protocolo binario</strong>, al contrario que HTTP 1.1 que es texto plano. La intención para HTTP 1.1 es que sea legible (por ejemplo capturando el tráfico de red) mientras que para HTTP/2 no. Más información en el FAQ oficial <a href="https://http2.github.io/faq/#why-is-http2-binary">¿Por qué es binario HTTP/2?</a></li>
+
+ <li><strong>h2</strong> es HTTP/2 sobre TLS (negociación de protocolo a través de ALPN).</li>
+
+ <li><strong>h2c</strong> es HTTP/2 sobre TCP.</li>
+
+ <li>Un <strong>frame</strong> es la unidad más pequeña de comunicación dentro de una conexión HTTP/2, que consiste en una cabecera y una secuencia de octetos de longitud variable estructurada de acuerdo con el tipo de frame. Más información en la documentación oficial <a href="http://httpwg.org/specs/rfc7540.html#FramingLayer">Sección de Capa de Frame</a>.</li>
+
+ <li>Un <strong>stream</strong> es un flujo bidireccional de frames dentro de una conexión HTTP/2. El concepto correspondiente en HTTP 1.1 es un intercambio de mensajes de solicitud/respuesta. Más información en la documentación oficial <a href="http://httpwg.org/specs/rfc7540.html#StreamsLayer">Sección Capa de Stream</a>.</li>
+
+ <li>HTTP/2 es capaz de llevar <strong>múltiples streams</strong> de datos sobre la misma conexión TCP, evitando la clásica solicitud lenta "head-of-line blocking" de HTTP 1.1 y evitando generar múltiples conexiones TCP para cada solicitud/respuesta (KeepAlive parcheó el problema en HTTP 1.1 pero no lo resolvió completamente).</li>
+ </ul>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="implementation" id="implementation">HTTP/2 en Apache httpd</a></h2>
+
+ <p>El protocolo HTTP/2 se implementa con su propio módulo httpd, llamado acertadamente <a href="../mod/mod_http2.html">mod_http2</a>. Incluye el set completo de características descritas por el RFC 7540 y soporta HTTP/2 sobre texto plano (http:), así como conexiones seguras (https:). La variante de texto plano se llama '<code>h2c</code>', la segura '<code>h2</code>'. Para <code>h2c</code> permite el modo <em>direct</em>
+ y el <code>Upgrade:</code> a través de una solicitud inicial HTTP/1.</p>
+
+ <p>Una característica de HTTP/2 que ofrece capacidades nuevas para desarrolladores de web es <a href="#push">Server Push</a>. Vea esa sección para saber como su aplicación web puede hacer uso de ella.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="building" id="building">Compilar httpd con soporte HTTP/2</a></h2>
+
+ <p><a href="../mod/mod_http2.html">mod_http2</a> usa la librería <a href="https://nghttp2.org">nghttp2</a>
+ como su implementación base. Para compilar <code>mod_http2</code> necesita al menos la versión 1.2.1 de <code>libnghttp2</code> instalada en su sistema.</p>
+
+ <p>Cuando usted ejecuta <code>./configure</code> en el código fuente de Apache HTTPD, necesita indicarle '<code>--enable-http2</code>' como una opción adicional para activar la compilación de este módulo. Si su <code>libnghttp2</code> está ubicado en una ruta no habitual (cualquiera que sea en su sistema operativo), puede indicar su ubicación con '<code>--with-nghttp2=<path></code>' para <code>./configure</code>.</p>
+
+ <p>Aunque puede que eso sirva para la mayoría, habrá quien prefiera un <code>nghttp2</code> compilado estáticamente para este módulo. Para ellos existe la opción <code>--enable-nghttp2-staticlib-deps</code>. Funciona de manera muy similar a como uno debe enlazar openssl estáticamente para mod_ssl.</p>
+
+ <p>Hablando de SSL, necesita estar al tanto de que la mayoría de los navegadores hablan HTTP/2 solo con URLs <code>https:</code>. Así que necesita un servidor con soporte SSL. Pero no solo eso, necesitará una librería SSL que de soporte a la extensión <code>ALPN</code>. Si usa OpenSSL, necesita al menos la versión 1.0.2.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="basic-config" id="basic-config">Configuración básica</a></h2>
+
+
+ <p>Cuando tiene un <code>httpd</code> compilado con <code>mod_http2</code> necesita una configuración básica para activarlo. Lo primero, como con cualquier otro módulo de Apache, es que necesita cargarlo:</p>
+
+ <pre class="prettyprint lang-config">LoadModule http2_module modules/mod_http2.so</pre>
+
+
+ <p>La segunda directiva que necesita añadir a la configuración de su servidor es:</p>
+
+ <pre class="prettyprint lang-config">Protocols h2 http/1.1</pre>
+
+
+ <p>Esto permite h2, la variante segura, para ser el protocolo preferido de las conexiones en su servidor. Cuando quiera habilitar todas las variantes de HTTP/2, entonces simplemente configure:</p>
+
+ <pre class="prettyprint lang-config">Protocols h2 h2c http/1.1</pre>
+
+
+ <p>Dependiendo de dónde pone esta directiva, afecta a todas las conexiones o solo a las de ciertos host virtuales. La puede anidar, como en:</p>
+
+ <pre class="prettyprint lang-config">Protocols http/1.1
+<VirtualHost ...>
+ ServerName test.example.org
+ Protocols h2 http/1.1
+</VirtualHost></pre>
+
+
+ <p>Esto solo permite HTTP/1, excepto conexiones SSL hacia <code>test.example.org</code> que ofrecen HTTP/2.</p>
+
+ <div class="note"><h3>Escoger un SSLCipherSuite seguro</h3>
+ <p>Es necesario configurar <code class="directive"><a href="../mod/mod_ssl.html#sslciphersuite">SSLCipherSuite</a></code> con una suite segura de cifrado TLS. La versión actual de mod_http2 no fuerza ningún cifrado pero la mayoría de los clientes si lo hacen. Encaminar un navegador hacia un servidor con <code>h2</code> activado con una suite inapropiada de cifrados forzará al navegador a rehusar e intentar conectar por HTTP 1.1. Esto es un error común cuando se configura httpd con HTTP/2 por primera vez, ¡así que por favor tenga en cuenta que debe evitar largas sesiones de depuración! Si quiere estar seguro de la suite de cifrados que escoja, por favor evite los listados en la <a href="http://httpwg.org/specs/rfc7540.html#BadCipherSuites">Lista Negra de TLS para HTTP/2</a>.</p>
+ </div>
+
+ <p>El orden de los protocolos mencionados también es relevante. Por defecto, el primero es el protocolo preferido. Cuando un cliente ofrece múltiples opciones, la que esté más a la izquierda será la escogida. En</p>
+ <pre class="prettyprint lang-config">Protocols http/1.1 h2</pre>
+
+
+ <p>el protocolo preferido es HTTP/1 y siempre será seleccionado a menos que el cliente <em>sólo</em> soporte h2. Puesto que queremos hablar HTTP/2 con clientes que lo soporten, el orden correcto es:</p>
+
+ <pre class="prettyprint lang-config">Protocols h2 h2c http/1.1</pre>
+
+
+ <p>Hay algo más respecto al orden: el cliente también tiene sus propias preferencias. Si quiere, puede configurar su servidor para seleccionar el protocolo preferido por el cliente:</p>
+
+ <pre class="prettyprint lang-config">ProtocolsHonorOrder Off</pre>
+
+
+ <p>Hace que el orden en que <em>usted</em> escribió los Protocols sea irrelevante y sólo el orden de preferencia del cliente será decisorio.</p>
+
+ <p>Una última cosa: cuando usted configura los protocolos no se comprueba si son correctos o están bien escritos. Puede mencionar protocolos que no existen, así que no hay necesidad de proteger <code>Protocols</code> con ningún <code>IfModule</code> de comprobación.</p>
+
+ <p>Para más consejos avanzados de configuración, vea la <a href="../mod/mod_http2.html#dimensioning">
+ sección de módulos sobre dimensionamiento</a> y <a href="../mod/mod_http2.html#misdirected">
+ como gestionar multiples hosts con el mismo certificado</a>.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="mpm-config" id="mpm-config">Configuración MPM</a></h2>
+
+
+ <p>HTTP/2 está soportado en todos los módulos de multi-proceso que se ofrecen con httpd. Aun así, si usa el mpm <code>prefork</code>, habrá restricciones severas.</p>
+
+ <p>En <code>prefork</code>, <code>mod_http2</code> solo procesará una solicitud cada vez por conexión. Pero los clientes, como los navegadores, enviarán muchas solicitudes al mismo tiempo. Si una de ellas tarda mucho en procesarse (o hace un sondeo que dura más de la cuenta), las otras solicitudes se quedarán atascadas.</p>
+
+ <p><code>mod_http2</code> no evitará este límite por defecto. El motivo es que <code>prefork</code> hoy en día solo se escoge si ejecuta motores de proceso que no están preparados para multi-hilo, p.ej. fallará con más de una solicitud.</p>
+
+ <p>Si su configuración lo soporta, hoy en día <code>event</code> es el mejor mpm que puede usar.</p>
+
+ <p>Si realmente está obligado a usar <code>prefork</code> y quiere multiples solicitudes, puede configurar la directiva <code class="directive"><a href="../mod/mod_http2.html#h2minworkers">H2MinWorkers</a></code> para hacerlo posible. Sin embargo, si esto falla, es bajo su cuenta y riesgo.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="clients" id="clients">Clientes</a></h2>
+
+
+ <p>Casi todos los navegadores modernos dan soporte a HTTP/2, pero solo en conexiones SSL: Firefox (v43), Chrome (v45), Safari (since v9), iOS Safari (v9), Opera (v35), Chrome para Android (v49) e Internet Explorer (v11 en Windows10) (<a href="http://caniuse.com/#search=http2">Fuente</a>).</p>
+
+ <p>Otros clientes, así cómo otros servidores, están listados en la
+ <a href="https://github.com/http2/http2-spec/wiki/Implementations">wiki de Implementaciones</a>, entre ellos, implementaciones para c, c++, common lisp, dart, erlang, haskell, java, nodejs, php, python, perl, ruby, rust, scala y swift.</p>
+
+ <p>Muchos de las implementaciones de clientes que no son navegadores soportan HTTP/2 sobre texto plano, h2c. La más versátil es <a href="https://curl.haxx.se">curl</a>.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="tools" id="tools">Herramientas útiles para depurar HTTP/2</a></h2>
+
+
+ <p>La primera herramienta a mencionar es por supuesto <a href="https://curl.haxx.se">curl</a>. Por favor asegúrese de que su versión soporta HTTP/2 comprobando sus <code>Características</code>:</p>
+ <pre class="prettyprint lang-config"> $ curl -V
+ curl 7.45.0 (x86_64-apple-darwin15.0.0) libcurl/7.45.0 OpenSSL/1.0.2d zlib/1.2.8 nghttp2/1.3.4
+ Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 [...]
+ Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP <strong>HTTP2</strong>
+ </pre>
+
+ <div class="note"><h3>Notas sobre Mac OS homebrew</h3>
+ brew install curl --with-openssl --with-nghttp2
+ </div>
+ <p>Y para una inspección en gran profundidad <a href="https://wiki.wireshark.org/HTTP2">wireshark</a>.</p>
+ <p>El paquete <a href="https://nghttp2.org">nghttp2</a> también incluye clientes, tales como:</p>
+ <ul>
+ <li><a href="https://nghttp2.org/documentation/nghttp.1.html">nghttp
+ </a> - util para visualizar la frames de HTTP/2 y tener una mejor idea de como funciona el protocolo.</li>
+ <li><a href="https://nghttp2.org/documentation/h2load-howto.html">h2load</a> - útil para hacer un stress-test de su servidor.</li>
+ </ul>
+
+ <p>Chrome ofrece logs detallados de HTTP/2 en sus conexiones a través de la <a href="chrome://net-internals/#http2">página especial de net-internals</a>. También hay una extensión interesante para <a href="https://chrome.google.com/webstore/detail/http2-and-spdy-indicator/mpbpobfflnpcgagjijhmgnchggcjblin?hl=en">Chrome</a> y <a href="https://addons.mozilla.org/en-us/firefox/addon/spdy-indicator/">Firefox</a> con la que visualizar cuando su navegador usa HTTP/2.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="push" id="push">Server Push</a></h2>
+
+
+ <p>El protocolo HTTP/2 permite al servidor hacer PUSH de respuestas a un cliente que nunca las solicitó. El tono de la conversación es: "Aquí tiene una solicitud que nunca envió y la respuesta llegará pronto..."</p>
+
+ <p>Pero hay restricciones: el cliente puede deshabilitar esta característica y el servidor entonces solo podrá hacer PUSH en una solicitud que hizo previamente del cliente.</p>
+
+ <p>La intención es permitir al servidor enviar recursos que el cliente seguramente vaya a necesitar, p. ej. un recurso css o javascript que pertenece a una página html que el cliente solicitó, un grupo de imágenes a las que se hace referencia en un css, etc.</p>
+
+ <p>La ventaja para el cliente es que ahorra tiempo para solicitudes que pueden tardar desde unos pocos milisegundos a medio segundo, dependiendo de la distancia entre el cliente y el servidor. La desventaja es que el cliente puede recibir cosas que ya tiene en su cache. Por supuesto que HTTP/2 soporta cancelación previa de tales solicitudes, pero aun así se malgastan recursos.</p>
+
+ <p>Resumiendo: no hay una estrategia mejor sobre cómo usar esta característica de HTTP/2 y todo el mundo está experimentando con ella. Así que, ¿cómo experimenta usted con ella en Apache httpd?</p>
+
+ <p><code>mod_http2</code> busca e inspecciona las cabeceras de respuesta
+ <code>Link</code> con cierto formato:</p>
+
+ <pre class="prettyprint lang-config">Link </xxx.css>;rel=preload, </xxx.js>; rel=preload</pre>
+
+
+ <p>Si la conexión soporta PUSH, estos dos recursos se enviarán al cliente. Como desarrollador web, puede configurar estas cabeceras o bien directamente en la respuesta de su aplicación o configurar su servidor con:</p>
+
+ <pre class="prettyprint lang-config"><Location /xxx.html>
+ Header add Link "</xxx.css>;rel=preload"
+ Header add Link "</xxx.js>;rel=preload"
+</Location></pre>
+
+
+ <p>Si quiere usar enlaces con <code>preload</code> sin activar un PUSH, puede usar el parámetro <code>nopush</code>, como en:</p>
+
+ <pre class="prettyprint lang-config">Link </xxx.css>;rel=preload;nopush</pre>
+
+
+ <p>o puede desactivar PUSH para su servidor por completo con la directiva </p>
+
+ <pre class="prettyprint lang-config">H2Push Off</pre>
+
+
+ <p>Y hay más:</p>
+
+ <p>El módulo mantiene un registro de lo que se ha enviado con PUSH para cada conexión (hashes de URLs, básicamente) y no hará PUSH del mismo recurso dos veces. Cuando la conexión se cierra, la información es descartada.</p>
+
+ <p>Hay gente pensando cómo un cliente puede decirle al servidor lo que ya tiene, para evitar los PUSH de esos elementos, pero eso algo muy experimental ahora mismo.</p>
+
+ <p>Otro borrador experimental que ha sido implementado en
+ <code>mod_http2</code> es el <a href="https://tools.ietf.org/html/draft-ruellan-http-accept-push-policy-00"> Campo de Cabecera
+ Accept-Push-Policy</a> en la que un cliente puede, para cada solicitud, definir qué tipo de PUSH acepta.</p>
+ </div></div>
+<div class="bottomlang">
+<p><span>Idiomas disponibles: </span><a href="../en/howto/http2.html" hreflang="en" rel="alternate" title="English"> en </a> |
+<a href="../es/howto/http2.html" title="Español"> es </a> |
+<a href="../fr/howto/http2.html" hreflang="fr" rel="alternate" title="Français"> fr </a></p>
+</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comentarios</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
+<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/http2.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer">
+<p class="apache">Copyright 2017 The Apache Software Foundation.<br />Licencia bajo los términos de <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
+<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script>
+</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/http2.xml.es b/docs/manual/howto/http2.xml.es new file mode 100644 index 0000000000..ae56677881 --- /dev/null +++ b/docs/manual/howto/http2.xml.es @@ -0,0 +1,258 @@ +<?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: 1780813 --> +<!-- Spanish translation : Daniel Ferradal --> +<!-- Reviewed & updated by Luis Gil de Bernabé Pfeiffer lgilbernabe[AT]apache.org --> + +<!-- + 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="http2.xml.meta"> +<parentdocument href="./">How-To / Tutoriales</parentdocument> + + <title>Guía HTTP/2</title> + + <summary> + <p>Esta es la guía para configurar HTTP/2 en Apache httpd. Ésta + característica es <em>experimental</em> así que es de esperar que algunas + directivas e interfaces cambien con nuevas versiones. + </p> + </summary> + <seealso><a href="../mod/mod_http2.html">mod_http2</a></seealso> + + <section id="protocol"> + <title>El protocolo HTTP/2</title> + + <p>HTTP/2 es la evolución del protocolo de la capa de aplicación con más + éxito, HTTP. Se centra en hacer un uso más eficiente de los recursos de red. No cambia la característica fundamental de HTTP, la semántica. Todavía hay solicitudes, respuestas, cabeceras y todo los elementos típicos de HTTP/1. Así que, si ya conoce HTTP/1, también conoce el 95% de HTTP/2.</p> + + <p>Se ha escrito mucho sobre HTTP/2 y de cómo funciona. La norma más + estándar es, por supuesto, su + <a href="https://tools.ietf.org/html/rfc7540">RFC 7540</a> + (<a href="http://httpwg.org/specs/rfc7540.html"> también disponible en un + formato más legible, YMMV</a>). Así que, ahí encontrará toda la especificación del protocolo.</p> + + <p>Pero, como con todos los RFC, no es ideal como primera lectura. Es mejor + entender primero <em>qué</em> se quiere hacer y después leer el RFC sobre + <em>cómo</em> hacerlo. Un documento mucho mejor con el que empezar es + <a href="https://daniel.haxx.se/http2/">http2 explicado</a> + por Daniel Stenberg, el autor de <a href="https://curl.haxx.se">curl</a>. + ¡También está disponible cada vez en un mayor número lenguajes!</p> + + <p>Si le parece demasiado largo, o no lo ha leido, hay algunos términos + y elementos a tener en cuenta cuando lea este documento:</p> + <ul> + <li>HTTP/2 es un <strong>protocolo binario</strong>, al contrario que HTTP 1.1 que es texto plano. La intención para HTTP 1.1 es que sea legible (por ejemplo capturando el tráfico de red) mientras que para HTTP/2 no. Más información en el FAQ oficial <a href="https://http2.github.io/faq/#why-is-http2-binary">¿Por qué es binario HTTP/2?</a></li> + + <li><strong>h2</strong> es HTTP/2 sobre TLS (negociación de protocolo a través de ALPN).</li> + + <li><strong>h2c</strong> es HTTP/2 sobre TCP.</li> + + <li>Un <strong>frame</strong> es la unidad más pequeña de comunicación dentro de una conexión HTTP/2, que consiste en una cabecera y una secuencia de octetos de longitud variable estructurada de acuerdo con el tipo de frame. Más información en la documentación oficial <a href="http://httpwg.org/specs/rfc7540.html#FramingLayer">Sección de Capa de Frame</a>.</li> + + <li>Un <strong>stream</strong> es un flujo bidireccional de frames dentro de una conexión HTTP/2. El concepto correspondiente en HTTP 1.1 es un intercambio de mensajes de solicitud/respuesta. Más información en la documentación oficial <a href="http://httpwg.org/specs/rfc7540.html#StreamsLayer">Sección Capa de Stream</a>.</li> + + <li>HTTP/2 es capaz de llevar <strong>múltiples streams</strong> de datos sobre la misma conexión TCP, evitando la clásica solicitud lenta "head-of-line blocking" de HTTP 1.1 y evitando generar múltiples conexiones TCP para cada solicitud/respuesta (KeepAlive parcheó el problema en HTTP 1.1 pero no lo resolvió completamente).</li> + </ul> + </section> + + <section id="implementation"> + <title>HTTP/2 en Apache httpd</title> + <p>El protocolo HTTP/2 se implementa con su propio módulo httpd, llamado acertadamente <a href="../mod/mod_http2.html">mod_http2</a>. Incluye el set completo de características descritas por el RFC 7540 y soporta HTTP/2 sobre texto plano (http:), así como conexiones seguras (https:). La variante de texto plano se llama '<code>h2c</code>', la segura '<code>h2</code>'. Para <code>h2c</code> permite el modo <em>direct</em> + y el <code>Upgrade:</code> a través de una solicitud inicial HTTP/1.</p> + + <p>Una característica de HTTP/2 que ofrece capacidades nuevas para desarrolladores de web es <a href="#push">Server Push</a>. Vea esa sección para saber como su aplicación web puede hacer uso de ella.</p> + </section> + + <section id="building"> + <title>Compilar httpd con soporte HTTP/2</title> + <p><a href="../mod/mod_http2.html">mod_http2</a> usa la librería <a href="https://nghttp2.org">nghttp2</a> + como su implementación base. Para compilar <code>mod_http2</code> necesita al menos la versión 1.2.1 de <code>libnghttp2</code> instalada en su sistema.</p> + + <p>Cuando usted ejecuta <code>./configure</code> en el código fuente de Apache HTTPD, necesita indicarle '<code>--enable-http2</code>' como una opción adicional para activar la compilación de este módulo. Si su <code>libnghttp2</code> está ubicado en una ruta no habitual (cualquiera que sea en su sistema operativo), puede indicar su ubicación con '<code>--with-nghttp2=<path></code>' para <code>./configure</code>.</p> + + <p>Aunque puede que eso sirva para la mayoría, habrá quien prefiera un <code>nghttp2</code> compilado estáticamente para este módulo. Para ellos existe la opción <code>--enable-nghttp2-staticlib-deps</code>. Funciona de manera muy similar a como uno debe enlazar openssl estáticamente para mod_ssl.</p> + + <p>Hablando de SSL, necesita estar al tanto de que la mayoría de los navegadores hablan HTTP/2 solo con URLs <code>https:</code>. Así que necesita un servidor con soporte SSL. Pero no solo eso, necesitará una librería SSL que de soporte a la extensión <code>ALPN</code>. Si usa OpenSSL, necesita al menos la versión 1.0.2.</p> + </section> + + <section id="basic-config"> + <title>Configuración básica</title> + + <p>Cuando tiene un <code>httpd</code> compilado con <code>mod_http2</code> necesita una configuración básica para activarlo. Lo primero, como con cualquier otro módulo de Apache, es que necesita cargarlo:</p> + + <highlight language="config"> +LoadModule http2_module modules/mod_http2.so + </highlight> + + <p>La segunda directiva que necesita añadir a la configuración de su servidor es:</p> + + <highlight language="config"> +Protocols h2 http/1.1 + </highlight> + + <p>Esto permite h2, la variante segura, para ser el protocolo preferido de las conexiones en su servidor. Cuando quiera habilitar todas las variantes de HTTP/2, entonces simplemente configure:</p> + + <highlight language="config"> +Protocols h2 h2c http/1.1 + </highlight> + + <p>Dependiendo de dónde pone esta directiva, afecta a todas las conexiones o solo a las de ciertos host virtuales. La puede anidar, como en:</p> + + <highlight language="config"> +Protocols http/1.1 +<VirtualHost ...> + ServerName test.example.org + Protocols h2 http/1.1 +</VirtualHost> + </highlight> + + <p>Esto solo permite HTTP/1, excepto conexiones SSL hacia <code>test.example.org</code> que ofrecen HTTP/2.</p> + + <note><title>Escoger un SSLCipherSuite seguro</title> + <p>Es necesario configurar <directive module="mod_ssl">SSLCipherSuite</directive> con una suite segura de cifrado TLS. La versión actual de mod_http2 no fuerza ningún cifrado pero la mayoría de los clientes si lo hacen. Encaminar un navegador hacia un servidor con <code>h2</code> activado con una suite inapropiada de cifrados forzará al navegador a rehusar e intentar conectar por HTTP 1.1. Esto es un error común cuando se configura httpd con HTTP/2 por primera vez, ¡así que por favor tenga en cuenta que debe evitar largas sesiones de depuración! Si quiere estar seguro de la suite de cifrados que escoja, por favor evite los listados en la <a href="http://httpwg.org/specs/rfc7540.html#BadCipherSuites">Lista Negra de TLS para HTTP/2</a>.</p> + </note> + + <p>El orden de los protocolos mencionados también es relevante. Por defecto, el primero es el protocolo preferido. Cuando un cliente ofrece múltiples opciones, la que esté más a la izquierda será la escogida. En</p> + <highlight language="config"> +Protocols http/1.1 h2 + </highlight> + + <p>el protocolo preferido es HTTP/1 y siempre será seleccionado a menos que el cliente <em>sólo</em> soporte h2. Puesto que queremos hablar HTTP/2 con clientes que lo soporten, el orden correcto es:</p> + + <highlight language="config"> +Protocols h2 h2c http/1.1 + </highlight> + + <p>Hay algo más respecto al orden: el cliente también tiene sus propias preferencias. Si quiere, puede configurar su servidor para seleccionar el protocolo preferido por el cliente:</p> + + <highlight language="config"> +ProtocolsHonorOrder Off + </highlight> + + <p>Hace que el orden en que <em>usted</em> escribió los Protocols sea irrelevante y sólo el orden de preferencia del cliente será decisorio.</p> + + <p>Una última cosa: cuando usted configura los protocolos no se comprueba si son correctos o están bien escritos. Puede mencionar protocolos que no existen, así que no hay necesidad de proteger <code>Protocols</code> con ningún <code>IfModule</code> de comprobación.</p> + + <p>Para más consejos avanzados de configuración, vea la <a href="../mod/mod_http2.html#dimensioning"> + sección de módulos sobre dimensionamiento</a> y <a href="../mod/mod_http2.html#misdirected"> + como gestionar multiples hosts con el mismo certificado</a>.</p> + </section> + + <section id="mpm-config"> + <title>Configuración MPM</title> + + <p>HTTP/2 está soportado en todos los módulos de multi-proceso que se ofrecen con httpd. Aun así, si usa el mpm <code>prefork</code>, habrá restricciones severas.</p> + + <p>En <code>prefork</code>, <code>mod_http2</code> solo procesará una solicitud cada vez por conexión. Pero los clientes, como los navegadores, enviarán muchas solicitudes al mismo tiempo. Si una de ellas tarda mucho en procesarse (o hace un sondeo que dura más de la cuenta), las otras solicitudes se quedarán atascadas.</p> + + <p><code>mod_http2</code> no evitará este límite por defecto. El motivo es que <code>prefork</code> hoy en día solo se escoge si ejecuta motores de proceso que no están preparados para multi-hilo, p.ej. fallará con más de una solicitud.</p> + + <p>Si su configuración lo soporta, hoy en día <code>event</code> es el mejor mpm que puede usar.</p> + + <p>Si realmente está obligado a usar <code>prefork</code> y quiere multiples solicitudes, puede configurar la directiva <directive module="mod_http2">H2MinWorkers</directive> para hacerlo posible. Sin embargo, si esto falla, es bajo su cuenta y riesgo.</p> + </section> + + <section id="clients"> + <title>Clientes</title> + + <p>Casi todos los navegadores modernos dan soporte a HTTP/2, pero solo en conexiones SSL: Firefox (v43), Chrome (v45), Safari (since v9), iOS Safari (v9), Opera (v35), Chrome para Android (v49) e Internet Explorer (v11 en Windows10) (<a href="http://caniuse.com/#search=http2">Fuente</a>).</p> + + <p>Otros clientes, así cómo otros servidores, están listados en la + <a href="https://github.com/http2/http2-spec/wiki/Implementations">wiki de Implementaciones</a>, entre ellos, implementaciones para c, c++, common lisp, dart, erlang, haskell, java, nodejs, php, python, perl, ruby, rust, scala y swift.</p> + + <p>Muchos de las implementaciones de clientes que no son navegadores soportan HTTP/2 sobre texto plano, h2c. La más versátil es <a href="https://curl.haxx.se">curl</a>.</p> + </section> + + <section id="tools"> + <title>Herramientas útiles para depurar HTTP/2</title> + + <p>La primera herramienta a mencionar es por supuesto <a href="https://curl.haxx.se">curl</a>. Por favor asegúrese de que su versión soporta HTTP/2 comprobando sus <code>Características</code>:</p> + <highlight language="config"> + $ curl -V + curl 7.45.0 (x86_64-apple-darwin15.0.0) libcurl/7.45.0 OpenSSL/1.0.2d zlib/1.2.8 nghttp2/1.3.4 + Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 [...] + Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP <strong>HTTP2</strong> + </highlight> + <note><title>Notas sobre Mac OS homebrew</title> + brew install curl --with-openssl --with-nghttp2 + </note> + <p>Y para una inspección en gran profundidad <a href="https://wiki.wireshark.org/HTTP2">wireshark</a>.</p> + <p>El paquete <a href="https://nghttp2.org">nghttp2</a> también incluye clientes, tales como:</p> + <ul> + <li><a href="https://nghttp2.org/documentation/nghttp.1.html">nghttp + </a> - util para visualizar la frames de HTTP/2 y tener una mejor idea de como funciona el protocolo.</li> + <li><a href="https://nghttp2.org/documentation/h2load-howto.html">h2load</a> - útil para hacer un stress-test de su servidor.</li> + </ul> + + <p>Chrome ofrece logs detallados de HTTP/2 en sus conexiones a través de la <a href="chrome://net-internals/#http2">página especial de net-internals</a>. También hay una extensión interesante para <a href="https://chrome.google.com/webstore/detail/http2-and-spdy-indicator/mpbpobfflnpcgagjijhmgnchggcjblin?hl=en">Chrome</a> y <a href="https://addons.mozilla.org/en-us/firefox/addon/spdy-indicator/">Firefox</a> con la que visualizar cuando su navegador usa HTTP/2.</p> + </section> + + <section id="push"> + <title>Server Push</title> + + <p>El protocolo HTTP/2 permite al servidor hacer PUSH de respuestas a un cliente que nunca las solicitó. El tono de la conversación es: "Aquí tiene una solicitud que nunca envió y la respuesta llegará pronto..."</p> + + <p>Pero hay restricciones: el cliente puede deshabilitar esta característica y el servidor entonces solo podrá hacer PUSH en una solicitud que hizo previamente del cliente.</p> + + <p>La intención es permitir al servidor enviar recursos que el cliente seguramente vaya a necesitar, p. ej. un recurso css o javascript que pertenece a una página html que el cliente solicitó, un grupo de imágenes a las que se hace referencia en un css, etc.</p> + + <p>La ventaja para el cliente es que ahorra tiempo para solicitudes que pueden tardar desde unos pocos milisegundos a medio segundo, dependiendo de la distancia entre el cliente y el servidor. La desventaja es que el cliente puede recibir cosas que ya tiene en su cache. Por supuesto que HTTP/2 soporta cancelación previa de tales solicitudes, pero aun así se malgastan recursos.</p> + + <p>Resumiendo: no hay una estrategia mejor sobre cómo usar esta característica de HTTP/2 y todo el mundo está experimentando con ella. Así que, ¿cómo experimenta usted con ella en Apache httpd?</p> + + <p><code>mod_http2</code> busca e inspecciona las cabeceras de respuesta + <code>Link</code> con cierto formato:</p> + + <highlight language="config"> +Link </xxx.css>;rel=preload, </xxx.js>; rel=preload + </highlight> + + <p>Si la conexión soporta PUSH, estos dos recursos se enviarán al cliente. Como desarrollador web, puede configurar estas cabeceras o bien directamente en la respuesta de su aplicación o configurar su servidor con:</p> + + <highlight language="config"> +<Location /xxx.html> + Header add Link "</xxx.css>;rel=preload" + Header add Link "</xxx.js>;rel=preload" +</Location> + </highlight> + + <p>Si quiere usar enlaces con <code>preload</code> sin activar un PUSH, puede usar el parámetro <code>nopush</code>, como en:</p> + + <highlight language="config"> +Link </xxx.css>;rel=preload;nopush + </highlight> + + <p>o puede desactivar PUSH para su servidor por completo con la directiva </p> + + <highlight language="config"> +H2Push Off + </highlight> + + <p>Y hay más:</p> + + <p>El módulo mantiene un registro de lo que se ha enviado con PUSH para cada conexión (hashes de URLs, básicamente) y no hará PUSH del mismo recurso dos veces. Cuando la conexión se cierra, la información es descartada.</p> + + <p>Hay gente pensando cómo un cliente puede decirle al servidor lo que ya tiene, para evitar los PUSH de esos elementos, pero eso algo muy experimental ahora mismo.</p> + + <p>Otro borrador experimental que ha sido implementado en + <code>mod_http2</code> es el <a href="https://tools.ietf.org/html/draft-ruellan-http-accept-push-policy-00"> Campo de Cabecera + Accept-Push-Policy</a> en la que un cliente puede, para cada solicitud, definir qué tipo de PUSH acepta.</p> + </section> + +</manualpage> diff --git a/docs/manual/howto/http2.xml.meta b/docs/manual/howto/http2.xml.meta index 04a0158938..368861be37 100644 --- a/docs/manual/howto/http2.xml.meta +++ b/docs/manual/howto/http2.xml.meta @@ -8,6 +8,7 @@ <variants> <variant>en</variant> + <variant>es</variant> <variant>fr</variant> </variants> </metafile> diff --git a/docs/manual/howto/index.html b/docs/manual/howto/index.html index 7c5b454a3e..4b14fb4150 100644 --- a/docs/manual/howto/index.html +++ b/docs/manual/howto/index.html @@ -4,6 +4,10 @@ URI: index.html.en Content-Language: en Content-type: text/html; charset=ISO-8859-1 +URI: index.html.es +Content-Language: es +Content-type: text/html; charset=ISO-8859-1 + URI: index.html.fr Content-Language: fr Content-type: text/html; charset=ISO-8859-1 diff --git a/docs/manual/howto/index.xml.es b/docs/manual/howto/index.xml.es new file mode 100644 index 0000000000..55ef7b3219 --- /dev/null +++ b/docs/manual/howto/index.xml.es @@ -0,0 +1,145 @@ +<?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: 1786687 -->
+<!-- Spanish translation : Daniel Ferradal -->
+<!-- Reviewed by : Luis Gil de Bernabé Pfeiffer lgilbernabe [AT] apache.org -->
+<!--
+ 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="index.xml.meta">
+ <parentdocument href="../"/>
+
+ <title>How-To / Tutoriales</title>
+
+ <section id="howto">
+
+ <title>How-To / Tutoriales</title>
+
+ <dl>
+ <dt>Autenticación y Autorización</dt>
+ <dd>
+ <p>Autenticación es un proceso en el cual se verifica
+ que alguien es quien afirma ser. Autorización es cualquier
+ proceso en el que se permite a alguien acceder donde quiere ir,
+ o a obtener la información que desea tener.</p>
+
+ <p>Ver: <a href="auth.html">Autenticación, Autorización</a></p>
+ </dd>
+ </dl>
+
+ <dl>
+ <dt>Control de Acceso</dt>
+ <dd>
+ <p>Control de acceso hace referencia al proceso de restringir, o
+ garantizar el acceso a un recurso en base a un criterio arbitrario.
+ Esto se puede conseguir de distintas formas.</p>
+
+ <p>Ver: <a href="access.html">Control de Acceso</a></p>
+ </dd>
+ </dl>
+
+ <dl>
+ <dt>Contenido Dinámico con CGI</dt>
+ <dd>
+ <p>El CGI (Common Gateway Interface) es un método por el cual
+ un servidor web puede interactuar con programas externos de
+ generación de contenido, a ellos nos referimos comúnmente como
+ programas CGI o scripts CGI. Es un método sencillo para mostrar
+ contenido dinámico en tu sitio web. Este documento es una
+ introducción para configurar CGI en tu servidor web Apache, y de
+ inicio para escribir programas CGI.</p>
+
+ <p>Ver: <a href="cgi.html">CGI: Contenido Dinámico</a></p>
+ </dd>
+ </dl>
+
+ <dl>
+ <dt>Ficheros <code>.htaccess</code></dt>
+ <dd>
+ <p>Los ficheros <code>.htaccess</code> facilitan una forma de
+ hacer configuraciones por-directorio. Un archivo, que
+ contiene una o más directivas de configuración, se coloca en un
+ directorio específico y las directivas especificadas solo aplican
+ sobre ese directorio y los subdirectorios del mismo.</p>
+
+ <p>Ver: <a href="htaccess.html"><code>.htaccess</code> files</a></p>
+ </dd>
+ </dl>
+
+ <dl>
+ <dt>HTTP/2 con httpd</dt>
+ <dd>
+ <p>HTTP/2 es la evolución del protocolo de capa de aplicación más conocido, HTTP.
+ Se centra en hacer un uso más eficiente de los recursos de red sin cambiar la
+ semántica de HTTP. Esta guía explica como se implementa HTTP/2 en httpd,
+ mostrando buenas prácticas y consejos de configuración básica.
+ </p>
+
+ <p>Ver: <a href="http2.html">Guía HTTP/2</a></p>
+ </dd>
+ </dl>
+
+
+ <dl>
+ <dt>Introducción a los SSI</dt>
+ <dd>
+ <p>Los SSI (Server Side Includes) son directivas que se colocan
+ en las páginas HTML, y son evaluadas por el servidor mientras
+ éste las sirve. Le permiten añadir contenido generado
+ dinámicamente a una página HTML existente, sin tener que servir
+ la página entera a través de un programa CGI u otro método
+ dinámico.</p>
+
+ <p>Ver: <a href="ssi.html">Server Side Includes (SSI)</a></p>
+ </dd>
+ </dl>
+
+ <dl>
+ <dt>Directorios web Por-usuario</dt>
+ <dd>
+ <p>En sistemas con múltiples usuarios, cada usuario puede tener
+ su directorio "home" compartido usando la directiva
+ <directive module="mod_userdir">UserDir</directive>. Aquellos
+ que visiten la URL <code>http://example.com/~username/</code>
+ obtendrán contenido del directorio del usuario "<code>username</code>"
+ que se encuentra en el directorio "home" del sistema.</p>
+
+ <p>Ver: <a href="public_html.html">
+ Directorios Web de Usuario (<code>public_html</code>)</a></p>
+ </dd>
+ </dl>
+
+ <dl>
+ <dt>Guía de Proxy Inverso</dt>
+ <dd>
+ <p>Apache httpd ofrece muchas posibilidades como proxy inverso. Usando la
+ directiva <directive module="mod_proxy">ProxyPass</directive> así como
+ <directive module="mod_proxy">BalancerMember</directive> puede crear
+ sofisticadas configuraciones de proxy inverso que proveen de alta
+ disponibilidad, balanceo de carga, clustering basado en la nube y
+ reconfiguración dinámica en caliente.</p>
+
+ <p>Ver: <a href="reverse_proxy.html">Guía de Proxy Inverso</a></p>
+ </dd>
+ </dl>
+
+ </section>
+
+</manualpage>
+
+
diff --git a/docs/manual/howto/index.xml.meta b/docs/manual/howto/index.xml.meta index 75fbfff410..295c1e7609 100644 --- a/docs/manual/howto/index.xml.meta +++ b/docs/manual/howto/index.xml.meta @@ -8,6 +8,7 @@ <variants> <variant>en</variant> + <variant>es</variant> <variant>fr</variant> <variant outdated="yes">ja</variant> <variant outdated="yes">ko</variant> diff --git a/docs/manual/howto/public_html.html b/docs/manual/howto/public_html.html index 7a9715bd53..4eb8cbede2 100644 --- a/docs/manual/howto/public_html.html +++ b/docs/manual/howto/public_html.html @@ -4,6 +4,10 @@ URI: public_html.html.en Content-Language: en Content-type: text/html; charset=ISO-8859-1 +URI: public_html.html.es +Content-Language: es +Content-type: text/html; charset=ISO-8859-1 + URI: public_html.html.fr Content-Language: fr Content-type: text/html; charset=ISO-8859-1 diff --git a/docs/manual/howto/public_html.xml.es b/docs/manual/howto/public_html.xml.es new file mode 100644 index 0000000000..05e72e8789 --- /dev/null +++ b/docs/manual/howto/public_html.xml.es @@ -0,0 +1,198 @@ +<?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: 1745806 --> +<!-- Spanish translation : Daniel Ferradal --> +<!-- Reviewed by: Luis Gil de Bernabé Pfeiffer --> + +<!-- + 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="public_html.xml.meta"> +<parentdocument href="./">How-To / Tutorials</parentdocument> + + <title>Directorios web por usuario</title> + +<summary> + <p>En sistemas con múltiples usuarios, cada usuario puede tener un website + en su directorio home usando la directiva <directive + module="mod_userdir">UserDir</directive>. Los visitantes de una URL + <code>http://example.com/~username/</code> recibirán el contenido del + directorio home del usuario "<code>username</code>", en el subdirectorio + especificado por la directiva <directive module="mod_userdir">UserDir</directive>.</p> + + <p>Tenga en cuenta que, por defecto, el acceso a estos directorios + <strong>NO</strong> está activado. Puede permitir acceso cuando usa + <directive module="mod_userdir" + >UserDir</directive> quitando el comentario de la línea:</p> + + <highlight language="config"> + #Include conf/extra/httpd-userdir.conf + </highlight> + + <p>En el fichero por defecto de configuración <code>conf/httpd.conf</code>, + y adaptando el fichero <code>httpd-userdir.conf</code> según sea necesario, + o incluyendo las directivas apropiadas en un bloque + <directive module="core" type="section">Directory</directive> dentro del fichero + principal de configuración.</p> +</summary> + +<seealso><a href="../urlmapping.html">Mapeando URLs al sistema de ficheros</a></seealso> + + <section id="related"> + <title>Directorios web por usuario</title> + <related> + <modulelist> + <module>mod_userdir</module> + </modulelist> + <directivelist> + <directive module="mod_userdir">UserDir</directive> + <directive module="core">DirectoryMatch</directive> + <directive module="core">AllowOverride</directive> + </directivelist> + </related> + </section> + + <section id="userdir"> + <title>Configurando la ruta del fichero con UserDir</title> + + <p>La directiva <directive module="mod_userdir">UserDir</directive> + especifica un directorio del que cargar contenido por usuario. Esta directiva + puede tener muchas formas distintas.</p> + + <p>Si se especifica una ruta que no empieza con una barra ("/"), se asume que + va a ser una ruta de directorio relativa al directorio home del usuario + especificado. Dada ésta configuración:</p> + + <highlight language="config"> +UserDir public_html + </highlight> + + <p>La URL <code>http://example.com/~rbowen/file.html</code> se traducirá en + la ruta del fichero <code>/home/rbowen/public_html/file.html</code></p> + + <p>Si la ruta que se especifica comienza con una barra ("/"), la ruta del + directorio se construirá usando esa ruta, más el usuario especificado en la + configuración:</p> + + <highlight language="config"> +UserDir /var/html + </highlight> + + <p>La URL <code>http://example.com/~rbowen/file.html</code> se traducirá en + la ruta del fichero <code>/var/html/rbowen/file.html</code></p> + + <p>Si se especifica una ruta que contiene un asterisco (*), se usará una ruta + en la que el asterisco se reemplaza con el nombre de usuario. Dada ésta configuración:</p> + + <highlight language="config"> +UserDir /var/www/*/docs + </highlight> + + <p>La URL <code>http://example.com/~rbowen/file.html</code> se traducirá en + la ruta del fichero <code>/var/www/rbowen/docs/file.html</code></p> + + <p>También se pueden configurar múltiples directorios o rutas de directorios.</p> + + <highlight language="config"> +UserDir public_html /var/html + </highlight> + + <p>Para la URL <code>http://example.com/~rbowen/file.html</code>, + Apache buscará <code>~rbowen</code>. Si no lo encuentra, Apache buscará + <code>rbowen</code> en <code>/var/html</code>. Si lo encuentra, la URL de más + arriba se traducirá en la ruta del fichero + <code>/var/html/rbowen/file.html</code></p> + + </section> + + <section id="redirect"> + <title>Redirigiendo a URLs externas</title> + <p>La directiva <directive module="mod_userdir">UserDir</directive> puede + usarse para redirigir solcitudes de directorios de usuario a URLs externas.</p> + + <highlight language="config"> +UserDir http://example.org/users/*/ + </highlight> + + <p>El ejemplo de aquí arriba redirigirá una solicitud para + <code>http://example.com/~bob/abc.html</code> hacia + <code>http://example.org/users/bob/abc.html</code>.</p> + </section> + + <section id="enable"> + <title>Restringiendo qué usuarios pueden usar esta característica</title> + + <p>Usando la sintaxis que se muestra en la documentación de UserDir, usted + puede restringir a qué usuarios se les permite usar esta funcionalidad:</p> + + <highlight language="config"> +UserDir disabled root jro fish + </highlight> + + <p>La configuración de aquí arriba permitirá a todos los usuarios excepto a + los que se listan con la declaración <code>disabled</code>. Usted puede, + del mismo modo, deshabilitar esta característica para todos excepto algunos + usuarios usando una configuración como la siguiente:</p> + + <highlight language="config"> +UserDir disabled +UserDir enabled rbowen krietz + </highlight> + + <p>Vea la documentación de <directive module="mod_userdir">UserDir</directive> para más + ejemplos.</p> + + </section> + + <section id="cgi"> + <title>Activando un directorio cgi para cada usuario</title> + + <p>Para dar a cada usuario su propio directorio cgi-bin, puede usar una directiva + <directive module="core" type="section">Directory</directive> + para activar cgi en un subdirectorio en particular del directorio home del usuario.</p> + + <highlight language="config"> +<Directory "/home/*/public_html/cgi-bin/"> + Options ExecCGI + SetHandler cgi-script +</Directory> + </highlight> + + <p>Entonces, asumiendo que <code>UserDir</code> está configurado con la + declaración <code>public_html</code>, un programa cgi <code>example.cgi</code> + podría cargarse de ese directorio así:</p> + + <example> + http://example.com/~rbowen/cgi-bin/example.cgi + </example> + + </section> + + <section id="htaccess"> + <title>Permitiendo a usuarios cambiar la configuración</title> + + <p>Si quiere permitir que usuarios modifiquen la configuración del servidor en + su espacio web, necesitarán usar ficheros <code>.htaccess</code> para hacer + estos cambios. Asegúrese de tener configurado <directive + module="core">AllowOverride</directive> con un valor suficiente que permita a + los usuarios modificar las directivas que quiera permitir. + Vea el <a href="htaccess.html">tutorial de .htaccess</a> para obtener detalles adicionales sobre cómo funciona.</p> + + </section> + +</manualpage> diff --git a/docs/manual/howto/public_html.xml.meta b/docs/manual/howto/public_html.xml.meta index 30c006edff..d942792ef1 100644 --- a/docs/manual/howto/public_html.xml.meta +++ b/docs/manual/howto/public_html.xml.meta @@ -8,6 +8,7 @@ <variants> <variant>en</variant> + <variant>es</variant> <variant>fr</variant> <variant outdated="yes">ja</variant> <variant outdated="yes">ko</variant> |