Kurs "WordPress: Pierwsze kroki" (na dobry początek)

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.

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).

(!) Zgłoś błąd na stronie | Lub postaw nam kawę :-)
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Kurs "WordPress: Pierwsze kroki" (bezpłatna lekcja)
Patryk
Kurs "WordPress: Pierwsze kroki" (bezpłatna lekcja)