...
Section |
---|
Column |
---|
| Serwer NGINX jest bardzo wydajnym serwerem HTTP, który obsługuje dla SowaSQL Premium całą komunikację z użytkownikami systemu. Na system składa się kilka usług, które udostępniane są pod różnymi adresami domenowymi (zwykle jako subdomeny). Na potrzeby dokumentacji przyjmujemy, że podstawową nazwą domenową jest biblioteka-miejska.sowa.pl - a poszczególne usługi będą udostępniane jako subdomeny (oczywiście wszystko może funkcjonować w oparciu o domenę wykupioną przez bibliotekę). Obowiązkowym punktem konfiguracji jest zabezpieczenie wszystkich stron certyfikatami SSL. W poniższej instrukcji będzie podana metoda wygenerowania bezpłatnych certyfikatów SSL (dzięki Let's Encrypt) - niemniej, jeśli biblioteka posiada certyfikat na własną domenę (np. certyfikat wildcard *.domena) - może użyć gotowych plików certyfikatów i tylko wskazać je w ścieżkach w konfiguracji. |
|
Usługi
Wariant w domenie sowa.pl
Usługi są udostępniane jako subdomeny przydzielonej dla danej biblioteki domeny głównej, np. biblioteka-miejska.sowa.pl
- brak +
www
- katalog OPAC - np. biblioteka-miejska.sowa.pl
i www.biblioteka-miejska.sowa.pl
cdn
- serwer multimediów - np. cdn.biblioteka-miejska.sowa.pl
web
- aplikacja webowa - np. web.biblioteka-miejska.sowa.pl
api
- serwer API - np. api.biblioteka-miejska.sowa.pl
Wariant w domenie własnej
Usługi są udostępniane jako subdomeny w domenie własnej biblioteki, np. biblioteka-miejska.com
opac
- katalog OPAC - np. opac.biblioteka-miejska.com
- przy czym biblioteka może już posiadać katalog na innej subdomenie - powinniśmy to zachować.sowa-cdn
- serwer multimediów - np. sowa-cdn.biblioteka-miejska.com
sowa-web
- aplikacja webowa - np. sowa-web.biblioteka-miejska.com
sowa-api
- serwer API - np. sowa-api.biblioteka-miejska.com
Ustawienie przekierowań
Przekierowanie ruchu HTTP na HTTPS
Zależy nam, by wszystkie usługi działały na bezpiecznym połączeniu, chronionym certyfikatem SSL. Dlatego cały ruch przekierujemy z 80 na 443.
Code Block |
---|
title | /etc/nginx/sites-available/00-default.conf |
---|
|
server {
listen 80;
server_name _;
root /dev/null;
client_max_body_size 256k;
# Wymagane tylko dla Let's Encrypt
location /.well-known/ {
alias /tmp/.well-known/;
}
location /status {
allow 127.0.0.0/8;
deny all;
stub_status;
}
location / {
limit_except GET HEAD {
deny all;
}
return 301 https://$host$request_uri;
}
} |
Przekierowania do lokalnych serwerów usług
Code Block |
---|
title | /etc/nginx/sites-available/01-sowa-base.conf |
---|
|
upstream opac {
server 127.0.0.1:8080;
keepalive 20;
}
upstream strix {
server 127.0.0.1:7364;
keepalive 20;
}
upstream sowaipmh {
server 127.0.0.1:7001;
keepalive 20;
}
upstream dziupla {
server 127.0.0.1:9080;
keepalive 20;
} |
Włączenie konfiguracji
Code Block |
---|
rm -f /etc/nginx/sites-enabled/default
ln -s /etc/nginx/sites-available/00-default.conf /etc/nginx/sites-enabled/00-default.conf
ln -s /etc/nginx/sites-available/01-sowa-base.conf /etc/nginx/sites-enabled/01-sowa-base.conf
systemctl restart nginx |
Certyfikaty SSL
W przypadku konfiguracji dla domeny sowa.pl, będziemy korzystać z darmowych certyfikatów Let's Encrypt. W przypadku domeny własnej - najlepiej, jeśli biblioteka dysponuje własnym certyfikatem.
Ten krok można pominąć, jeśli biblioteka dysponuje certyfikatem z innego źródła, dla wszystkich nazw domenowych, które będą w użyciu.
Instalacja narzędzia certbot
Certbot - https://certbot.eff.org/ - to narzędzie, które bardzo upraszcza proces pozyskiwania certyfikatów SSL z Let's Encrypt.
Code Block |
---|
apt install certbot |
Generowanie certyfikatu
Code Block |
---|
certbot certonly --webroot -w /tmp -d biblioteka-miejska.sowa.pl -d www.biblioteka-miejska.sowa.pl -d cdn.biblioteka-miejska.sowa.pl -d web.biblioteka-miejska.sowa.pl -d api.biblioteka-miejska.sowa.pl |
...
Code Block |
---|
title | Fragment opcji polecenia site |
---|
|
--ssl-cert=/etc/letsencrypt/live/biblioteka-miejska.sowa.pl/fullchain.pem --ssl-cert-key=/etc/letsencrypt/live/biblioteka-miejska.sowa.pl/privkey.pem |
Certyfikat własny
W przypadku własnego certyfikatu (najlepiej typu wildcard dla *.biblioteka-miejska.com
), trzeba umieścić na serwerze pliki w wybranym miejscu, np. w /etc/nginx/ssl/
...
Code Block |
---|
title | Fragment polecenia site |
---|
|
--ssl-cert=/etc/nginx/ssl/biblioteka-miejska.com-chain.pem --ssl-cert-key=/etc/nginx/ssl/biblioteka-miejska.com.key |
Konfiguracja usług
Usługi korzystają z podstawowego serwera NGINX (dla ruchu 80 i 443) oraz dodatkowego serwera Apache, działającego na porcie 8080.
Katalog OPAC
Jest on obsługiwany przez Apache'a (zob. poprzednią stronę), a NGINX zapewnia proxy.
...
Code Block |
---|
|
ln -s /etc/apache2/sites-available/biblioteka-miejska.sowa.pl.conf /home/sowa/.sowang/var/lib/sites/apache/biblioteka-miejska.sowa.pl.conf
ln -s /etc/apache2/sites-enabled/biblioteka-miejska.sowa.pl.conf /etc/apache2/sites-available/biblioteka-miejska.sowa.pl.conf
ln -s /etc/nginx/sites-available/biblioteka-miejska.sowa.pl.conf /home/sowa/.sowang/var/lib/sites/nginx/biblioteka-miejska.sowa.pl.conf
ln -s /etc/nginx/sites-enabled/biblioteka-miejska.sowa.pl.conf /etc/nginx/sites-available/biblioteka-miejska.sowa.pl.conf
systemctl reload apache2
systemctl reload nginx |
W przypadku konfiguracji ręcznej (np. rozdzielenie usług między kilka maszyn), należy skonfigurować NGINX i Apache wg poniższych wzorców.
Code Block |
---|
title | Przykładowa konfiguracja Nginx dla OPAC |
---|
|
server {
listen 443 ssl http2;
server_name biblioteka-miejska.sowa.pl;
root /dev/null;
ssl_certificate /etc/letsencrypt/live/biblioteka-miejska.sowa.pl/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/biblioteka-miejska.sowa.pl/privkey.pem;
keepalive_timeout 10m;
location / {
client_max_body_size 8m;
proxy_pass http://opac;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_request_buffering off;
}
}
|
Code Block |
---|
title | Przykładowa konfiguracja Apache dla OPAC |
---|
|
<VirtualHost *:8080>
DocumentRoot /home/sowa/sowa.opac/public
ServerName biblioteka-miejska.sowa.pl
DirectoryIndex index.php
ErrorLog /var/log/apache2/biblioteka-miejska.sowa.pl-error.log
TransferLog /var/log/apache2/biblioteka-miejska.sowa.pl-access.log
LogFormat combined
<Directory /home/sowa/sowa.opac/public>
Options SymlinksIfOwnerMatch
AllowOverride AuthConfig FileInfo
Order allow,deny
Allow from all
Require all granted
</Directory>
RewriteEngine on
</VirtualHost>
|
Serwer API
Posiada on wbudowaną obsługę HTTP i uruchamiany jest na lokalnym porcie 7364, NGINX zapewnia proxy.
...
Code Block |
---|
sowizor site add api --ssl-cert=/etc/nginx/ssl/biblioteka-miejska.com-chain.pem --ssl-cert-key=/etc/nginx/ssl/biblioteka-miejska.com.key
sudo systemctl reload nginx |
W przypadku konfiguracji ręcznej, należy skonfigurować NGINX wg poniższego wzoru:
Code Block |
---|
title | Przykładowa konfiguracja NGINx dla serwera API |
---|
|
server {
listen 443 ssl http2;
server_name api.biblioteka-miejska.sowa.pl;
root /dev/null;
ssl_certificate /etc/letsencrypt/live/biblioteka-miejska.sowa.pl/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/biblioteka-miejska.sowa.pl/privkey.pem;
keepalive_timeout 30m;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
send_timeout 600s;
location ~ ^/tmp/([^/]+)/(.+)$ {
alias /home/sowa/sowa_sql/katalogi/$1/tmp/$2;
}
location /icons {
alias /home/sowa/sowa_sql/etc/icons;
}
location /robots.txt {
add_header Content-Type text/plain;
return 200 "User-agent: *
Disallow: /
";
}
location ~ ^/sowacgi.php.*$ {
return 410;
}
location / {
client_max_body_size 4m;
proxy_pass http://strix;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_request_buffering off;
proxy_buffering off;
}
}
|
Serwer multimediów
Uruchamiany jest w kontenerze docker i również sam obsługuje HTTP, NGINX zapewnia proxy.
...
Code Block |
---|
sowizor site add cdn --ssl-cert=/etc/nginx/ssl/biblioteka-miejska.com-chain.pem --ssl-cert-key=/etc/nginx/ssl/biblioteka-miejska.com.key
sudo systemctl reload nginx |
W przypadku konfiguracji ręcznej, należy skonfigurować NGINX wg poniższego wzoru:
Code Block |
---|
title | Przykładowa konfiguracja NGINX dla serwera multimediów |
---|
|
server {
listen 443 ssl http2;
server_name cdn.biblioteka-miejska.sowa.pl;
root /dev/null;
ssl_certificate /etc/letsencrypt/live/biblioteka-miejska.sowa.pl/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/biblioteka-miejska.sowa.pl/privkey.pem;
keepalive_timeout 10m;
location / {
client_max_body_size 0;
proxy_pass http://dziupla;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_request_buffering off;
}
}
|
Aplikacja Webowa
Jest serwowana bezpośrednio przez NGINX'a.
...
Code Block |
---|
sowizor site add web --ssl-cert=/etc/nginx/ssl/biblioteka-miejska.com-chain.pem --ssl-cert-key=/etc/nginx/ssl/biblioteka-miejska.com.key --force
sudo systemctl reload nginx |
W przypadku konfiguracji ręcznej, należy skonfigurować NGINX wg poniższego wzoru:
Code Block |
---|
title | Przykładowa konfiguracja NGINX dla aplikacji webowej |
---|
|
server {
listen 443 ssl http2;
server_name web.biblioteka-miejska.sowa.pl;
ssl_certificate /etc/letsencrypt/live/biblioteka-miejska.sowa.pl/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/biblioteka-miejska.sowa.pl/privkey.pem;
include "/home/sowa/websowa/nginx.conf";
}
|