]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
Remove the Port directive. In it's place, the Listen directive
authorRyan Bloom <rbb@apache.org>
Thu, 4 Oct 2001 20:00:53 +0000 (20:00 +0000)
committerRyan Bloom <rbb@apache.org>
Thu, 4 Oct 2001 20:00:53 +0000 (20:00 +0000)
is now a required directive, which tells Apache what port to
listen on.  The ServerName directive has also been extended
to accept an optional port.  If the port is specified to the
ServerName, the server will report that port whenever it
reports the port that it is listening on.  This change was
made to ease configuration errors that stem from having a Port
directive, and a Listen directive.  In that situation, the server
would only listen to the port specified by the Listen command,
which caused a lot of confusion to users.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@91293 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
docs/conf/httpd-std.conf
docs/manual/mod/core.html
docs/manual/mod/mpm_common.html
server/core.c
server/listen.c

diff --git a/CHANGES b/CHANGES
index be2375067d5b912252233c83210743d7b1debd1f..5773195f50c04c31ad13112f621ed065a0eea263 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,16 @@
 Changes with Apache 2.0.26-dev
 
+  *) Remove the Port directive.  In it's place, the Listen directive
+     is now a required directive, which tells Apache what port to
+     listen on.  The ServerName directive has also been extended
+     to accept an optional port.  If the port is specified to the
+     ServerName, the server will report that port whenever it
+     reports the port that it is listening on.  This change was
+     made to ease configuration errors that stem from having a Port
+     directive, and a Listen directive.  In that situation, the server
+     would only listen to the port specified by the Listen command,
+     which caused a lot of confusion to users.  [Ryan Bloom]
+
   *) Added mod_mime_magic, mod_unique_id and mod_vhost_alias to the Win32
      build, as loadable modules.  [William Rowe]
 
index cad4b438df563cb3881612009e03f74c6a007a3f..f3cd0ca90fa52c7f99a2e6ea8ff6f60e9f126dde 100644 (file)
@@ -230,12 +230,6 @@ Listen @@Port@@
 # virtual host being defined.
 #
 
-#
-# Port: The port to which the standalone server listens. For
-# ports < 1023, you will need httpd to be run as root initially.
-#
-Port @@Port@@
-
 #
 # If you wish httpd to run as a different user or group, you must run
 # httpd as root initially and it will switch.  
@@ -270,7 +264,7 @@ ServerAdmin you@your.address
 # You will have to access it by its address (e.g., http://123.45.67.89/)
 # anyway, and this will make redirections work in a sensible way.
 #
-#ServerName new.host.name
+#ServerName new.host.name:80
 
 #
 # DocumentRoot: The directory out of which you will serve your
index a38fa95c4c02e9b0070ea8cdc0ce6c5969ed83e7..ac30ccc72102cb894cd7c4856d24f0ac3d2327a2 100644 (file)
 
       <li><a href="#options">Options</a></li>
 
-      <li><a href="#port">Port</a></li>
-
       <li><a href="#require">Require</a></li>
 
       <li><a href="#rlimitcpu">RLimitCPU</a></li>
     <code>All</code>.</p>
     <hr />
 
-    <h2><a id="port" name="port">Port directive</a></h2>
-    <!--%plaintext &lt;?INDEX {\tt Port} directive&gt; -->
-    <a href="directive-dict.html#Syntax"
-    rel="Help"><strong>Syntax:</strong></a> Port
-    <em>number</em><br />
-     <a href="directive-dict.html#Default"
-    rel="Help"><strong>Default:</strong></a> <code>Port
-    80</code><br />
-     <a href="directive-dict.html#Context"
-    rel="Help"><strong>Context:</strong></a> server config<br />
-     <a href="directive-dict.html#Status"
-    rel="Help"><strong>Status:</strong></a> core 
-
-    <p><em>Number</em> is a number from 0 to 65535; some port
-    numbers (especially below 1024) are reserved for particular
-    protocols. See <code>/etc/services</code> for a list of some
-    defined ports; the standard port for the http protocol is
-    80.</p>
-
-    <p>The Port directive has two behaviors, the first of which is
-    necessary for NCSA backwards compatibility (and which is
-    confusing in the context of Apache).</p>
-
-    <ul>
-      <li>In the absence of any <a
-      href="mpm_common.html#listen">Listen</a> directives
-      specifying a port number, a Port directive given in the "main
-      server" (<em>i.e.</em>, outside any <a
-      href="#virtualhost">&lt;VirtualHost&gt;</a> section) sets the
-      network port on which the server listens. If there are any
-      Listen directives specifying <code>:number</code> then Port
-      has no effect on what address the server listens at.</li>
-
-      <li>The Port directive sets the <code>SERVER_PORT</code>
-      environment variable (for <a href="mod_cgi.html">CGI</a> and
-      <a href="mod_include.html">SSI</a>), and is used when the
-      server must generate a URL that refers to itself (for example
-      when creating an external redirect to itself). This behaviour
-      is modified by <a
-      href="#usecanonicalname">UseCanonicalName</a>.</li>
-    </ul>
-    The primary behavior of Port should be considered to be similar
-    to that of the <a href="#servername">ServerName</a> directive.
-    The ServerName and Port together specify what you consider to
-    be the <em>canonical</em> address of the server. (See also <a
-    href="#usecanonicalname">UseCanonicalName</a>.) 
-
-    <p>Port 80 is one of Unix's special ports. All ports numbered
-    below 1024 are reserved for system use, <em>i.e.</em>, regular
-    (non-root) users cannot make use of them; instead they can only
-    use higher port numbers. To use port 80, you must start the
-    server from the root account. After binding to the port and
-    before accepting requests, Apache will change to a low
-    privileged user as set by the <a
-    href="mpm_common.html#user">User directive</a>.</p>
-
-    <p>If you cannot use port 80, choose any other unused port.
-    Non-root users will have to choose a port number higher than
-    1023, such as 8000.</p>
-
-    <p>SECURITY: if you do start the server as root, be sure not to
-    set <a href="mpm_common.html#user">User</a> to root. If you run
-    the server as root whilst handling connections, your site may
-    be open to a major security attack.</p>
-    <hr />
-
     <h2><a id="require" name="require">Require directive</a></h2>
     <!--%plaintext &lt;?INDEX {\tt Require} directive&gt; -->
     <a href="directive-dict.html#Syntax"
     <!--%plaintext &lt;?INDEX {\tt ServerName} directive&gt; -->
     <a href="directive-dict.html#Syntax"
     rel="Help"><strong>Syntax:</strong></a> ServerName
-    <em>fully-qualified-domain-name</em> <br />
+    <em>fully-qualified-domain-name:port</em> <br />
      <a href="directive-dict.html#Context"
     rel="Help"><strong>Context:</strong></a> server config, virtual
     host<br />
     return the preferred hostname. For example:</p>
 
     <blockquote>
-      <code>ServerName www.example.com</code>
+      <code>ServerName www.example.com:80</code>
     </blockquote>
     would be used if the canonical (main) name of the actual
     machine were <code>simple.example.com</code>. 
     section specifies what hostname must appear in the request's
     <code>Host:</code> header to match this virtual host.</p>
 
+    <p>This directive now takes allows a port to be added to the
+    server name.  This allows an admin to assign the canonical
+    port at the same time that the canonical name is assigned.
+    The Port directive, which used to perform this role, has also
+    been removed, easing configuration for all users. 
+
     <p><strong>See Also</strong>:<br />
      <a href="../dns-caveats.html">DNS Issues</a><br />
      <a href="../vhosts/">Apache virtual host
index bc414cee85b2105ec1701251cf5b9ff87ba71bc0..c9465501454f0cffbd3cff328bc8bf6c4566ea37 100644 (file)
 
     <p>The Listen directive instructs Apache to listen to only
     specific IP addresses or ports; by default it responds to
-    requests on all IP interfaces, but only on the port given by
-    the <code><a href="core.html#port">Port</a></code>
-    directive.</p>
+    requests on all IP interfaces. The Listen directive is now
+    a required directive. If it is not in the config file, the
+    server will fail to start. This is a change from previous
+    versions of Apache.
 
     <p>The Listen directive tells the server to accept incoming
     requests on the specified port or address-and-port combination.
index c15bb173959ba490adb513f0843d70303586afb3..7bbe1d744e9bcf11c8cfd2e6c484c9b114b9a106 100644 (file)
@@ -1603,15 +1603,27 @@ static const char *set_server_string_slot(cmd_parms *cmd, void *dummy,
     return NULL;
 }
 
-static const char *server_port(cmd_parms *cmd, void *dummy, const char *arg)
+static const char *server_hostname_port(cmd_parms *cmd, void *dummy, const char *arg)
 {
     const char *err = ap_check_cmd_context(cmd, NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
+    const char *portstr;
+    const char *server;
     int port;
 
     if (err != NULL) {
        return err;
     }
-    port = atoi(arg);
+    portstr = ap_strchr_c(arg, ':');
+    if (portstr) {
+        cmd->server->server_hostname = apr_pstrndup(cmd->pool, arg, 
+                                                    portstr - arg);
+        portstr++;
+        port = atoi(portstr);
+    }
+    else {
+        cmd->server->server_hostname = apr_pstrdup(cmd->pool, arg);
+        port = 80;
+    }
     if (port <= 0 || port >= 65536) { /* 65536 == 1<<16 */
        return apr_pstrcat(cmd->temp_pool, "The port number \"", arg, 
                          "\" is outside the appropriate range "
@@ -2411,7 +2423,8 @@ AP_INIT_TAKE1("DefaultType", ap_set_string_slot,
 
 /* Old server config file commands */
 
-AP_INIT_TAKE1("Port", server_port, NULL, RSRC_CONF, "A TCP port number"),
+AP_INIT_TAKE1("Port", ap_set_deprecated, NULL, RSRC_CONF, 
+  "Port was replaced with Listen in Apache 2.0"),
 AP_INIT_TAKE1("HostnameLookups", set_hostname_lookups, NULL,
   ACCESS_CONF|RSRC_CONF,
   "\"on\" to enable, \"off\" to disable reverse DNS lookups, or \"double\" to "
@@ -2419,9 +2432,8 @@ AP_INIT_TAKE1("HostnameLookups", set_hostname_lookups, NULL,
 AP_INIT_TAKE1("ServerAdmin", set_server_string_slot,
   (void *)APR_XtOffsetOf (server_rec, server_admin), RSRC_CONF,
   "The email address of the server administrator"),
-AP_INIT_TAKE1("ServerName", set_server_string_slot,
-  (void *)APR_XtOffsetOf (server_rec, server_hostname), RSRC_CONF,
-  "The hostname of the server"),
+AP_INIT_TAKE1("ServerName", server_hostname_port, NULL, RSRC_CONF,
+  "The hostname and port of the server"),
 AP_INIT_TAKE1("ServerSignature", set_signature_flag, NULL, OR_ALL,
   "En-/disable server signature (on|off|email)"),
 AP_INIT_TAKE1("ServerRoot", set_server_root, NULL, RSRC_CONF,
index 8225efc9e979c23c87eb2d2d78f71f857262d330..8068dce659e362fb1d7a1c1a3a8a42d51d16643e 100644 (file)
@@ -273,11 +273,10 @@ int ap_listen_open(process_rec *process, apr_port_t port)
     ap_listen_rec *next;
     int num_open;
 
-    /* allocate a default listener if necessary */
-    if (ap_listeners == NULL) {
-       alloc_listener(process, NULL, (apr_port_t)(port ? port : DEFAULT_HTTP_PORT));
-    }
-
+    /* Don't allocate a default listener.  If we need to listen to a
+     * port, then the user needs to have a Listen directive in their
+     * config file.
+     */
     num_open = 0;
     for (lr = ap_listeners; lr; lr = lr->next) {
        if (lr->active) {