Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Apache 2 Sites-Available Configuration

I am trying to write about 5 websites all on one Apache server which is all on one IP address.

For example:

  • /var/www/site1
  • /var/www/site2
  • /var/www/site3
  • /var/www/site4
  • /var/www/site5

However, if I create a link on site 2 just using, for example. /index.php, you would expect it to look in /var/www/site2/index.php... but it actually resolves to /var/www/index.php.

Is there anyway of setting up Apache to know that the separate site folders need to behave and resolve to the separate folders?

This is my sites-available file at the moment. A fairly default setup I believe:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
            Options FollowSymLinks
            AllowOverride None
    </Directory>
    <Directory /var/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride all
            Order allow,deny
            allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
            AllowOverride None
            Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
            Order allow,deny
            Allow from all
    </Directory>

    ErrorLog /var/log/apache2/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/log/apache2/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

Any help would be apreciated.

Thank-you kindly.

Andrew Barlow

like image 819
Schodemeiss Avatar asked Dec 21 '09 11:12

Schodemeiss


People also ask

What is the difference between sites available and sites-enabled in Apache?

The sites-available folder is for storing all of your vhost configurations, whether or not they're currently enabled. The sites-enabled folder contains symlinks to files in the sites-available folder. This allows you to selectively disable vhosts by removing the symlink.

What is etc apache2 sites available?

/etc/apache2/sites-available/ : This directory holds virtual host configuration files, which are enabled through links to the sites-enabled directory. Modification to server block files happens in this directory, and is enabled through the a2ensite command.

Where is sites-enabled in Linux?

sites-enabled: like mods-enabled, sites-enabled contains symlinks to the /etc/apache2/sites-available directory.

Where is vhost config?

Configuration settings of each virtual host are stored in its configuration files in the /var/www/vhosts/system/ <domain_name> /conf/ directory.


2 Answers

You need a ServerName directive inside the <VirtualHost>. It will tell the server which virtual host is currently in use depending on the browser request (if your client access http://site1.example.com or http://site2.example.com, they will connect to the same IP, hence server, but the request contains the original request url). You'll have to duplicate your <VirtualHost> block to have one per hosted site. Each block will differ by their ServerName and DocumentRoot mainly. You can use "apache2ctl -S" to see how apache understood your virtual host settings.

You can use a single file with this kind of content :

<VirtualHost *:80>
  ServerName site1.myserver.com
  DocumentRoot /var/www/site1
  ...
</VirtualHost>

<VirtualHost *:80>
  ServerName site2.myserver.com
  DocumentRoot /var/www/site2
  ...
</VirtualHost>

<VirtualHost *:80>
  ServerName site3.myserver.com
  DocumentRoot /var/www/site3
  ...
</VirtualHost>

<VirtualHost *:80>
  ServerName site4.myserver.com
  DocumentRoot /var/www/site4
  ...
</VirtualHost>

<VirtualHost *:80>
  ServerName site5.myserver.com
  DocumentRoot /var/www/site5
  ...
</VirtualHost>

Of course, maybe sure that the dns for all of those name ends up on your IP. It needs not to be subdomains as long as they land on your server ip and you have a correspond ServerName for it. If you need extra names for a single site, you can add them with "ServerAlias secondname.myserver.com thirdname.myserver.com" below ServerName

like image 147
Zeograd Avatar answered Nov 15 '22 09:11

Zeograd


@Zeograd's answer is probably the correct answer for most solutions, however I had a similar issue and all I needed to do was enable the rewrite module with the a2enmod command.

This is what I ran via command line in Ubuntu:

sudo a2enmod rewrite
sudo service apache2 restart

If sudo service apache2 restart doesn't work, you can try:

sudo /etc/init.d/apache2 restart
like image 20
bigmike7801 Avatar answered Nov 15 '22 08:11

bigmike7801