Jak uruchomić wiele witryn na jednej instancji apache

Spędziłem godziny kręcąc się w kółko po każdym przewodniku, jaki znalazłem w sieci.

Chcę mieć dwie strony działające na jednej instancji apache, coś takiego - 192.168.2.8 / site1 oraz 192.168.2.8 / site2

Kręciłem się w kółko, ale w tej chwili mam dwa pliki conf w ' sites-available (symlinked to sites-enabled)', które wyglądają tak:

<VirtualHost *:2000>

ServerAdmin [email protected]
ServerName site1
ServerAlias site1

# Indexes + Directory Root.
DirectoryIndex index.html
DocumentRoot /home/user/site1/

# CGI Directory
ScriptAlias /cgi-bin/ /home/user/site1/cgi-bin/

Options +ExecCGI

# Logfiles
ErrorLog /home/user/site1/logs/error.log
CustomLog /home/user/site1/logs/access.log combined

</VirtualHost>

I

<VirtualHost *:3000>

ServerAdmin [email protected]
ServerName site2
ServerAlias site2

# Indexes + Directory Root.
DirectoryIndex index.html
DocumentRoot /home/user/site2/

# CGI Directory
ScriptAlias /cgi-bin/ /home/user/site2/cgi-bin/

Options +ExecCGI

# Logfiles
ErrorLog /home/user/site2/logs/error.log
CustomLog /home/user/site2/logs/access.log combined

</VirtualHost>

Http.conf wygląda tak-

NameVirtualHost *:2000
NameVirtualHost *:3000

W tej chwili dostaję ten błąd -

[error] VirtualHost *:80 — mixing * ports and non-* ports with a NameVirtualHostaddress is not supported, proceeding with undefined results

Porty.conf wygląda tak – (chociaż żadne przewodniki nie wspominały o konieczności edycji tego)

NameVirtualHost *:80

Listen 80
<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
Listen 443
</IfModule>

<IfModule mod_gnutls.c>
Listen 443
</IfModule>

Czy ktoś może dać jakieś proste instrukcje, aby to uruchomić? Każdy przewodnik, który znalazłem mówi, aby zrobić to w inny sposób, a każdy z nich prowadzi do innych błędów. Oczywiście robię coś źle, ale nie znalazłem jasnego wyjaśnienia, co to może być.

Po prostu chcę, aby jedna strona była dostępna na porcie 2000, a druga na porcie 3000 (lub cokolwiek innego, właśnie wybrałem te porty do testowania).

Uruchamiam Ubuntu server 12.04 ...

=============

EDIT

Podążał za innym "przewodnikiem"...

Ustawiłem to w witrynach-dostępne:

<VirtualHost *:80>
    DocumentRoot "/home/user/site1/"
    ServerName 192.168.2.10/site1
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/home/user/site2/"
    ServerName 192.168.2.10/site2
</VirtualHost>
W tym celu należy skontaktować się z naszym biurem obsługi klienta.conf:
ServerName site1
ServerName site2

Dodaliśmy to do portów.conf:

Listen 192.168.2.10:80

==============

EDIT

Teraz działa, wrzuciłem to do pliku conf w site-enabled:

<VirtualHost *:81>
    DocumentRoot "/home/user/site1/"
    ServerName site1
</VirtualHost>

<VirtualHost *:82>
    DocumentRoot "/home/user/site2/"
    ServerName site2
</VirtualHost>

Mam to w porty.conf:

Listen *:80
Listen *:81
Listen *:82
Mam to w apache2.conf:
ServerName site1
ServerName site2

Nie znalazłem tego w żadnych przewodnikach, po prostu mam to działa przez cały dzień prób i błędów, więc nie wiem, czy to dobre rozwiązanie. Ale przynajmniej działa tak, jak chcę.

Author: Exbi, 2012-09-09

2 answers

Twoje pytanie jest mieszanie kilku różnych pojęć. Na początku mówiłeś, że chcesz uruchamiać witryny na tym samym serwerze przy użyciu tej samej domeny, ale w różnych folderach. To nie wymaga żadnej specjalnej konfiguracji. Po uruchomieniu pojedynczej domeny po prostu tworzysz foldery pod tym docroot.

Na podstawie reszty twojego pytania, tak naprawdę chcesz uruchomić różne witryny na tym samym serwerze z własnymi nazwami domen.

Najlepsza dokumentacja na ten temat jest to dokumentacja virtual host w podręczniku apache.

Istnieją dwa typy hostów wirtualnych: oparte na nazwach i oparte na IP. Funkcja Name-based umożliwia korzystanie z jednego adresu IP, podczas gdy funkcja IP-based wymaga innego adresu IP dla każdej witryny. Na podstawie powyższego opisu chcesz użyć hostów wirtualnych opartych na nazwach.

Początkowy błąd był spowodowany tym, że używałeś innych portów niż linia NameVirtualHost. Jeśli naprawdę chcesz, aby witryny były obsługiwane z portów inne niż 80, musisz mieć NameVirtualHost Wejście dla każdego portu.

Zakładając, że zaczynasz od zera, jest to o wiele prostsze, niż mogłoby się wydawać.

Pierwszą rzeczą, którą musisz zrobić, to powiedzieć apache ' owi, że użyjesz wirtualnych hostów opartych na nazwach.

NameVirtualHost *:80

Teraz, gdy apache wie, co chcesz zrobić, możesz skonfigurować definicje vhost:

<VirtualHost *:80>
    DocumentRoot "/home/user/site1/"
    ServerName site1
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/home/user/site2/"
    ServerName site2
</VirtualHost>

Zauważ, że możesz uruchomić dowolną liczbę witryn na tym samym porcie. ServerName bycie innym wystarczy, by powiedzieć Apaczowi który vhost używać. Ponadto dyrektywa ServerName jest zawsze nazwą domeny/hosta i nigdy nie powinna zawierać ścieżki.

Jeśli zdecydujesz się uruchomić witrynę na porcie innym niż 80, zawsze będziesz musiał podać numer portu w adresie URL podczas uzyskiwania dostępu do witryny. Więc zamiast iść do http://example.com musisz iść do http://example.com:81

 64
Author: bradym,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-09 21:42:17

Tak z wirtualnym hostem możesz mieć tyle równoległych programów, ile chcesz:

Otwórz

/ etc/httpd/conf / httpd.conf

Listen 81
Listen 82
Listen 83

<VirtualHost *:81>
    ServerAdmin [email protected]
    DocumentRoot /var/www/site1/html
    ServerName site1.com
    ErrorLog logs/site1-error_log
    CustomLog logs/site1-access_log common
    ScriptAlias /cgi-bin/ "/var/www/site1/cgi-bin/"
</VirtualHost>

<VirtualHost *:82>
    ServerAdmin [email protected]
    DocumentRoot /var/www/site2/html
    ServerName site2.com
    ErrorLog logs/site2-error_log
    CustomLog logs/site2-access_log common
    ScriptAlias /cgi-bin/ "/var/www/site2/cgi-bin/"
</VirtualHost>

<VirtualHost *:83>
    ServerAdmin [email protected]
    DocumentRoot /var/www/site3/html
    ServerName site3.com
    ErrorLog logs/site3-error_log
    CustomLog logs/site3-access_log common
    ScriptAlias /cgi-bin/ "/var/www/site3/cgi-bin/"
</VirtualHost>

Restart apache

service httpd restart

Możesz teraz odnieść się do Site1:

http://<ip-address>:81/ 
http://<ip-address>:81/cgi-bin/

Site2:

http://<ip-address>:82/
http://<ip-address>:82/cgi-bin/

Site3:

http://<ip-address>:83/ 
http://<ip-address>:83/cgi-bin/

Jeśli ścieżka nie jest zakodowana na twardo w żadnym skrypcie, Twoje strony powinny działać bezproblemowo.

 4
Author: Srihari Karanth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-09 16:22:55