Hosting/2.-Webovy-server/2.1.-Apache,-PHP-a-TLS.md

74 lines
6.2 KiB
Markdown
Raw Permalink Normal View History

2024-12-08 12:58:02 +01:00
# Apache, PHP a TLS
2019-05-14 13:42:16 +02:00
## Apache HTTP Server
2019-05-14 14:15:18 +02:00
Konfigurace Apache HTTP Serveru se nachází v adresáři `/etc/apache2/`. Konfigurace *virtualhostů* jednotlivých subdomén je pak v podadresáři `/etc/apache2/sites-available/`, resp. `/etc/apache2/sites-enabled/`. Každý jednotlivý konfigurační soubor se týká pouze jednoho virtualhosta, resp. jedné subdomény. V případě webů běžících přímo na doméně druhého řádu jsou tyto vždy zároveň aliasovány i subdoménou `www` ve stejném konfiguračním souboru. Všechny virtualhosty mají nastaveno automatické přesměrovávání HTTP na HTTPS, včetně zaslání HTTP Strict Transport Security (HSTS) hlavičky.
2019-05-14 13:42:16 +02:00
Stejné rozdělení domén a subdomén je pak použito i u Let's Encrypt certifikátů o které žádá ACME klient [acme.sh](https://acme.sh/), jehož konfigurační adresář je `/etc/acme-sh`. Klient acme.sh má nastavenou cron úlohu pro automatickou obnovu certifikátů, která je spouštěna každý den ve 22:22.
V hlavním konfiguračním souboru Apache `/etc/apache2/apache2.conf` je nastavena výjimka pro URL `/.well-known/acme-challenge`, na které ACME protokol provádí challenge-response autentizaci. Tato lokace je tedy vždy vyjmuta z virtualhostů a aplikací na nich běžících a je spravována přímo globální konfigurací Apache.
### Seznam virtualhostů
2019-05-14 14:15:18 +02:00
- **000-default** - Virtualhost pro subdoménu **server.spotter.cz** a fallback virtualhost pro celý Apache HTTP Server
2019-05-14 13:42:16 +02:00
- **cluster.spotter.tv**
2024-12-08 12:58:02 +01:00
- **decidim.spotter.cz** - Proxy pro [Podman kontejner](../5.-Podman-kontejnery.md) Decidim
- **dms.spotter.ngo** - Proxy pro [Podman kontejner](../5.-Podman-kontejnery.md) SeedDMS
- **gitea** - Proxy pro [Podman kontejner](../5.-Podman-kontejnery.md) Gitea
2019-05-14 14:15:18 +02:00
- **jobseeker.cz** - Virtualhost pro doménu **jobseeker.cz** a subdoménu **www.jobseeker.cz**
2019-05-14 13:42:16 +02:00
- **job.spotter.cz**
2024-12-08 12:58:02 +01:00
- **kurzy.spotter.cloud** - Proxy pro [Podman kontejner](../5.-Podman-kontejnery.md) Odoo
2019-05-14 13:42:16 +02:00
- **loga.spotter.cz**
- **old.spotter.tv**
- **repo.spotter.cz**
2024-12-08 12:58:02 +01:00
- **spotter.cloud** - Proxy pro [Podman kontejner](../5.-Podman-kontejnery.md) Odoo
2019-05-14 14:15:18 +02:00
- **spotter.cz** - Virtualhost pro doménu **spotter.cz** a subdoménu **www.spotter.cz**
- **spotter.name** - Virtualhost pro doménu **spotter.name** a subdoménu **www.spotter.name**
- **spotter.ngo** - Virtualhost pro doménu **spotter.ngo** a subdoménu **www.spotter.ngo**
- **spotter.sk** - Virtualhost pro doménu **spotter.sk** a subdoménu **www.spotter.sk**
- **spotter.tv** - Virtualhost pro doménu **spotter.tv** a subdoménu **www.spotter.tv**
2024-12-08 12:58:02 +01:00
- **spuntovka.spotter.cloud** - Proxy pro [Podman kontejner](../5.-Podman-kontejnery.md) Odoo
2019-05-14 13:42:16 +02:00
- **trend.spotter.cz**
2021-04-17 21:27:04 +00:00
- **trendspotter.cz** - Nevyužita
2024-12-08 12:58:02 +01:00
- **voda.spotter.cz** - Proxy pro [Podman kontejner](../5.-Podman-kontejnery.md) Decidim
2019-05-14 13:42:16 +02:00
2024-12-08 12:58:02 +01:00
Pro výpis jednotlivých prezentací a aplikací, viz stránku [Weby a domény](2.2.-Weby-a-domeny.md).
2019-05-14 13:42:16 +02:00
### Funkce a zabezpečení Apache
2019-05-14 14:15:18 +02:00
V Apache HTTP Serveru jsou aktivní následující moduly
2024-12-08 12:58:02 +01:00
- access_compat, alias, auth_basic, authn_core, authn_file, authz_core, authz_host, authz_user, autoindex, deflate, dir, env, expires, filter, headers, http2, mime, mpm_event, negotiation, proxy, proxy_fcgi, proxy_http, proxy_wstunnel, reqtimeout, rewrite, setenvif, socache_shmcb, ssl, status, wsgi
2019-05-14 14:15:18 +02:00
Apache server neposílá hlavičku s informací o verzi. OpenSSL je nastaveno pro podporu moderních a mainstreamově používaných protokolů a šifer následnovně:
2024-12-08 12:58:02 +01:00
- **Verze OpenSSL:** 3.0.13
2019-05-14 14:45:23 +02:00
- **Podporované protokoly:** TLSv1.2, TLSv1.3
2024-12-08 12:58:02 +01:00
- **Podporované sady šifer:** ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
2019-05-14 14:45:23 +02:00
- **OCSP stapling:** Ano
2019-05-14 14:15:18 +02:00
2021-01-09 20:24:56 +00:00
Výsledek Qualys SSL testu:
2024-12-08 12:58:02 +01:00
[SSL_Server_Test__server.spotter.cz__Powered_by_Qualys_SSL_Labs_.pdf](../attachments/SSL_Server_Test__server.spotter.cz__Powered_by_Qualys_SSL_Labs_.pdf)
2019-05-14 14:15:18 +02:00
2019-05-14 13:42:16 +02:00
## PHP
2024-12-08 12:58:02 +01:00
PHP 8.3 interpret běží v samostatném manažeru procesů PHP-FPM a nesdílí tak paměťový prostor Apache HTTP Serveru, jako by tomu bylo v *tradičním* nastavení s mod_php8. Apache HTTP Server komunikuje s PHP-FPM přes FastCGI rozhraní zprostředkované pomocí *mod_proxy_fcgi* a unixových socketů v adresáři `/run/php/`. Hlavní konfigurační soubor pro PHP-FPM je `/etc/php/8.3/fpm/php.ini` a jednotlivé fondy procesů jsou definovány konfiguračními soubory v `/etc/php/8.3/fpm/pool.d/`. V současnosti jsou zde nastaveny tři fondy s 16 dynamicky vytvářenými PHP procesy - `vmail` pro Roundcube, `cloud` pro NextCloud a `www` pro ostatní weby.
Z důvodu udržení kompatility prezentací běžící na platformě [WordPress](2.3.-WordPress.md) ja na serveru instalován i PHP interpret ve verzi 7.4, který je nastaven ekvivalentním způsobem jako výše uvedené PHP 8.3.
2019-05-14 14:15:18 +02:00
2019-05-14 14:27:14 +02:00
### Funkce a zabezpečení PHP
2019-05-14 14:15:18 +02:00
2019-05-14 14:27:14 +02:00
V PHP-FPM jsou aktivní následující rozšíření
- bcmath, bz2, calendar, ctype, curl, dba, dom, exif, fileinfo, ftp, gd, geoip, gettext, gnupg, iconv, imagick, imap, intl, json, ldap, mbstring, mysqli, mysqlnd, opcache, pdo, pdo_dblib,
2019-05-14 14:45:23 +02:00
do_mysql, pdo_pgsql, pdo_sqlite, pgsql, phar, posix, readline, shmop, simplexml, soap, sockets, sqlite3, sysvmsg, sysvsem, sysvshm, tokenizer, wddx, xdebug, xml, xmlreader, xmlrpc, xmlwriter, xsl, zip
2024-12-08 12:58:02 +01:00
PHP neposílá hlavičku s informací o verzi. Funkce spouštění externích procesů jsou zakázány. Odesílání mailů funkcí `mail()` a jejími deriváty je logováno do souboru `/var/log/php8.3mail.log`, resp. `/var/log/php7.4mail.log`.
2019-05-14 14:45:23 +02:00
Výčet některých nastavení PHP:
- max_execution_time = 600
- max_input_time = 600
- max_input_vars = 5000
2024-12-08 12:58:02 +01:00
- memory_limit = 256M
2019-05-14 14:45:23 +02:00
- post_max_size = 16M
- upload_max_filesize = 16M
- max_file_uploads = 100
- disable_functions = pcntl_alarm, pcntl_fork, pcntl_waitpid, pcntl_wait, pcntl_wifexited, pcntl_wifstopped, pcntl_wifsignaled, pcntl_wifcontinued, pcntl_wexitstatus, pcntl_wtermsig, pcntl_wstopsig, pcntl_signal, pcntl_signal_get_handler, pcntl_signal_dispatch, pcntl_get_last_error, pcntl_strerror, pcntl_sigprocmask, pcntl_sigwaitinfo, pcntl_sigtimedwait, pcntl_exec, pcntl_getpriority, pcntl_setpriority, pcntl_async_signals, exec, passthru, popen, proc_open, shell_exec, system