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]
# 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.
# 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
<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 <?INDEX {\tt Port} directive> -->
- <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"><VirtualHost></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 <?INDEX {\tt Require} directive> -->
<a href="directive-dict.html#Syntax"
<!--%plaintext <?INDEX {\tt ServerName} directive> -->
<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
<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.
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 "
/* 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 "
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,
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) {