Virtual Host Nginx / Apache

vhost

Virtual Host umożliwia pojedynczą instalację serwera i udostępnianie wielu adresów URL. Daje nam to możliwość złudnego „maskowania” instancji serwera, że w konsekwencji mamy do czynienia z większa liczbą różnych serwerów dostępnych pod różnymi adresami domenowymi. Klasyczna koncepcja polegała na instalowaniu jednej instancji serwera na oddzielnych maszynach, lub uruchamiało się wiele instancji na jednym urządzeniu. W celu rozwiązania tego problemu, powstała koncepcja wirtualnych hostów, w oparciu o adres IP. Początkowo taka metoda wymagała umieszczenia wielu kart sieciowych w maszynie, lub stworzenia dowiązań do już posiadanych, przypisania im różnych adresów IP i powiadomieniu DNS o tym fakcie.

Protokół HTTP 1.1 umożliwia określenie adresu, jakiego dotyczy zapytanie przeglądarki, Nginx oraz Apache od lat obsługuje metodę serwerów wirtualnych w oparciu o nazwę.  Takie podejście umożliwia obniżenie kosztów serwerowych, wiele stron WWW może być przechowywana i obsługiwana na jednym. Możemy w ten sposób współdzielić maszynę pomiędzy wiele wirtualnych miejsc.

vhost Apache

Do stworzenia wielu vhostów wystarczy nam jeden plik, znajdujący się w zależności od dystrybucji:

Centos

/etc/httpd/conf.d/nasza_domena.conf

Debian/Ubuntu

/etc/apache2/sites-available/nasza_domena.conf

Przykład podstawowego vhosta:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin webmaster@example.com
    DocumentRoot /var/www/example.com

    <Directory /var/www/example.com>
        Options -Indexes +FollowSymLinks
        AllowOverride All
   </Directory>

    ErrorLog /var/log/httpd/example.com-error.log #CentOS
    CustomLog /var/log/httpd/example.com-access.log combined #CentOS
    ErrorLog /var/log/apache2/example.com-error.log #Debian
    CustomLog /var/log/apache2/example.com-access.log combined #Debian
</VirtualHost>

Dyrektywy vhosta Apache

ServerName
Nazwa domeny / web server lub adres IP i numer portu.

ServerAdmin
Adres e-mail roota.

DocumentRoot
Położenie katalogu z plikami web. Domyślnie /var/www/html.

DirectoryIndex
Określa jaka strona ma być serwowana klientowi, który odwiedza serwer. Domyślnie index.html.

AccessFileName
Plik używany do kontroli dostępu do serwera. Domyślnie .htaccess.

Alias
Położenie katalogu do składowania plików poza DocumentRoot.

ScriptAlias
Położenie skryptu CGI (Common Gateway Interface).

WSGIScriptAlias
Położenie skryptu WSGI.

IncludeOptional
Położenie dodatkowych plików konfiguracyjnych.

CustomLog
Określa custom log i jego format. Domyślnie custom log składowany jest w logs/httpd/access_log w odniesieniu do katalogu ServerRoot.

ErrorLog
Położenie logu z komunikatami o błędach. Domyślnie w logs/error_log w ServerRoot.

LogFormat
Format dla komunikatów logowania.

LogLevel
Poziom „gadatliwości” logów. Domyślnie warn, inne opcje to: debug, info, notice, error, crit, alert i emerg. 

Options
Ustawia funkcjonalność związaną w katalogami, w których znajdują się pliki stron web.

  • ExecCGI – pozwala na uruchamianie skryptów CGI.
  • FollowSymLinks – pozwala na używanie dowiązań do katalogów z poza DocumentRoot.
  • Indexes – jeżeli w katalogu DirectoryRoot danego serwera web nie ma pliku index.html (lub index.php itd.) to wyświetlana jest zawartość tego katalogu zamiast strony web.
  • Includes – włącza include po stronie serwera (?).
  • MultiViews – pozwala na zamienniki rozszerzeń plików.
  • All – włącza wszystkie opcja poza MultiViews.
  • None – wyłącza wszystkie dodatkowe funkcjonalności.

AllowOverride
Określa typy dyrektyw jakie mogą być zdefiniowane w pliku AccessFileName. Dyrektywy te kontrolują dostęp użytkowników i grup do katalogów prywatnych i hosta. Niektóre opcje:

  • All – pozwala na użycie wszystkich wspieranych dyrektyw AccessFileName.
  • AuthConfig – pozwala na użycie dyrektyw autoryzacyjnych takich jak AuthName, AuthType, AuthUserFile, AuthGroupFile oraz Require w AccessFileName.

Require
Zezwala lub zakazuje dostępu dla określonych użytkowników, grup, hostów, sieci lub domen.AddHandler Mapują rozszerzenia plików do określonego handlera.

Więcej dyrektyw znajdziemy w dokumentacji Apache.

vhost Nginx

Tak jak w przypadku Apache, również wystarczy jeden plik do stworzenia dla wielu serwisów i aplikacji WWW.

Centos

/etc/nginx/conf.d/nasza_domena.conf

Debian

/etc/nginx/sites-available/nasza_domena.conf

Przykład podstawowego vhosta:

server {
	listen       80;
	server_name  example.com;
	
	access_log  /var/log/nginx/przyklad.access.log; 
	error_log /var/log/nginx/przyklad.pl.error.log;
        
		location / {
		root   /var/www/;
		index  index.html index.htm;    
		}  
}

Dyrektywy vhosta Nginx

listen
Określa adres lub port, na których serwer nasłuchuje.

server_name
Przypisanie nazwy do wiertualnego serwera.

access_log
Ustawia ścieżkę, format i konfigurację buforowanego logu. Położenie logu z komunikatami o błędach. Domyślnie w log/error_log w ServerRoot.

location /
Blok określający miejsce położenia strony.

root
Ustawia katalog główny dla żądań.

index
Definiuje pliki, które będą używane jako indeks. Nazwa pliku może zawierać zmienne. Pliki są sprawdzane w określonej kolejności. Ostatnim elementem listy może być plik z bezwzględną ścieżką.

rewrite
Jeśli określone wyrażenie regularne pasuje do identyfikatora URI żądania, identyfikator URI jest zmieniany zgodnie z ciągiem zastępującym. Dyrektywy przepisujące są wykonywane sekwencyjnie w kolejności ich pojawienia się w pliku konfiguracyjnym. Możliwe jest zakończenie dalszego przetwarzania dyrektyw za pomocą flag. Jeśli ciąg zastępujący zaczyna się od „http: //”, „https: //” lub „$ schemat”, przetwarzanie zostaje zatrzymane, a przekierowanie jest zwracane do klienta.

rewrite
Sprawdza istnienie plików w podanej kolejności i wykorzystuje pierwszy znaleziony plik do przetworzenia żądania; przetwarzanie odbywa się w bieżącym kontekście. Ścieżka do pliku jest konstruowana z parametru pliku zgodnie z dyrektywami root i alias. Możliwe jest sprawdzenie istnienia katalogu poprzez określenie ukośnika na końcu nazwy, np. „$ Uri /”. Jeśli nie znaleziono żadnego z plików, następuje wewnętrzne przekierowanie do identyfikatora URI określonego w ostatnim parametrze.

gzip
Włącza lub wyłącza gzipping.

gzip_buffers
Ustawia liczbę i rozmiar buforów używanych do kompresji odpowiedzi. Domyślnie rozmiar bufora jest równy jednej stronie pamięci. Jest to 4K lub 8K, w zależności od platformy.

Jest to kropla wody jeśli chodzi o dyrektywy Nginx, więcej można znaleźć na stronie dokumentacji Nginx.

Dodaj komentarz