Konfiguracja NGINX/Apache dla SowaSQL Premium
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
iwww.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.
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
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
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.
apt install certbot
Generowanie certyfikatu
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
Tak wygenerowane certyfikaty będziemy używać w kolejnych krokach podczas generowania konfiguracji usług.
--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/
- Plik zawierający certyfikat domeny oraz certyfikat pośredni CA (muszą być oba w jednym pliku!) - np. /etc/nginx/ssl/biblioteka-miejska.com-chain.pem
- Plik zaawierający klucz prywatny certyfikatu - np. /etc/nginx/ssl/biblioteka-miejska.com.key
Wówczas te certyfikaty będziemy wskazywać podczas konfiguracji usług.
--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.
Wymagania
Pakiet sowa.opac powinien być wcześniej zainstalowy. Adres url katalogu należy wpisać do CRM w Zainstalowane wersje → SOWA-WWW
sowizor site add www --ssl-cert=/etc/nginx/ssl/biblioteka-miejska.com-chain.pem --ssl-cert-key=/etc/nginx/ssl/biblioteka-miejska.com.key
Polecenie wygeneruje automatycznie konfigurację zarówno dla apache, jak i dla nginx. Obie te konfiguracje trzeba odpowiednio podlinkować:
- Plik dla Apache będzie w postaci: /home/sowa/.sowang/var/lib/sites/apache/biblioteka-miejska.sowa.pl.conf
- Plik dla Nginxa będzie w postaci: /home/sowa/.sowang/var/lib/sites/nginx/biblioteka-miejska.sowa.pl.conf
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.
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; } }
<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.
Wymagania
Grupa pakietów STRIX powinna być wcześniej zainstalowana. Jeśli usługa API działa na domenie własnej biblioteki, wymagane jest wpisanie adresu url dla API do CRM w Zainstalowane wersje → Strix: host API
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:
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.
Podczas wywołania polecenia należy wpisać adres, np. sowa-cdn.biblioteka-miejska.com
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:
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.
Wymagania
Pakiet websowa powinien być wcześniej zainstalowany. Adres url websowy należy wpisać do CRM w Zainstalowane wersje → Sowa WEB Klient
Opcję --force w poleceniu wydajemy tylko wówczas, jeśli migracja do strix jeszcze nie była robiona. W takim przypadku, po migracji będzie konieczne ponowne wygenerowanie konfiguracji tym samym poleceniem (ale bez --force)
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:
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"; }