Configuração Apache 2 Sites e disponíveis
Pergunta
Estou tentando escrever cerca de 5 sites em um servidor Apache, que está em um endereço IP.
Por exemplo:
- /var/www/site1
- /var/www/site2
- /var/www/site3
- /var/www/site4
- /var/www/site5
No entanto, se eu criar um link no site 2 apenas usando, por exemplo. /index.php, você esperaria que ele olhasse em /var/www/site2/index.php ... mas na verdade resolve /var/www/index.php.
Existe alguma maneira de configurar o Apache para saber que as pastas do site separadas precisam se comportar e resolver para as pastas separadas?
Este é o meu arquivo disponível no momento. Uma configuração bastante padrão, acredito:
<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>
Qualquer ajuda seria apreciada.
Obrigado gentilmente.
Andrew Barlow
Solução
Você precisa de uma diretiva de nome do servidor dentro do <VirtualHost>
. Ele dirá ao servidor qual host virtual está atualmente em uso, dependendo da solicitação do navegador (se o seu acesso ao seu cliente http://site1.example.com ou http://site2.example.com, eles se conectarão ao mesmo IP, daí o servidor, mas a solicitação contém o URL da solicitação original). Você terá que duplicar o seu <VirtualHost>
Bloco para ter um site por hospedeiro. Cada bloco será diferente pelo nome do servidor e principalmente do documentroot. Você pode usar "Apache2CTL -s" para ver como o Apache entendeu suas configurações de host virtual.
Você pode usar um único arquivo com esse tipo de conteúdo:
<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>
Obviamente, talvez com certeza que o DNS para todo esse nome acaba no seu IP. Ele não precisa ser subdomínios, desde que eles aterrissem no IP do servidor e você tenha um nome de servidor correspondente para ele. Se você precisar de nomes extras para um único site, poderá adicioná -los com "Serveralias SecondName.myserver.com ThirdName.myserver.com" abaixo o nome do servidorname
Outras dicas
@A resposta de Zeograd é provavelmente a resposta correta para a maioria das soluções, no entanto, eu tive um problema semelhante e tudo o que precisava fazer era permitir o módulo de reescrita com o a2enmod
comando.
Isso é o que eu corri pela linha de comando em Ubuntu:
sudo a2enmod rewrite
sudo service apache2 restart
Se sudo service apache2 restart
Não funciona, você pode tentar:
sudo /etc/init.d/apache2 restart