What is the meaning of star in <VirtualHost *:80> in apache? - apache2

I want to know the use of this * and how to configure it?

* means a wildcard when you use wildcard you do bifurcation on ServerName
<VirtualHost *:80>
DocumentRoot /var/www/app1
ServerName app1.example.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/example
ServerName example.com
</VirtualHost>
Apache will route example.com to /var/www/example where as app1.example.com would be routed to /var/www/app1

VirtualHost directive allows you to configure and use multiple sites located on the same IP address. In this case, with *:80 you are creating a virtual host for every request coming on the port 80. It becomes more interesting when you start specializing and start to insert something other than * in the virtual host. An example can be, that according to the IP address with which a port is hit, you can open a different version of a web site, perhaps with different resources like: language translations, styles etc.

Related

configurations for the Subdomain module in drupal 7

What are the appropriate configurations for the Subdomain module in drupal 7 on Window 7 running XAMPP?
My site is localhost/example
Here are the changes I have made:
settings.php
$cookie_domain = '';
Leaving this commented out gives me an error
"The $cookie_domain variable in settings.php is not set".
Uncommenting and putting in "localhost", ".localhost", "example", ".example" gives me an "Access denied" error.
It seems to accept "localhost/example" or a blank ' ', although I don't know if this is the right thing to do.
host
127.0.1.1 localhost example
(and I can successfully ping ideastar)
http.conf
NameVirtualHost *:80
<VirtualHost *:80>
ServerName example
ServerAlias *.example
DocumentRoot C:/xampp/htdocs
</VirtualHost>
getting the fallowing error
Subdomain error: localhost and subdomain-test.localhost did not resolve to the same IP address. Your DNS may be improperly configured and subdomains will likely not work.
First you should create two virtual host one for main domain and another for sub-domain. For ex: like we have two domains example.com and test.example.com to setup on local host. I am assuming that you have a fresh install of Xampp on your machine. Your virtual host [\xampp\apache\conf\extra\httpd-vhosts.conf] file should have these entries:
<VirtualHost *:80>
DocumentRoot "\xampp\htdocs\example"
ServerName example.com
ServerAlias example.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "\xampp\htdocs\example"
ServerName test.example.com
ServerAlias test.example.com
</VirtualHost>
Now open you system host file and make the following entries below the line "127.0.1.1 localhost" (localhost ip 127.0.0.1)
127.0.1.1 example.com
127.0.1.1 test.example.com
\xampp\htdocs\example this directory should contain your Drupal setup.
Cookie domain entry should be as per the below line
$cookie_domain = '.example.com';
i have assumed that you already have a Drupal site running at http:\localhost\example.

DocumentRoot is set to docRoot of a virtualHost?

OS: centOS 6.3 Final
I've installed the mysql and apache2(httpd) packages and changed the config in /etc/httpd/conf/httpd.conf as seen below:
<VirtualHost *:80>
DocumentRoot /var/www/html/wordpress/
ServerName www.asterix.int
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/html/staticSite/
ServerName www.meins.lan
ServerAlias www.deins.lan
ServerAlias www.obelix.int
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/html/joomla/
ServerName www.example.com
ServerAlias www2.example.com
ServerAlias www3.example.com
</VirtualHost>
All ServerName and ServerAlias are working fine and I can access the 3 pages.
But when I'm trying to access a page over the server's ip something strange (at least for me) happens. apache2 returns me the index page of the first defined virtualHost(in this example wordpress). I've tried this with all 3 virtualHosts and get the same Results.
Is this a normal behavior or what I'm doing false ?
If this is a normal behavior: Can I set the DocumentRoot exclusively for all requests to the ip ?
Thx !
This is the intended behavior. If you use the IP (let's say http://123.123.123.123/), Apache will use 123.123.123.123 as HTTP the hostname. Since there is no VirtualHost with a ServerName or ServerAlias of 123.123.123.123, the first VirtualHost is used.
So if you want a VirtualHost that listens only for http://123.123.123.123/ you can simply create a VirtualHost with:
<VirtualHost *:80>
DocumentRoot /var/www/html/my-ip-site/
ServerName 123.123.123.123
</VirtualHost>
This is a normal behaviour.
You are using a vhost-method called name-based virtual hosts. As you can imagine that means, that the "routing" of the apache is then only done by the hostname in the HTTP-request, according the ServerName and ServerAlias directives in the config.
As the request to the IP of your server - e.g. 1.2.3.4 - can not be routed into any of the defined vhost, apache takes the default virtualhost.
The default virtualhost is more or less the first virtualhost defined.
The request on the IP is accepted, because you used wildcard definitions *:80.
You can check the virtualhosts set in apache by the apache
# command apache2 -S

Apache2 isolate virtualhosts

I'd like to isolate each "www subdirectory" so mysite1.ext can't access to mysite2.ext files, is this possible? How can I do it?
you Must conf You virtualHost Apache for this
like This
<VirtualHost x.x.x.x:80>
ServeName www.example.com
DocumentRoot /path/to/your/virtualroot
...
... usual stuff ...
...
php_admin_value open_basedir /path/to/your/virtualroot:/some/other/path
</VirtualHost>
Last Line Is For Isolate PHP To Access Other Directory
To do what you want in Apache you would use Name Based VirtualHosts. This allows you to configure two or more separate Web server environments on one IP address. It would look something like this.
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.mysite1.ext
ServerAlias domain.ext *.domain.ext
DocumentRoot /www/domain
</VirtualHost>
<VirtualHost *:80>
ServerName www.mysite2.ext
DocumentRoot /www/otherdomain
</VirtualHost>
You can read more about this configuration here This would all go in Sites.enabled or http.conf depending on your end stage configuration.

Virtual host document root doesn't work

I created an A record for my subdomain.example.com which points x.x.x.x.
So my subdomain points the x.x.x.x IP address.
Also I want my subdomain to point a sub-directory. So, on x.x.x.x, I added these lines to httpd.vhosts.conf. This machine runs on xampp.
<VirtualHost *:80>
DocumentRoot /opt/lampp/htdocs/subdomain
ServerName subdomain.example.com
<Directory /opt/lampp/htdocs/subdomain>
allow from all
Options +Indexes
</Directory>
</VirtualHost>
But subdomain.example.com points x.x.x.x not x.x.x.x/subdomain. I don't understand what I'm doing wrong?
http://httpd.apache.org/docs/2.1/sections.html#mergin
Due to the merging order, some of the directives may override others. I found that <location> directive didn't let my <virtualhost> work properly.

Does Apache2 support virtual hosting of subdomains?

Currently my Apache server is set up like so
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www
</VirtualHost>
The problem is that everything below /var/www is accessible from everywhere else. If I have a web page /var/www/john/bio.html, then that web page could borrow scripts/pictures from var/www/jane/
I want to set up my Apache server like so
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www
</VirtualHost>
<VirtualHost *:80>
ServerName www.john.example.com
ServerAlias john.example.com
DocumentRoot /var/www/john
</VirtualHost>
<VirtualHost *:80>
ServerName www.jane.example.com
ServerAlias jane.example.com
DocumentRoot /var/www/jane
</VirtualHost>
So all the files for user john go in the /var/www/john/ folder, and likewise for user jane. Then, with symbolic links turned off (by default), and access only provided from /var/www/user/ downwards (again by default), I don't have to worry about john's web page including scripts/images from jane's web page.
Using local measures only (/etc/hosts instead of a DNS) I found that this can indeed work.
First, change your /etc/hosts file to have a mapping of your desired website name(s) (www.example.com), and target IP address (192.168.1.1). I used my local IP address.
IPAddress Hostname Alias
----------- -------------------------- ------------------
192.168.1.1 www.example.com example.com
192.168.1.1 www.john.example.com john.example.com
192.168.1.1 www.jane.example.com jane.example.com
Your web browser will check your /etc/hosts file before looking at the world wide web.
Next go through all your Apache config files (httpd.conf, apache2.conf, ports.conf, conf.d/*) and make sure in exactly one file the command NameVirtualHost *:80 is issued (it doesn't have to be port :80 but if it is issued more than once, you will get this problem). Mine was issued in /etc/apache2/ports.conf, so put yours there if you have to. Finally, update your Apache configuration file (mine was at /etc/apache2/sites-available/default) like so.
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www
</VirtualHost>
<VirtualHost *:80>
ServerName www.john.example.com
ServerAlias john.example.com
DocumentRoot /var/www/john
</VirtualHost>
<VirtualHost *:80>
ServerName www.jane.example.com
ServerAlias jane.example.com
DocumentRoot /var/www/jane
</VirtualHost>
As a final step, you may need to add the websites to Apache by issuing the below commands (this step is not necessary, if you give all websites into sites-available/default and not into separate files for individual websites).
# a2ensite www.example.com
# a2ensite www.john.example.com
# a2ensite www.jane.example.com
After doing this, john.example.com will go to /var/www/john. That directory will then act as the root directory, and john will no longer have access to www, and, therefore, have no access to /var/www/jane.
Likewise, after doing this, jane.example.com will go to /var/www/jane. That directory will then act as the root directory, and jane will no longer have access to www, and, therefore, have no access to /var/www/john.
With symbolic links turned off --by default-- neither directories will be able to access each other

Resources