Obsługa wielu domen na jednym serwerze WWW (Nginx/Apache2)
Obsługa wielu domen na jednym serwerze WWW (Nginx/Apache2)#
Jeśli kilka domen ma działać na jednym serwerze, konfiguracja sprowadza się do prostego układu:
- wszystkie domeny wskazują na ten sam serwer,
- każda domena ma osobny katalog z plikami,
- każda domena ma osobny blok konfiguracyjny w serwerze WWW,
- logi są rozdzielone per domena.
Załóżmy taki przykład:
example.comwww.example.comdrugadomena.plwww.drugadomena.pl
Katalogi aplikacji:
/var/www/example.com
/var/www/drugadomena.pl
Nginx#
DNS i katalogi#
Na początek rekordy DNS muszą wskazywać na ten sam adres IP, w przypadku konfiguracji domeny przez Cytrusa będzie to:
example.com A 135.181.95.85
www.example.com A 135.181.95.85
drugadomena.pl A 135.181.95.85
www.drugadomena.pl A 135.181.95.85
💡 Uwaga! Pamiętaj by dodać je w konfiguracji w panelu Mikrusa.
Jednak jeżeli używasz domen przez Cloudflare, musisz podać adres IPv6 w konfiguracji. Pamiętaj by zmienić adres IPv6 na własny!
example.com AAAA 2a01:4f9:c001:ca1::100
www.example.com AAAA 2a01:4f9:c001:ca1::100
drugadomena.pl AAAA 2a01:4f9:c001:ca1::100
www.drugadomena.pl AAAA 2a01:4f9:c001:ca1::100
Należy stworzyć katalogi na serwerze:
mkdir -p /var/www/example.com/
mkdir -p /var/www/drugadomena.pl/
echo "example.com działa" > /var/www/example.com/index.html
echo "drugadomena.pl działa" > /var/www/drugadomena.pl/index.html
Konfiguracja wielu domen w Nginx#
W Nginx standardowy układ to:
- pliki konfiguracyjne w
/etc/nginx/sites-available/ - aktywne strony w
/etc/nginx/sites-enabled/
💡 W systemach Alpine (Frog) obie funkcje pełni katalog
/etc/nginx/http.d
Osobny plik dla każdej domeny#
example.com#
Plik:
/etc/nginx/sites-available/example.com
Zawartość:
server {
listen [::]:80; # Ważne! to musi być adres IPv6!
server_name example.com www.example.com;
root /var/www/example.com;
index index.html index.htm index.php;
access_log /var/log/nginx/example.com-access.log;
error_log /var/log/nginx/example.com-error.log;
location / {
try_files $uri $uri/ =404;
}
}
drugadomena.pl#
Plik:
/etc/nginx/sites-available/drugadomena.pl
Zawartość:
server {
listen [::]:80;
server_name drugadomena.pl www.drugadomena.pl;
root /var/www/drugadomena.pl;
index index.html index.htm index.php;
access_log /var/log/nginx/drugadomena-access.log;
error_log /var/log/nginx/drugadomena-error.log;
location / {
try_files $uri $uri/ =404;
}
}
Aktywacja konfiguracji#
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ # aktywacja pierwszej domeny
ln -s /etc/nginx/sites-available/drugadomena.pl /etc/nginx/sites-enabled/ #... oraz drugiej
nginx -t # sprawdzenie poprawności konfiguracji
systemctl reload nginx # i finalne załadowanie jej
Po tej operacji obie domeny powinny odpowiadać z własnych katalogów.
Jeśli aplikacja używa PHP#
Dla PHP w Nginx trzeba dodać obsługę PHP-FPM. Przykład dla example.com:
server {
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.php index.html index.htm;
access_log /var/log/nginx/example.com-access.log;
error_log /var/log/nginx/example.com-error.log;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri =404;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
}
Jeśli masz inną wersję PHP, zmień ścieżkę do socketa. Możesz je zobaczyć poleceniem ls /run/php/*.sock
Redirect www → bez www#
Jeśli chcesz mieć jedną główną wersję domeny, ustaw osobny blok (w tym samym pliku):
server {
listen [::]:80;
server_name www.example.com;
return 301 https://example.com$request_uri;
}
Wtedy główny blok dla example.com może wyglądać tak:
server {
listen [::]:80;
server_name example.com;
root /var/www/example.com;
index index.html index.htm index.php;
access_log /var/log/nginx/example.com-access.log;
error_log /var/log/nginx/example.com-error.log;
location / {
try_files $uri $uri/ =404;
}
}
Konfiguracja wielu domen w Apache2#
W Apache2 każda domena dostaje własny VirtualHost.
Włączenie podstawowych modułów#
Najczęściej potrzebne są:
a2enmod rewrite
systemctl restart apache2
Osobny plik dla każdej domeny#
example.com#
Plik:
/etc/apache2/sites-available/example.com.conf
Zawartość:
<VirtualHost [::]:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com
<Directory /var/www/example.com>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined
</VirtualHost>
drugadomena.pl#
Plik:
/etc/apache2/sites-available/drugadomena.pl.conf
Zawartość:
<VirtualHost [::]:80>
ServerName drugadomena.pl
ServerAlias www.drugadomena.pl
DocumentRoot /var/www/drugadomena.pl
<Directory /var/www/drugadomena.pl>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/drugadomena-error.log
CustomLog ${APACHE_LOG_DIR}/drugadomena-access.log combined
</VirtualHost>
Aktywacja konfiguracji#
a2ensite example.com.conf
a2ensite drugadomena.pl.conf
apache2ctl configtest
systemctl reload apache2
Po tej operacji Apache powinien serwować obie domeny z osobnych katalogów.
Redirect www → bez www#
Jeśli chcesz wymusić jedną wersję adresu, zrób osobny VirtualHost tylko do przekierowania:
<VirtualHost [::]:80>
ServerName www.example.com
Redirect permanent / https://example.com/
</VirtualHost>
Główna konfiguracja zostaje wtedy tylko dla example.com:
<VirtualHost [::]:80>
ServerName example.com
DocumentRoot /var/www/example.com
<Directory /var/www/example.com>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined
</VirtualHost>
Najczęstsze błędy#
1. Zły root albo DocumentRoot#
Jeśli ścieżka jest błędna, domena może zwracać 404, 503 albo błąd ogólny błąd 500.
2. Brak aktywacji konfiguracji#
Samo utworzenie pliku nic nie daje. Trzeba go jeszcze włączyć:
- w Nginx przez utworzenie linku symbolicznego do
sites-enabled, - w Apache2 przez polecenie
a2ensite.
3. Brak testu konfiguracji przed restartem#
Zawsze warto sprawdzić składnię przed przeładowaniem usługi:
# dla nginx:
nginx -t
# lub dla apache2:
apache2ctl configtest
4. Złe uprawnienia dla katalogów stron#
Upewnij się że użytkownik stron (www-data) ma uprawnienia do odczytu katalogu w którym jest twoja strona.
Jeżeli używasz Cloudflare, twoje strony powinny już być dostępne. Jeżeli hostujesz je przez Cytrusa, pamiętaj by dodać je w panelu!
Jeśli szukasz miejsca dla swoich developerskich potrzeb, to zapoznaj się z ofertą serwerów VPS od Mikrusa.
SerweryVPS już od 35 zł rocznie.
Dowiedz się więcej