Прокси на внутренний IP: анализ и скачивания через REST-эндпоинты WordPress (режим proxy/direct, настройки)
This commit is contained in:
1 parent
b3ac9491f6
commit
867fe7bc66
3 files changed
+191
-15
No files matched your search
@@ -37,23 +37,44 @@ zip -r med-diagnostics.zip . -x README.md
|
||||
|
||||
## Настройки
|
||||
|
||||
**Настройки → Med Diagnostics** — поле «URL API-бэкенда» (по умолчанию `https://med.my-dpr.ru`).
|
||||
**Настройки → Med Diagnostics**:
|
||||
|
||||
| Поле | Описание |
|
||||
|---|---|
|
||||
| **Режим подключения** | `Через сервер (внутренний IP)` — браузер шлёт видео на этот WordPress, PHP проксирует запрос на внутренний IP бэкенда (по умолчанию, рекомендуется когда WordPress и API на одном сервере). `Напрямую из браузера (CORS)` — браузер обращается к публичному URL API. |
|
||||
| **Внутренний URL бэкенда** | Адрес API, доступный с этого сервера (по умолчанию `http://127.0.0.1:18018`). Используется в режиме «Через сервер». |
|
||||
| **Публичный URL API-бэкенда** | Публичный адрес Flask-приложения (по умолчанию `https://med.my-dpr.ru`). Используется в режиме «Напрямую» и для ссылки «Поделиться». |
|
||||
|
||||
Можно также переопределить кодом:
|
||||
|
||||
```php
|
||||
add_filter('med_diag_api_url', fn() => 'https://другой-домен.ru');
|
||||
add_filter('med_diag_internal_url', fn() => 'http://10.0.0.5:18018');
|
||||
add_filter('med_diag_mode', fn() => 'direct');
|
||||
```
|
||||
|
||||
## Как это работает
|
||||
|
||||
- Плагин выводит ту же вёрстку, что и главная страница сервиса (стили с префиксом `med-`, чтобы не конфликтовать с темой).
|
||||
- JS отправляет видео на API-бэкенд (`POST /analyze`) с абсолютным URL — поэтому нужен CORS на стороне Flask.
|
||||
- **Режим «Через сервер» (по умолчанию)**: JS отправляет видео на REST-эндпоинт этого же WordPress (`/wp-json/med-diag/v1/analyze`), PHP пересылает его на внутренний IP бэкенда (`http://127.0.0.1:18018/analyze`). Скачивания PDF/DOCX/видео идут через `/wp-json/med-diag/v1/download/<id>/<type>`. CORS не нужен — все запросы same-origin.
|
||||
- **Режим «Напрямую»**: JS отправляет видео на публичный URL API (`POST /analyze`) — тогда нужен CORS на стороне Flask.
|
||||
- Результат (сводка, показатели, рекомендации, кнопки PDF/DOCX/видео/поделиться) рендерится на странице WordPress.
|
||||
- Сканирование с камеры работает на мобильных (canvas 720×720 + MediaRecorder).
|
||||
|
||||
## Требования к серверу WordPress (режим «Через сервер»)
|
||||
|
||||
Видео сначала загружается в PHP, поэтому в `php.ini` должны быть подняты лимиты:
|
||||
|
||||
```ini
|
||||
upload_max_filesize = 100M
|
||||
post_max_size = 100M
|
||||
max_execution_time = 300
|
||||
```
|
||||
|
||||
Проверить текущие значения: `php -i | grep -E "upload_max_filesize|post_max_size|max_execution_time"`.
|
||||
|
||||
## Требования к бэкенду (Flask)
|
||||
|
||||
В `app.py` серверного репозитория уже добавлена поддержка CORS:
|
||||
В `app.py` серверного репозитория уже добавлена поддержка CORS (нужна только в режиме «Напрямую»):
|
||||
|
||||
- `Access-Control-Allow-Origin` — по умолчанию `*`, можно ограничить через env `CORS_ORIGINS` (список через запятую, например `https://site1.ru,https://site2.ru`).
|
||||
- Preflight `OPTIONS /analyze` возвращает `204`.
|
||||
@@ -69,7 +90,8 @@ add_filter('med_diag_api_url', fn() => 'https://другой-домен.ru');
|
||||
|
||||
- Шорткод используйте **один раз на странице** (id элементов фиксированы).
|
||||
- Для работы сканирования с камеры нужен HTTPS на сайте WordPress (getUserMedia требует secure context).
|
||||
- Загрузка видео идёт напрямую в API-бэкенд — убедитесь, что `client_max_body_size` в nginx бэкенда ≥ 100 МБ.
|
||||
- В режиме «Через сервер» видео загружается в PHP — следите за лимитами `upload_max_filesize`/`post_max_size`/`max_execution_time` (см. выше).
|
||||
- Ссылка «Поделиться» всегда ведёт на публичный URL API (`/r/<share_id>`).
|
||||
|
||||
## Структура
|
||||
|
||||
|
||||
Reference in new issue
Block a user