Commit d3f7ab04 authored by Vitaly Lipatov's avatar Vitaly Lipatov

docs: add host03 hosting reference (HTTPS setup procedure)

Move host03 knowledge from memory to .claude/docs/host03.md: nginx+Apache architecture, certbot/webroot, SSL block template, sub_filter for legacy CMS that emit absolute http:// links. Co-Authored-By: 's avatarClaude Opus 4.7 (1M context) <noreply@anthropic.com>
parent d0d9c13b
---
name: host03 (Etersoft hosting)
description: Сайты на host03.eterhost.ru (91.232.225.9) — nginx frontend + Apache CT 390, добавление HTTPS
type: reference
---
# host03 — Etersoft hosting
- **Хост**: host03.eterhost.ru, IP 91.232.225.9
- **Доступ**: `ssh -p32 root@host03`
- **Backend**: Apache в CT 390 (VEID=390), upstream `http://sites`
- **Frontend**: nginx 1.16.1
- **Sites81 = CTID 381** (отдельный backend)
## Где конфиги nginx
- `/etc/nginx/sites-enabled.d/*.conf` — основной каталог
- Свежие/ручные конфиги — прямо здесь
- Автогенерированные — в `sites-enabled.d/generated/` (пишет `create_nginx_from_apache.sh`)
- Файл в `sites-enabled.d/` перекрывает одноимённый в `generated/`
- `/etc/nginx/include/` — общие include-блоки (`ssl.conf`, `letsencrypt.conf`, `sslonly.conf`, `trans-proxy.conf`, `set-mainhost.conf`, `rewrite-www.conf` и т.д.)
## Скрипт-генератор
`/root/nginx-etersoft/apache2/create_nginx_from_apache.sh`:
- Парсит `/var/lib/vz/private/390/etc/httpd2/conf/sites-enabled/`, генерит nginx-конфиги
- Проверяет `hosts_nossl.list` — если домена НЕТ в списке, пытается включить SSL-блок
- Если есть `/etc/letsencrypt/live/$DOMAIN/fullchain.pem` — раскомментирует строки с сертификатом
- **Запускать осторожно**: перетряхивает много конфигов, проще точечно править руками
## Let's Encrypt
- **certbot** 0.31.0, аккаунт зарегистрирован
- **Webroot для ACME**: `/var/spool/nginx/tmp/client` (отдаётся через `include/letsencrypt.conf`)
- **Renewal configs**: `/etc/letsencrypt/renewal/<domain>.conf`
- **Renew hook**: `serv nginx reload` (добавлять в renewal config)
## Процедура добавления HTTPS на сайт
1. **Бэкап**:
```
cp -a /etc/nginx/sites-enabled.d/<site>.conf{,.bak-$(date +%Y%m%d-%H%M)}
```
2. **Включить `/.well-known/`** для ACME (если нет): добавить `include include/letsencrypt.conf;` в server-блок ДО `location /` (иначе Apache backend отвечает 404 на challenge)
3. **`nginx -t && serv nginx reload`**
4. **Получить сертификат** (все алиасы — в один SAN):
```
certbot certonly --webroot -w /var/spool/nginx/tmp/client \
-d <domain> -d www.<domain> [-d <alias> ...] --non-interactive
```
5. **Добавить renew hook**:
```
sed -i '/^authenticator = webroot/a renew_hook = serv nginx reload' \
/etc/letsencrypt/renewal/<domain>.conf
```
6. **Добавить SSL-блок в nginx-конфиг** (после `server {`, образец `borbazaveru.info.conf`):
```nginx
listen 80;
listen 443 ssl http2;
listen [::]:80;
listen [::]:443 ssl http2;
server_name ...;
ssl_certificate /etc/letsencrypt/live/<domain>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<domain>/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/<domain>/chain.pem;
include include/ssl.conf;
include include/letsencrypt.conf;
include include/sslonly.conf; # 301 http→https, acme исключён
```
7. **HTTP→HTTPS в выдаваемых страницах** (для старых CMS, которые в HTML пишут абсолютные `http://`-ссылки — Joomla, etc.). Размещать в server-блоке (не в location), до `include include/stat.conf;`:
```nginx
sub_filter 'http://<domain>/' '$scheme://<domain>/';
sub_filter 'http:\/\/<domain>\/' '$scheme:\/\/<domain>\/'; # JSON
sub_filter 'http%3A%2F%2F<domain>%2F' '$scheme%3A%2F%2F<domain>%2F'; # URL-encoded
sub_filter_once off;
sub_filter_last_modified on;
```
Образцы: `eterfund.ru.conf` (3 варианта), `krinmet.ru.conf` (только обычный)
8. **`nginx -t && serv nginx reload`** + проверка `curl -sI https://<domain>/`
## Что уже передаётся в backend (`trans-proxy.inc`)
- `X-Forwarded-Proto $scheme` — Joomla/PHP должны видеть HTTPS, но старые версии часто игнорируют (отсюда нужен sub_filter)
- `X-Forwarded-For`, `X-Real-IP`, `Host` — тоже передаются
...@@ -74,7 +74,6 @@ ...@@ -74,7 +74,6 @@
- Обновление ALT: `epm release-upgrade --force` - Обновление ALT: `epm release-upgrade --force`
- journald в LXC: `Storage=persistent` + `SystemMaxUse=16M` - journald в LXC: `Storage=persistent` + `SystemMaxUse=16M`
- LXC на border: `systemd-tmpfiles-setup` status=73 → `systemd-tmpfiles --create` - LXC на border: `systemd-tmpfiles-setup` status=73 → `systemd-tmpfiles --create`
- host03 — Etersoft hosting. `ssh -p32 root@host03`, sites81 = CTID 381
- Cyrus autocreate: разделитель `|`, НЕ пробел! - Cyrus autocreate: разделитель `|`, НЕ пробел!
- mail.etersoft.ru: postfix НЕ пишет в journald, только в `/var/log/mail/all` через rsyslog → fail2ban должен использовать `backend = polling` + `logpath = /var/log/mail/all` (не `%(postfix_log)s` из ALT defaults, который указывает на systemd) - mail.etersoft.ru: postfix НЕ пишет в journald, только в `/var/log/mail/all` через rsyslog → fail2ban должен использовать `backend = polling` + `logpath = /var/log/mail/all` (не `%(postfix_log)s` из ALT defaults, который указывает на systemd)
- ALT sudo подключает **`/etc/sudo.d/`** (НЕ `/etc/sudoers.d/`!) — `cat /etc/sudoers` показывает `#includedir /etc/sudo.d`. Файлы в `/etc/sudoers.d/` игнорируются. - ALT sudo подключает **`/etc/sudo.d/`** (НЕ `/etc/sudoers.d/`!) — `cat /etc/sudoers` показывает `#includedir /etc/sudo.d`. Файлы в `/etc/sudoers.d/` игнорируются.
......
...@@ -73,6 +73,7 @@ ansible-playbook -i /root/.ansible/hosts ansible/playbooks/NAME.yml ...@@ -73,6 +73,7 @@ ansible-playbook -i /root/.ansible/hosts ansible/playbooks/NAME.yml
- `dhash.ru.md` — IPFS нода и gateway (CT 366) - `dhash.ru.md` — IPFS нода и gateway (CT 366)
- `nfs.md` — NFS серверы aspetos/spacer, manage-gids, FS-Cache - `nfs.md` — NFS серверы aspetos/spacer, manage-gids, FS-Cache
- `epm.md` — epm/serv команды для ALT Linux - `epm.md` — epm/serv команды для ALT Linux
- `host03.md` — хостинг host03.eterhost.ru (nginx + Apache CT 390), процедура добавления HTTPS
- Ты помощник системного администратора и выполняешь задачи по моему указанию. Ведёшь себя осмотрительно и спрашиваешь при выполнении команд. - Ты помощник системного администратора и выполняешь задачи по моему указанию. Ведёшь себя осмотрительно и спрашиваешь при выполнении команд.
- Подключение к удалённым серверам либо без пользователя и потом sudo su -, либо сразу root@ - Подключение к удалённым серверам либо без пользователя и потом sudo su -, либо сразу root@
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment