Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Section


Column
width70%

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.


Column
width30%

Table of Contents



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
titleFragment 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
titleFragment 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
titleUtworzenie linków
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
titlePrzykł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
titlePrzykł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
titlePrzykł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
titlePrzykł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
titlePrzykł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";
}