Не зря я ругался на NPM
Сообщество решило форкнуть проект и выпустить NPM Plus
Основные отличия (NPMplus vs оригинальный Nginx Proxy Manager)
| Фича | Оригинальный Nginx Proxy Manager | NPMplus |
|---|---|---|
| HTTP/3 (QUIC) | Нет официальной поддержки HTTP/3 в большинстве версий (только через ручные настройки или патчи). | Поддерживается. |
| Web Application Firewall (WAF) / IPS / ModSecurity | Стандартно нет интегрированной WAF или IPS, кроме базовых возможностей. Требуются внешние решения. | Есть поддержка CrowdSec IPS, ModSecurity + Core Rule Set. |
| Логи / аналитика | В базовой версии логирование, но нет продвинутой встроенной аналитики или реального времени с красивыми дашбордами. | Включен GoAccess для просмотра логов / аналитики. |
| UI / Темы / Удобства | Интерфейс работает, базовые функции по настройке прокси, SSL, редиректов и т.п. | Есть дополнения: тёмный режим, улучшенные настройки TLS, улучшенные опции для продвинутых пользователей. |
| TLS / сертификаты | Поддержка Let’s Encrypt, загрузка пользовательских certs. | То же + оптимизации: ускорение создания сертификатов, OCSP Stapling, возможность более гибкой настройки ACME, кастомные CA и chain.pem, поддержка многих доменов на один сертификат (до ~99) и пр. |
| Безопасность | Хорошая, но в базовой версии меньше встроенных защит. | Улучшенная за счёт WAF, IPS, более строгих TLS-протоколов, скрытия заголовков и пр. |
| Поддержка и активность разработки | Оригинальный проект развивается, но некоторые пользователи жалуются, что обновления медленные. ([Reddit][3]) | По отзывам, форк более активно развивается, добавляются новые функции, баги исправляются. |
| Сложность / надстройки | Проще, меньше дополнительных компонентов, легче поддерживать минимальную установку. | Более сложный набор возможностей, больше зависимостей, потенциально более высокая нагрузка и больше параметров, которые надо конфигурировать. Это может быть как плюсом (гибкость), так и минусом (сложность). |
Плюсы NPMplus
- Более современная безопасность (HTTP/3, WAF, IPS).
- Дополнительные функции аналитики (логи, GoAccess).
- Богатая настройка TLS и сертификатов.
- Дополнительные удобства в UI, темная тема и др.
- Активное развитие и сообщество, добавление новых опций.
Минусы / недостатки NPMplus по сравнению с оригиналом
- Более высокая сложность конфигурации (больше настроек, больше возможностей — больше того, что может пойти не так).
- Потенциально выше требования к ресурсам, особенно при включённых WAF/IPS, HTTP/3 и других дополнительных службах.
- Совместимость: если есть плугины/настройки, ориентированные на оригинальный NPM, могут быть несовместимости.
- Более частые изменения: может потребоваться чаще обновлять, следить за изменениями в форке.
Полный список изменений на Английском
- Supports HTTP/3 (QUIC) protocol, requires you to expose https with udp
- Supports CrowdSec IPS. Please see here to enable it
- Goaccess included, see compose.yaml to enable, runs by default on
https://<ip>:91(nginx config from here) - Supports ModSecurity (which tends to overblocking, so not recommended), with coreruleset as an option. You can configure ModSecurity/coreruleset by editing the files in the
/opt/npmplus/modsecurityfolder (no support from me, you need to write the rules yourself - for CoreRuleSet I can try to help you)- By default NPMplus UI does not work when you proxy NPMplus through NPMplus and you have CoreRuleSet enabled, see below
- ModSecurity by default blocks uploads of big files, you need to edit its config to fix this, but it can use a lot of resources to scan big files by ModSecurity
- ModSecurity overblocking (403 Error) when using CoreRuleSet? Please see here and edit the
/opt/npmplus/modsecurity/crs-setup.conffile- Try to whitelist the Content-Type you are sending (for example,
application/activity+jsonfor Mastodon andapplication/dns-messagefor DoH) - Try to whitelist the HTTP request method you are using (for example,
PUTis blocked by default, which also blocks NPMplus UI)
- Try to whitelist the Content-Type you are sending (for example,
- CoreRuleSet plugins are supported, you can find a guide in this readme
- Option to load the openappsec attachment module, see compose.yaml for details
- Darkmode button in the footer for comfortable viewing (CSS done by @theraw)
- Load balancing possible (requires custom configuration), see below
- Only enables TLSv1.2 and TLSv1.3 protocols, also ML-KEM support
- Faster creation of TLS certificates is achieved by eliminating unnecessary nginx reloads and configuration creations
- Supports OCSP Stapling/Must-Staple for enhanced security (manual certs not supported, see compose.yaml for details)
- Resolved dnspod plugin issue
- To migrate manually, delete all dnspod certs and recreate them OR change the credentials file as per the template given here
- Smaller docker image based on alpine linux
- Admin backend interface runs with https
- Default page also runs with https
- Option to change default TLS cert
- Option to use fancyindex if used as webserver
- Exposes INTERNAL backend api only to localhost
- Basic security headers are added if you enable HSTS (HSTS has always subdomains and preload enabled)
- access.log is disabled by default, unified and moved to
/opt/npmplus/nginx/access.log - Error Log written to console
Serverresponse header hidden- PHP optional, with option to add extensions; available packages can added using envs in the compose file, recommended to be used together with PUID/PGID
- Allows different acme servers using env
- Supports Brotli compression
- punycode domain support
- HTTP/2 always enabled with fixed upload
- Allows infinite upload size (may be limited if you use ModSecurity)
- Automatic database vacuum (only sqlite)
- Automatic cleaning of old invalid certbot certs (set CLEAN to true)
- Password reset (only sqlite) using
docker exec -it npmplus password-reset.js USER_EMAIL PASSWORD - Multi language support, if you want to add a language, see this commit as an example: add de-lang · ZoeyVid/NPMplus@a026b42 · GitHub (implementation based on @lateautumn233 fork)
- See the compose file for all available options
- Many env options optimized for network_mode host (ports/ip bindings)
- Allow port range in streams and $server_port as a valid input
- Improved regex checks for inputs
- Merge of upstreams OIDC PR
- DNS secrets are not mounted anymore, since they are saved in the db and rewritten on every container start, so they don’t need to be mounted
- Fixed smaller issues/bugs
- Other small changes/improvements
