On 3/9/2014 10:05 AM, Neven Cvetkovic wrote:
Ahmed,

On Sun, Mar 9, 2014 at 10:14 AM, Ahmed Dalatony <ahmed.dalat...@gmail.com>wrote:

hello,

can you help me little more with example or simpler doc
i'm new to tomcat config
and i don't understand virtual host

thank you

Ultimately, if you don't want to show the port number to the end user, the
serving process needs to bind to port 80.

You mentioned few Tomcat processes, bound to ports 7777, 8888, 9999, each
serving few applications.

So, here are few alternatives to achieve what you want:

ALTERNATIVE_0
- Don't do anything. Each Tomcat instance runs on it's own port number.
- Doesn't achieve what you want :)

ALTERNATIVE_1
- Host all applications on a single Tomcat instance. Bind Tomcat to port 80
(if linux environment remember port 80 is privileged port, so you have to
configure your Tomcat accordingly.) Register all domains to the same IP
address.
- You can use Tomcat virtual hosting to register different domains to
specific applications.
- Downside of this approach is that all applications are sharing the same
JVM (Tomcat) instance. Spike in one application can bring all other
applications down.

ALTERNATIVE_2
- Have multiple network interfaces (IP addresses) available. Bind each
Tomcat instance to one of the IP addresses. Register each domain to its own
IP address.
- This approach is better than ALTERNATIVE_1 when it comes to isolation of
the processes in their own execution environments.
- This approach utilizes many IP addresses, that are usually scarce and not
easily justified for numerous applications.

ALTERNATIVE_3
- Most common approach I've seen around.
- Similar to approach you are currently taking (ALTERNATIVE_0), with a help
of external web server that will act as a (reverse) proxy. Typically, I
would use Apache Httpd server, but you can use other web servers, e.g. IIS
on Windows platform, or nginx.
- In this case Apache (or other webserver) would bind to port 80, and based
on the requested URL (or host) would point to a specific application
(hosted on specific Tomcat on certain port, e.g. 7777, 8888, 9999, etc...)
- If you would like to achieve that different hosts point to different
applications, register all domains with the same IP address in DNS, and
configure virtual hosting on the webserver.


Thus, if you run multiple instances of Tomcat - alone, virtual hosting will
not help you , since only one process can bind to a single IP address to
one port (e.g. port 80). So, either put everything to the same Tomcat
("yuck"), or bind each tomcat to port 80 on separate IP addresses, or have
an external web server routing requests to your multiple Tomcat instances.
My preference is the later approach.

Here are some questions you want to answer before choosing the alternative:
- What is the environment that you run on (windows, linux, etc.)?
- What are you requirements?
- How many applications do you have? How many instances do you plan to run,
on the same machine, on the entire platform?
- What are the application usage patterns? (how many users do you plan to
serve, spikes, etc..)
- What are the service level agreements you have with your customers?
- etc...


Configuring webserver to route requests to Tomcat instances is pretty
straight forward, and you have a choice of HTTP or AJP protocols and
depends on the choice of your webserver (Apache HTTPD, IIS, nginx, etc.)

Hope that helps.

Cheers!
Neven



Nice explanation.

-Terence Bandoian


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to