type=page
status=published
title=Administering Internet Connectivity
next=concurrent.html
prev=connectors.html
~~~~~~

= Administering Internet Connectivity

[[GSADG00017]][[ablsw]]


[[administering-internet-connectivity]]
== 13 Administering Internet Connectivity

This chapter provides procedures for performing internet connectivity
tasks in the {productName} 7 environment by
using the `asadmin` command-line utility.

The following topics are addressed here:

* link:#giusf[About Internet Connectivity]
* link:#ggnfu[Administering HTTP Network Listeners]
* link:#ggncs[Administering Virtual Servers]

Instructions for accomplishing the tasks in this chapter by using the
Administration Console are contained in the Administration Console
online help.

[[giusf]][[GSADG00587]][[about-internet-connectivity]]

=== About Internet Connectivity

The HTTP service provides functionality for deploying web applications
and for making deployed web applications accessible by Internet clients,
either in a single application server instance or in a cluster of
multiple server instances. HTTP services are provided by two kinds of
related objects: listeners and virtual servers.

For more information about clusters, see the link:ha-administration-guide.html#GSHAG[{productName} High Availability Administration Guide].

The following topics are addressed here:

* link:#giuri[About HTTP Network Listeners]
* link:#giupz[About Virtual Servers]

[[giuri]][[GSADG00766]][[about-http-network-listeners]]

==== About HTTP Network Listeners

An HTTP listener, also known as a network listener, is a listen socket
that has an Internet Protocol (IP) address, a port number, a server
name, and a default virtual server. Each virtual server provides
connections between the server and clients through one or more
listeners. Each listener must have a unique combination of port number
and IP address. For example, an HTTP listener can listen for a host on
all configured IP addresses on a given port by specifying the IP address
0.0.0.0. Alternatively, the listener can specify a unique IP address for
each listener while using the same port.

Because an HTTP listener is a combination of IP address and port number,
you can have multiple HTTP listeners with the same IP address and
different port numbers, or with different IP addresses and the same port
number (if your host was configured to respond to these addresses).
However, if an HTTP listener uses the 0.0.0.0 IP address, which listens
on all IP addresses on a port, you cannot create HTTP listeners for
additional IP addresses that listen on the same port for a specific IP
address. For example, if an HTTP listener uses 0.0.0.0:8080 (all IP
addresses on port 8080), another HTTP listener cannot use 1.2.3.4:8080.
The host running the {productName} typically has access to only one
IP address. HTTP listeners typically use the 0.0.0.0 IP address and
different port numbers, with each port number serving a different
purpose. However, if the host does have access to more than one IP
address, each address can serve a different purpose.

To access a web application deployed on {productName}, use the URL
`http://localhost:8080/` (or `https://localhost:8081/` for a secure
application), along with the context root specified for the web
application.

To access the Administration Console, use the URL
`https://localhost:4848/` or `http://localhost:4848/asadmin/` (console
default context root).

[[giupz]][[GSADG00767]][[about-virtual-servers]]

==== About Virtual Servers

A virtual server, sometimes called a virtual host, is an object that
allows the same physical server to host multiple Internet domain names.
All virtual servers hosted on the same physical server share the IP
address of that physical server. A virtual server associates a domain
name for a server (such as `www.aaa.com`) with the particular server on
which {productName} is running. Each virtual server must be
registered with the DNS server for your network.


[NOTE]
====
Do not confuse an Internet domain with the administrative domain of
{productName}.
====


For example, assume that you want to host the following domains on your
physical server: `www.aaa.com`, `www.bbb.com`, and `www.ccc.com`. Assume
that these domains are respectively associated with web modules `web1`,
`web2`, and `web3`. This means that the following URLs are handled by
your physical server:

[source]
----
http://www.aaa.com:8080/web1
http://www.bbb.com:8080/web2
http://www.ccc.com:8080/web3
----

The first URL is mapped to virtual server `www.aaa.com`, the second URL
is mapped to virtual server `www.bbb.com`, and the third is mapped to
virtual server `www.ccc.com`. For this mapping to work, `www.aaa.com`,
`www.bbb.com`, and `www.ccc.com` must all resolve to your physical
server's IP address and each virtual server must be registered with the
DNS server for your network. In addition, on a UNIX system, add these
domains to your `/etc/hosts` file (if the setting for `hosts` in your
`/etc/nsswitch.conf` file includes `files`).

[[ggnfu]][[GSADG00588]][[administering-http-network-listeners]]

=== Administering HTTP Network Listeners

By default, when {productName} starts, the following HTTP listeners
are started automatically:

* HTTP listeners associated with the virtual server named `server`:
** The listener named `http-listener-1` does not have security enabled.
** The listener named `http-listener-2` has security enabled.
* An HTTP listener named `admin-listener`, associated with the virtual
server named `__asadmin`. For this listener, security is not enabled.

The following table describes the {productName} default ports for the
listeners that use ports.

[[GSADG990]][[sthref72]][[ggnpj]]


Table 13-1 Default Ports for Listeners

[width="100%",cols="18%,13%,69%",options="header",]
|===
|Listener |Default Port |Description
|Administrative server |4848 |A domain's administrative server is
accessed by the Administration Console and the `asadmin` utility. For
the Administration Console, specify the port number in the URL of the
browser. When running an `asadmin` subcommand remotely, specify the port
number by using the `--port` option.

|HTTP |8080 |The web server listens for HTTP requests on a port.
To access deployed web applications and services, clients connect to this port.

|HTTPS |8181 |Web applications configured for secure communications
listen on a separate port.

|===


The following topics are addressed here:

* link:#ggnfh[To Create an Internet Connection]
* link:#gjkuy[Administering HTTP Protocols]
* link:#gjkzi[Administering HTTP Configurations]
* link:#gjkym[Administering HTTP Transports]
* link:#gjkwt[Administering HTTP Network Listeners]

[[ggnfh]][[GSADG00456]][[to-create-an-internet-connection]]

==== To Create an Internet Connection

Use the subcommands in this procedure to create an internet connection
with the full range of listener options. A network listener is created
behind the scenes. For the shortcut version of this process , see
link:#gjimx[To Create an HTTP Network Listener].

1. Ensure that the server is running. Remote subcommands require a running server.
2. Create an HTTP or HTTPS protocol by using the
link:reference-manual/create-protocol.html#GSRFM00051[`create-protocol`] subcommand with the
`--securityenabled` option.
To use the built-in `http-listener-1` HTTP protocol,
or `http-listener-2` HTTPS protocol, skip this step.
3. Create an HTTP configuration by using the
link:reference-manual/create-http.html#GSRFM00025[`create-http`] subcommand.
To use a built-in protocol, skip this step.
4. Create a transport by using the link:reference-manual/create-transport.html#GSRFM00061[`create-transport`]
subcommand. To use the built-in `tcp` transport, skip this step.
5. Create a thread pool by using the
link:reference-manual/create-threadpool.html#GSRFM00060[`create-threadpool`] subcommand.
To avoid using a thread pool, or to use the built-in `http-thread-pool`
thread pool, skip this step.
For additional thread pool information, see link:threadpools.html#abluc[Administering Thread Pools].
6. Create an HTTP listener by using the
link:reference-manual/create-network-listener.html#GSRFM00046[`create-network-listener`] subcommand.
Specify a protocol and transport, optionally a thread pool.
7. To apply your changes, restart {productName}. See link:domains.html#ginqj[To Restart a Domain].

[[GSADG991]]

See Also

You can also view the full syntax and options of the subcommand by
typing a command such as `asadmin help create-http-listener` at the
command line.

[[gjkuy]][[GSADG00768]][[administering-http-protocols]]

==== Administering HTTP Protocols

Each HTTP listener has an HTTP protocol, which is created either by
using the `create-protocol` subcommand or by using the built-in
protocols that are applied when you follow the instructions in
link:#gjimx[To Create an HTTP Network Listener].

The following topics are addressed here:

* link:#gjhot[To Create a Protocol]
* link:#gjhna[To List Protocols]
* link:#gjhnx[To Delete a Protocol]

[[gjhot]][[GSADG00457]][[to-create-a-protocol]]

===== To Create a Protocol

Use the `create-protocol` subcommand in remote mode to create a
protocol.

1. Ensure that the server is running. Remote subcommands require a running server.
2. Create a protocol by using the link:reference-manual/create-protocol.html#GSRFM00051[`create-protocol`]
+
Information about options and properties for the subcommand are included
in this help page.

[[GSADG00245]][[gjhos]]
Example 13-1 Creating an HTTP Protocol

This example creates a protocol named `http-1` with security enabled.

[source]
----
asadmin> create-protocol --securityenabled=true http-1
Command create-protocol executed successfully.
----

[[GSADG992]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help create-protocol` at the command line.

[[gjhna]][[GSADG00458]][[to-list-protocols]]

===== To List Protocols

Use the `list-protocols` subcommand in remote mode to list the existing
HTTP protocols.

1. Ensure that the server is running. Remote subcommands require a running server.
2. List the existing protocols by using the
link:reference-manual/list-protocols.html#GSRFM00195[`list-protocols`] subcommand.

[[GSADG00246]][[gjhqg]]
Example 13-2 Listing the Protocols

This example lists the existing protocols.

[source]
----
asadmin> list-protocols
admin-listener
http-1
http-listener-1
http-listener-2
Command list-protocols executed successfully.
----

[[GSADG993]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help list-protocols` at the command line.

[[gjhnx]][[GSADG00459]][[to-delete-a-protocol]]

===== To Delete a Protocol

Use the `delete-protocol` subcommand in remote mode to remove a
protocol.

1. Ensure that the server is running. Remote subcommands require a running server.
2. Delete a protocol by using the link:reference-manual/delete-protocol.html#GSRFM00103[`delete-protocol`]
subcommand

[[GSADG00247]][[gjhop]]
Example 13-3 Deleting a Protocol

This example deletes the protocol named `http-1`.

[source]
----
asadmin> delete-protocol http-1
Command delete-protocol executed successfully.
----

[[GSADG994]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help delete-protocol` at the command line.

[[gjkzi]][[GSADG00769]][[administering-http-configurations]]

==== Administering HTTP Configurations

Each HTTP listener has an HTTP configuration, which is created either by
using the `create-http` subcommand or by using the built-in
configurations that are applied when you follow the instructions in
link:#gjimx[To Create an HTTP Network Listener].

The following topics are addressed here:

* link:#gjhqc[To Create an HTTP Configuration]
* link:#gjhqa[To Delete an HTTP Configuration]

[[gjhqc]][[GSADG00460]][[to-create-an-http-configuration]]

===== To Create an HTTP Configuration

Use the `create-http` subcommand in remote mode to create a set of HTTP
parameters for a protocol. This set of parameters configures one or more
network listeners,

1. Ensure that the server is running. Remote subcommands require a running server.
2. Create an HTTP configuration by using the
link:reference-manual/create-http.html#GSRFM00025[`create-http`] subcommand.
Information about options and properties for the subcommand are included
in this help page.

[[GSADG00248]][[gjhnz]]
Example 13-4 Creating an HTTP Configuration

This example creates an HTTP parameter set for the protocol named
`http-1`.

[source]
----
asadmin> create-http --timeout-seconds 60 --default-virtual-server server http-1
Command create-http executed successfully.
----

[[GSADG995]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help create-http` at the command line.

[[gjhqa]][[GSADG00461]][[to-delete-an-http-configuration]]

===== To Delete an HTTP Configuration

Use the `delete-http` subcommand in remote mode to remove HTTP
parameters from a protocol.

1. Ensure that the server is running. Remote subcommands require a running server.
2. Delete the HTTP parameters from a protocol by using the
link:reference-manual/delete-http.html#GSRFM00077[`delete-http`] subcommand.

[[GSADG00249]][[gjhov]]
Example 13-5 Deleting an HTTP Configuration

This example deletes the HTTP parameter set from a protocol named `http-1`.

[source]
----
asadmin> delete-http http-1
Command delete-http executed successfully.
----

[[GSADG996]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help delete-http` at the command line.

[[gjkym]][[GSADG00770]][[administering-http-transports]]

==== Administering HTTP Transports

Each HTTP listener has an HTTP transport, which is created either by
using the `create-transport` subcommand or by using the built-in
transports that are applied when you follow the instructions in
link:#gjimx[To Create an HTTP Network Listener].

The following topics are addressed here:

* link:#gjhps[To Create a Transport]
* link:#gjhmx[To List Transports]
* link:#gjhqp[To Delete a Transport]

[[gjhps]][[GSADG00462]][[to-create-a-transport]]

===== To Create a Transport

Use the `create-transport` subcommand in remote mode to create a
transport for a network listener,

1. Ensure that the server is running. Remote subcommands require a running server.
2. Create a transport by using the link:reference-manual/create-transport.html#GSRFM00061[`create-transport`]
subcommand.
Information about options and properties for the subcommand are included in this help page.

[[GSADG00250]][[gjhpx]]
Example 13-6 Creating a Transport

This example creates a transport named `http1-trans` that uses a
non-default number of acceptor threads.

[source]
----
asadmin> create-transport --acceptorthreads 100 http1-trans
Command create-transport executed successfully.
----

[[GSADG997]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help create-transport` at the command line.

[[gjhmx]][[GSADG00463]][[to-list-transports]]

===== To List Transports

Use the `list-transports` subcommand in remote mode to list the existing
HTTP transports.

1. Ensure that the server is running. Remote subcommands require a running server.
2. List the existing transports by using the
link:reference-manual/list-transports.html#GSRFM00206[`list-transports`] subcommand.

[[GSADG00251]][[gjhqj]]
Example 13-7 Listing HTTP Transports

This example lists the existing transports.

[source]
----
asadmin> list-transports
http1-trans
tcp
Command list-transports executed successfully.
----

[[GSADG998]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help list-transports` at the command line.

[[gjhqp]][[GSADG00464]][[to-delete-a-transport]]

===== To Delete a Transport

Use the `delete-transport` subcommand in remote mode to remove a
transport.

1. Ensure that the server is running. Remote subcommands require a running server.
2. Delete a transport by using the link:reference-manual/delete-transport.html#GSRFM00112[`delete-transport`]
subcommand.

[[GSADG00252]][[gjhoh]]
Example 13-8 Deleting a Transport

This example deletes he transport named `http1-trans`.

[source]
----
asadmin> delete-transport http1-trans
Command delete-transport executed successfully.
----

[[GSADG999]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help delete-transport` at the command line.

[[gjkwt]][[GSADG00771]][[administering-http-network-listeners-1]]

==== Administering HTTP Network Listeners

The following topics are addressed here:

* link:#gjimx[To Create an HTTP Network Listener]
* link:#ggnbv[To List HTTP Network Listeners]
* link:#giwls[To Update an HTTP Network Listener]
* link:#ggndu[To Delete an HTTP Network Listener]
* link:#ggnbj[To Configure an HTTP Listener for SSL]
* link:#CHDEDCEA[To Configure Optional Client Authentication for SSL]
* link:#CHDHEFHG[To Configure a Custom SSL Implementation]
* link:#ggncl[To Delete SSL From an HTTP Listener]
* link:#gixjb[To Assign a Default Virtual Server to an HTTP Listener]

[[gjimx]][[GSADG00465]][[to-create-an-http-network-listener]]

===== To Create an HTTP Network Listener

Use the `create-http-listener` subcommand or the
`create-network-listener` subcommand in remote mode to create a
listener. These subcommands provide backward compatibility and also
provide a shortcut for creating network listeners that use the HTTP
protocol. Behind the scenes, a network listener is created as well as
its associated protocol, transport, and HTTP configuration. This method
is a convenient shortcut, but it gives access to only a limited number
of options. If you want to specify the full range of listener options,
follow the instructions in link:#ggnfh[To Create an Internet
Connection].

1. Ensure that the server is running. Remote subcommands require a running server.
2. Create an HTTP network listener by using the
link:reference-manual/create-network-listener.html#GSRFM00046[`create-network-listener`] subcommand or the
link:reference-manual/create-http-listener.html#GSRFM00030[`create-http-listener`] subcommand.
3. If needed, restart the server.
+
If you edit the special HTTP network listener named `admin-listener`,
you must restart the server for changes to take effect. See
link:domains.html#ginqj[To Restart a Domain].

[[GSADG00253]][[ggpjk]]
Example 13-9 Creating an HTTP Listener

This example creates an HTTP listener named `sampleListener` that uses a
non-default number of acceptor threads. Security is not enabled at
runtime.

[source]
----
asadmin> create-http-listener --listeneraddress 0.0.0.0
--listenerport 7272 --defaultvs server --servername host1.sun.com
--acceptorthreads 100 --securityenabled=false
--enabled=false sampleListener
Command create-http-listener executed successfully.
----

[[GSADG00254]][[gjimj]]
Example 13-10 Creating a Network Listener

This example a network listener named `sampleListener` that is not
enabled at runtime:

[source]
----
asadmin> create-network-listener --listenerport 7272 protocol http-1
--enabled=false sampleListener
Command create-network-listener executed successfully.
----

[[GSADG1000]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help create-http-listener` or
`asadmin help create-network-listener` at the command line.

[[ggnbv]][[GSADG00466]][[to-list-http-network-listeners]]

===== To List HTTP Network Listeners

Use the `list-http-listeners` subcommand or the `list-network-listeners`
subcommand in remote mode to list the existing HTTP listeners.

1. Ensure that the server is running. Remote subcommands require a running server.
2. List HTTP listeners by using the
link:reference-manual/list-http-listeners.html#GSRFM00168[`list-http-listeners`] or
link:reference-manual/list-network-listeners.html#GSRFM00186[`list-network-listeners`] subcommand.

[[GSADG00255]][[ggpgw]]
Example 13-11 Listing HTTP Listeners

This example lists the HTTP listeners. The same output is given if you
use the `list-network-listeners` subcommand.

[source]
----
asadmin> list-http-listeners
admin-listener
http-listener-2
http-listener-1
Command list-http-listeners executed successfully.
----

[[GSADG1001]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help list-http-listeners` or
`asadmin help list-network-listeners` at the command line.

[[giwls]][[GSADG00467]][[to-update-an-http-network-listener]]

===== To Update an HTTP Network Listener

1. List HTTP listeners by using the
link:reference-manual/list-http-listeners.html#GSRFM00168[`list-http-listeners`] or
link:reference-manual/list-network-listeners.html#GSRFM00186[`list-network-listeners`] subcommand.
2. Modify the values for the specified listener by using the
link:reference-manual/set.html#GSRFM00226[`set`] subcommand.
+
The listener is identified by its dotted name.

[[GSADG00256]][[giwiw]]
Example 13-12 Updating an HTTP Network Listener

This example changes `security-enabled` to `false` on `http-listener-2`.

[source]
----
asadmin> set server.network-config.protocols.protocol.http-listener-2.security-enabled=false
Command set executed successfully.
----

[[ggndu]][[GSADG00468]][[to-delete-an-http-network-listener]]

===== To Delete an HTTP Network Listener

Use the `delete-http-listener` subcommand or the
`delete-network-listener` subcommand in remote mode to delete an
existing HTTP listener. This disables secure communications for the
listener.

1. Ensure that the server is running. Remote subcommands require a running server.
2. List HTTP listeners by using the
link:reference-manual/list-http-listeners.html#GSRFM00168[`list-http-listeners`] subcommand.
3. Delete an HTTP listener by using the
link:reference-manual/delete-http-listener.html#GSRFM00082[`delete-http-listener`] or
link:reference-manual/delete-network-listener.html#GSRFM00098[`delete-network-listener`] subcommand.
4. To apply your changes, restart {productName}.
+
See link:domains.html#ginqj[To Restart a Domain].

[[GSADG00257]][[ggpjr]]
Example 13-13 Deleting an HTTP Listener

This example deletes the HTTP listener named `sampleListener`:

[source]
----
asadmin> delete-http-listener sampleListener
Command delete-http-listener executed successfully.
----

[[GSADG1002]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help delete-http-listener` or
`asadmin help delete-network-listener` at the command line.

[[ggnbj]][[GSADG00469]][[to-configure-an-http-listener-for-ssl]]

===== To Configure an HTTP Listener for SSL

Use the `create-ssl` subcommand in remote mode to create and configure
an SSL element in the specified listener. This enables secure
communication for the listener.

1. Ensure that the server is running. Remote subcommands require a running server.
2. Configure an HTTP listener by using the
link:reference-manual/create-ssl.html#GSRFM00058[`create-ssl`] subcommand.
3. To apply your changes, restart {productName}.
+
See link:domains.html#ginqj[To Restart a Domain].

[[GSADG00258]][[ggphv]]
Example 13-14 Configuring an HTTP Listener for SSL

This example enables the HTTP listener named `http-listener-1` for SSL:

[source]
----
asadmin> create-ssl --type http-listener --certname sampleCert http-listener-1
Command create-ssl executed successfully.
----

[[GSADG1003]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help create-ssl` at the command line.

[[CHDEDCEA]][[GSADG1106]][[to-configure-optional-client-authentication-for-ssl]]

===== To Configure Optional Client Authentication for SSL

In {productName}, you can configure the SSL protocol of an HTTP
listener such that it requests a certificate before permitting a client
connection, but does not refuse a connection if the client does not
provide one. To enable this feature, set the `client-auth` property of
the SSL protocol to the value `want`. For example:

[source]
----
asadmin> set configs.config.config-name.network-config.protocols.\
protocol.listener-name.ssl.client-auth=want
----

[[CHDHEFHG]][[GSADG1107]][[to-configure-a-custom-ssl-implementation]]

===== To Configure a Custom SSL Implementation

In {productName}, you can configure the SSL protocol an HTTP listener
such that it uses a custom implementation of SSL. To enable this
feature, set the `classname` property of the SSL protocol to the name of
a class that implements the `com.sun.grizzly.util.net.SSLImplementation`
interface. For example:

[source]
----
asadmin> set configs.config.config-name.network-config.protocols.\
protocol.listener-name.ssl.classname=SSLImplementation-class-name
----

By default, {productName} uses the implementation
`com.sun.enterprise.security.ssl.GlassfishSSLImpl` for the SSL protocol.

[[ggncl]][[GSADG00470]][[to-delete-ssl-from-an-http-listener]]

===== To Delete SSL From an HTTP Listener

Use the `delete-ssl` subcommand in remote mode to delete the SSL element
in the specified listener. This disables secure communications for the
listener.

1. Ensure that the server is running. Remote subcommands require a running server.
2. Delete SSL from an HTTP listener by using the
link:reference-manual/delete-ssl.html#GSRFM00109[`delete-ssl`] subcommand.
3. To apply your changes, restart {productName}.
+
See link:domains.html#ginqj[To Restart a Domain].

[[GSADG00259]][[ggpln]]
Example 13-15 Deleting SSL From an HTTP Listener

This example disables SSL for the HTTP listener named `http-listener-1`:

[source]
----
asadmin> delete-ssl --type http-listener http-listener-1
Command delete-http-listener executed successfully.
----

[[GSADG1004]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help delete-ssl` at the command line.

[[gixjb]][[GSADG00471]][[to-assign-a-default-virtual-server-to-an-http-listener]]

===== To Assign a Default Virtual Server to an HTTP Listener

1. In the Administration Console, open the HTTP Service component under
the relevant configuration.
2. Open the HTTP Listeners component under the HTTP Service component.
3. Select or create a new HTTP listener.
4. Select from the Default Virtual Server drop-down list.
+
For more information, see link:#beaga[To Assign a Default Web Module to
a Virtual Server].

[[GSADG1005]]

See Also

For details, click the Help button in the Administration Console from
the HTTP Listeners page.

[[ggncs]][[GSADG00589]][[administering-virtual-servers]]

=== Administering Virtual Servers

A virtual server is a virtual web server that serves content targeted
for a specific URL. Multiple virtual servers can serve content using the
same or different host names, port numbers, or IP addresses. The HTTP
service directs incoming web requests to different virtual servers based
on the URL.

When you first install {productName}, a default virtual server is
created. You can assign a default virtual server to each new HTTP
listener you create.

Web applications and Jakarta EE applications containing web components (web
modules) can be assigned to virtual servers during deployment. A web
module can be assigned to more than one virtual server, and a virtual
server can have more than one web module assigned to it. If you deploy a
web application and don't specify any assigned virtual servers, the web
application is assigned to all currently defined virtual servers. If you
then create additional virtual servers and want to assign existing web
applications to them, you must redeploy the web applications. For more
information about deployment, see the link:application-deployment-guide.html#GSDPG[{productName} Application Deployment Guide].

You can define virtual server properties using the `asadmin set`
command. For example:

[source]
----
asadmin> set server-config.http-service.virtual-server.MyVS.property.sso-enabled="true"
----

Some virtual server properties can be set for a specific web
application. For details, see "link:application-deployment-guide/dd-elements.html#GSDPG00161[glassfish-web-app]" in
{productName} Application Deployment Guide.

The following topics are addressed here:

* link:#ggnfr[To Create a Virtual Server]
* link:#ggndw[To List Virtual Servers]
* link:#giwkp[To Update a Virtual Server]
* link:#ggnen[To Delete a Virtual Server]
* link:#beaga[To Assign a Default Web Module to a Virtual Server]
* link:#gixku[To Assign a Virtual Server to an Application or Module]
* link:#glavy[To Set `JSESSIONIDSSO` Cookie Attributes]

[[ggnfr]][[GSADG00472]][[to-create-a-virtual-server]]

==== To Create a Virtual Server

By default, when {productName} starts, the following virtual servers
are started automatically:

* A virtual server named `server`, which hosts all user-defined web
modules.
+
For development, testing, and deployment of web services in a
non-production environment, `server` is often the only virtual server
required.
* A virtual server named `__asadmin`, which hosts all
administration-related web modules (specifically, the Administration
Console). This server is restricted, which means that you cannot deploy
web modules to this virtual server.

In a production environment, additional virtual servers provide hosting
facilities for users and customers so that each appears to have its own
web server, even though there is only one physical server.

Use the `create-virtual-server` subcommand in remote mode to create the
named virtual server.

[[GSADG1006]]

Before You Begin

A virtual server must specify an existing HTTP listener. Because the
virtual server cannot specify an HTTP listener that is already being
used by another virtual server, create at least one HTTP listener before
creating a new virtual server.

1. Ensure that the server is running. Remote subcommands require a running server.
2. Create a virtual server by using the
link:reference-manual/create-virtual-server.html#GSRFM00062[`create-virtual-server`] subcommand.
+
Information about properties for this subcommand is included in this
help page.
3. To apply your changes, restart {productName}.
+
See link:domains.html#ginqj[To Restart a Domain].

[[GSADG00260]][[ggpha]]
Example 13-16 Creating a Virtual Server

This example creates a virtual server named `sampleServer` on
`localhost`.

[source]
----
asadmin> create-virtual-server sampleServer
Command create-virtual-server executed successfully.
----

[[GSADG1007]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help create-virutal-server` at the command line.

[[ggndw]][[GSADG00473]][[to-list-virtual-servers]]

==== To List Virtual Servers

Use the `list-virtual-servers` subcommand in remote mode to list the
existing virtual servers.

1. Ensure that the server is running. Remote subcommands require a running server.
2. List virtual servers by using the
link:reference-manual/list-virtual-servers.html#GSRFM00207[`list-virtual-servers`] subcommand.

[[GSADG00261]][[ggpgr]]
Example 13-17 Listing Virtual Servers

This example lists the virtual servers for `localhost`.

[source]
----
asadmin> list-virtual-servers
sampleListener
admin-listener
http-listener-2
http-listener-1
Command list-http-listeners executed successfully.
----

[[GSADG1008]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help list-virutal-servers` at the command line.

[[giwkp]][[GSADG00474]][[to-update-a-virtual-server]]

==== To Update a Virtual Server

1. List virtual servers by using the
link:reference-manual/list-virtual-servers.html#GSRFM00207[`list-virtual-servers`] subcommand.
2. Modify the values for the specified virtual server by using the
link:reference-manual/set.html#GSRFM00226[`set`] subcommand.
+
The virtual server is identified by its dotted name.

[[ggnen]][[GSADG00475]][[to-delete-a-virtual-server]]

==== To Delete a Virtual Server

Use the `delete-virtual-server` subcommand in remote mode to delete an
existing virtual server.

1. Ensure that the server is running. Remote subcommands require a running server.
2. List virtual servers by using the
link:reference-manual/list-virtual-servers.html#GSRFM00207[`list-virtual-servers`] subcommand.
3. If necessary, notify users that the virtual server is being deleted.
4. Delete a virtual server by using the
link:reference-manual/delete-virtual-server.html#GSRFM00113[`delete-virtual-server`] subcommand.
5. To apply your changes, restart {productName}.
+
See link:domains.html#ginqj[To Restart a Domain].

[[GSADG00262]][[ggpmd]]
Example 13-18 Deleting a Virtual Server

This example deletes the virtual server named `sampleServer` from
`localhost`.

[source]
----
asadmin> delete-virtual-server sampleServer
Command delete-virtual-server executed successfully.
----

[[GSADG1009]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help delete-virutal-server` at the command line.

[[beaga]][[GSADG00772]][[to-assign-a-default-web-module-to-a-virtual-server]]

==== To Assign a Default Web Module to a Virtual Server

A default web module can be assigned to the default virtual server and
to each new virtual server. To access the default web module for a
virtual server, point the browser to the URL for the virtual server, but
do not supply a context root. For example:

[source]
----
http://myvserver:3184/
----

A virtual server with no default web module assigned serves HTML or
JavaServer Pages ( JSP) content from its document root, which is usually
domain-dir``/docroot``. To access this HTML or JSP content, point your
browser to the URL for the virtual server, do not supply a context root,
but specify the target file.

For example:

[source]
----
http://myvserver:3184/hellothere.jsp
----

[[gixku]][[GSADG00476]][[to-assign-a-virtual-server-to-an-application-or-module]]

==== To Assign a Virtual Server to an Application or Module

You can assign a virtual server to a deployed application or web module.

[[GSADG1010]]

Before You Begin

The application or module must already be deployed. For more
information, see the link:application-deployment-guide.html#GSDPG[{productName}
Application Deployment Guide].

1. In the Administration Console, open the HTTP Service component under
the relevant configuration.
2. Open the Virtual Servers component under the HTTP Service component.
3. Select the virtual server to which you want to assign a default web
module.
4. Select the application or web module from the Default Web Module
drop-down list.
+
For more information, see link:#beaga[To Assign a Default Web Module to
a Virtual Server].

[[glavy]][[GSADG00477]][[to-set-jsessionidsso-cookie-attributes]]

==== To Set `JSESSIONIDSSO` Cookie Attributes

Use the `sso-cookie-http-only` and `sso-cookie-secure` virtual server
attributes to set the `HttpOnly` and `Secure` attributes of any
`JSESSIONIDSSO` cookies associated with web applications deployed to the
virtual server.

Use the link:reference-manual/set.html#GSRFM00226[`set`] subcommand to set the value of the
`sso-cookie-http-only` and `sso-cookie-secure` virtual server
attributes.

The values supported for these attributes are as follows:

`sso-cookie-http-only`::
  A boolean value that specifies whether the `HttpOnly` attribute is
  included in `JSESSIONIDSSO` cookies. When set to `true`, which is the
  default, the `HttpOnly` attribute is included. When set to `false`,
  the `HttpOnly` attribute is not included.
`sso-cookie-secure`::
  A string value that specifies whether the `Secure` attribute is
  included in `JSESSIONIDSSO` cookies. Allowed values are as follows:
+
  * `true` — The `Secure` attribute is included.
  * `false` — The `Secure` attribute is not included.
  * `dynamic` — The `Secure` attribute setting is inherited from the
  first session participating in SSO. This is the default value.


