Wprawdzie kiedyś już pisałem o instalacji i konfiguracji webserwera Nginx, to dziś chciałbym jeszcze wrócić do tego tematu, i pokazać Wam jak usprawnić zarządzanie większą ilością domen za pomocą kilku dodatkowych współdzielonych plików konfiguracyjnych, które później wystarczy tylko aktywować dla danej domeny.
Spis treści w artykule
Nginx Snippets
Będzie to też w pewnym sensie nawiązanie m.in. do wpisu dotyczącego filtrowania adresów IP należących do Cloudflare, z tym, że wtedy tworzyliśmy dodatkowy plik konfiguracyjny automatycznie aktywny dla wszystkich domen:
/etc/nginx/conf.d/cloudflare.conf
Natomiast możemy do dodatkowych plików konfiguracyjnych przenieść również ustawienia, które możemy później dołączać do wybranych domen samodzielnie.
Pomysł na ten wpis pojawił się przy aktualizacji Nginx z wersji 1.2.* (Debian Wheezy) do wersji 1.6.* (Debian Jessie) na serwerze znajomego, na którym łącznie skonfigurowanych jest ponad 20 domen, dla których po aktualizacji ręcznie trzeba było zmieniać ustawienia PHP, ze względu na „biały ekran śmierci”.
A tak wystarczyłoby zmienić te ustawienia tylko w jednym pliku… ;-)
Konfiguracja domen w Nginx wydzielona do plików wspólnych
Przykładowa (stworzona na szybko, dla tego poradnika, więc celowo dość rozbudowana ;-)) konfiguracja domeny (vHosta) wraz z dodatkowymi ustawieniami m.in. dla WordPressa może wyglądać np. tak:
# www.domena -> domena
server {
server_name www.webinsider.pl;
return 301 $scheme:https://webinsider.pl$request_uri;
}
server {
listen 80;
listen 443 ssl;
ssl on;
ssl_certificate /etc/ssl/private/webinsider.pl/ssl.crt;
ssl_certificate_key /etc/ssl/private/webinsider.pl/ssl.key;
ssl_session_timeout 10m;
keepalive_timeout 60;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
ssl_prefer_server_ciphers on;
root /var/www/webinsider.pl/public_html/;
index index.html index.htm index.php;
server_name webinsider.pl *.webinsider.pl;
location /wp-admin {
auth_basic "STOP";
auth_basic_user_file /var/www/.passwords/.password_file01;
}
location ~* wp-config.php {
deny all;
}
location /wp-admin/admin-ajax.php {
allow all;
}
location ~* /(?:uploads|files)/.*\.php$ {
deny all;
}
location ~* /wp-content/.*\.php$ {
deny all;
}
location ~* /wp-includes/.*\.php$ {
deny all;
}
location ~* /(?:uploads|files|wp-content|wp-includes)/.*\.php$ {
deny all;
}
charset utf-8;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
access_log off; log_not_found off; expires max;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
access_log /var/log/nginx/webinsider.pl_access.log;
error_log /var/log/nginx/webinsider.pl_error.log;
error_page 404 /404.html;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
# Nginx 1.2:
#include fastcgi_params;
# Nginx 1.6:
include fastcgi.conf;
}
}
A w przypadku wykorzystania plików wspólnych mogłaby wyglądać tak:
# www.domena -> domena
server {
server_name www.webinsider.pl;
return 301 $scheme:https://webinsider.pl$request_uri;
}
server {
listen 80;
listen 443 ssl;
ssl on;
ssl_certificate /etc/ssl/private/webinsider.pl/ssl.crt;
ssl_certificate_key /etc/ssl/private/webinsider.pl/ssl.key;
# ----- ssl-config -----
include global/ssl-config;
# ----- ssl-config -----
root /var/www/webinsider.pl/public_html/;
index index.html index.htm index.php;
server_name webinsider.pl *.webinsider.pl;
# ----- WordPress -----
include global/wordpress;
# ----- WordPress -----
# ----- Dodatkowe ustawienia globalne dla stron -----
include global/all-site;
# ----- Dodatkowe ustawienia globalne dla stron -----
location / {
try_files $uri $uri/ /index.php?$args;
}
access_log /var/log/nginx/webinsider.pl_access.log;
error_log /var/log/nginx/webinsider.pl_error.log;
error_page 404 /404.html;
# ----- Dodatkowe ustawienia globalne dla stron - PHP -----
include global/php;
# ----- Dodatkowe ustawienia globalne dla stron - PHP -----
}
Jak widać – zdecydowanie przejrzyściej, a dodatkowo ew. zmiana np. w ustawieniach dla PHP czy wspólnych dla wszystkich stron sprowadza się do edycji jednego, wspólnego pliku.
Zawartość tych plików mam nadzieję, że jest dla Was oczywista – po prostu jest to kod wyjęty z pliku konfiguracyjnego domeny, i przerzucony do oddzielnego pliku wczytywanego np. za pomocą takiego kodu:
# ----- Dodatkowe ustawienia globalne dla stron - PHP -----
include global/php;
# ----- Dodatkowe ustawienia globalne dla stron - PHP -----
A w pliku global/php (/etc/nginx/global/php) znajduje się np. taki kod:
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
# Nginx 1.2:
#include fastcgi_params;
# Nginx 1.6:
include fastcgi.conf;
}
Czemu global a nie snippets
Warto może jeszcze wspomnieć o lokalizacji tych plików – na powyższych przykładach jest to lokalizacja:
/etc/nginx/global
Stąd ścieżka wykorzystana w pliku konfiguracyjnym domeny:
include global/nazwa-pliku;
Jest to jeszcze pozostałość z czasów Nginx 1.2 (tak się kiedyś uczyłem), obecnie (Nginx 1.6) instalator tworzy katalog „snippets”:
/etc/nginx/snippets
Teraz tu przechowywane są konfiguracyjne pliki współdzielone, a więc jeśli zdecydujecie się na przechowywanie plików w tym katalogu (w „global” też będą działać), to ich wczytywanie do konfiguracji będzie odbywać się za pomocą takiego kodu:
include snippets/nazwa-pliku.conf;
Konfiguracja demo
W przypadku Nginx w wersji 1.6+ już na dzień dobry w podanym powyżej katalogu macie 2 pliki do wykorzystania w konfiguracji swoich domen:
- fastcgi-php.conf
- snakeoil.conf
Pierwszy to przykładowe ustawienia dla PHP (fragment), drugi odpowiada za wczytanie plików przykładowego certyfikatu SSL (ścieżki do plików certyfikatu).
- Wakacje składkowe ZUS a zawieszenie działalności gospodarczej, czyli uważaj, bo być może nie będziesz mógł skorzystać (w 2024) - 1970-01-01
- Przykładowy kalkulator wyceny usługi druku 3D, czyli nie tylko materiał się liczy - 1970-01-01
- Home Assistant 2024.10, czyli nowa karta „nagłówek” i niedziałający TTS w ramach usługi Google Cloud - 1970-01-01
Bardzo ciekawy artykuł! Plasuję.
I jak to często bywa – wpis powstał trochę z przypadku (życie), bo niby oczywista rzecz okazała się nie taka oczywista… ;-)