{"id":28586991,"url":"https://github.com/luckyfoxdesign/docker-nginx-http","last_synced_at":"2026-05-04T21:34:51.122Z","repository":{"id":293529979,"uuid":"984107752","full_name":"luckyfoxdesign/docker-nginx-http","owner":"luckyfoxdesign","description":"A production-ready secure HTTP Nginx setup with Docker featuring ModSecurity WAF, rate limiting, security headers, and token-based authentication. Designed for secure API gateway deployments with minimal configuration required.","archived":false,"fork":false,"pushed_at":"2025-05-15T19:20:49.000Z","size":7,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-15T20:24:16.635Z","etag":null,"topics":["api-gateway","containerization","devops","docker","docker-compose","infrastructure-as-code","modsecurity","nginx","rate-limiting","reverse-proxy","security","waf","web-security"],"latest_commit_sha":null,"homepage":"","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/luckyfoxdesign.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-15T12:08:48.000Z","updated_at":"2025-05-15T19:19:50.000Z","dependencies_parsed_at":"2025-05-15T20:35:53.754Z","dependency_job_id":null,"html_url":"https://github.com/luckyfoxdesign/docker-nginx-http","commit_stats":null,"previous_names":["luckyfoxdesign/docker-nginx-http"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luckyfoxdesign%2Fdocker-nginx-http","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luckyfoxdesign%2Fdocker-nginx-http/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luckyfoxdesign%2Fdocker-nginx-http/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luckyfoxdesign%2Fdocker-nginx-http/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/luckyfoxdesign","download_url":"https://codeload.github.com/luckyfoxdesign/docker-nginx-http/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luckyfoxdesign%2Fdocker-nginx-http/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259219374,"owners_count":22823569,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-gateway","containerization","devops","docker","docker-compose","infrastructure-as-code","modsecurity","nginx","rate-limiting","reverse-proxy","security","waf","web-security"],"created_at":"2025-06-11T07:01:11.356Z","updated_at":"2026-05-04T21:34:51.116Z","avatar_url":"https://github.com/luckyfoxdesign.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nginx Docker — HTTP / HTTPS\n\nГотовый nginx в Docker с защитой: rate limiting, security headers (включая HSTS), токен-авторизация.\n\nПоддерживает два режима:\n- **HTTP** — для локальной разработки или сервера без SSL\n- **HTTPS** — для продакшена, сертификаты Let's Encrypt через Certbot\n\n---\n\n## Что нужно перед началом\n\n- [Docker Desktop](https://www.docker.com/products/docker-desktop/) (включает Docker Compose)\n- Git\n\nПроверь что всё установлено:\n```bash\ndocker --version\ndocker compose version\n```\n\n---\n\n## Структура проекта\n\n```\nconf/\n  http-nginx.conf       # Конфиг nginx для HTTP-режима\n  https-nginx.conf      # Конфиг nginx для HTTPS-режима\n  snippets/\n    security-headers.conf  # Заголовки безопасности\n.env                    # Твои настройки (не коммитить!)\n.env.example            # Шаблон настроек\ncompose.yml             # Docker Compose\nDockerfile              # Образ nginx Alpine\nentrypoint.sh           # Подстановка переменных при старте\ninit-ssl.sh             # Скрипт первого запуска с HTTPS\n```\n\n---\n\n## Режим 1 — HTTP (локально или сервер без SSL)\n\n### Шаг 1 — Клонируй репозиторий\n\n```bash\ngit clone git@github.com:luckyfoxdesign/docker-nginx-http.git\ncd docker-nginx-http\n```\n\n### Шаг 2 — Создай файл настроек\n\n```bash\ncp .env.example .env\n```\n\nОткрой `.env` и заполни:\n\n```env\nNGINX_CONF=http-nginx.conf       # HTTP-режим\nDOMAINS=example.com              # Твой домен (или localhost)\nPRIMARY_DOMAIN=example.com       # Главный домен (тот же)\nLETSENCRYPT_EMAIL=               # Можно оставить пустым\nAUTH_TOKEN=Bearer замени-это     # Секретный токен для API\n```\n\n\u003e Для генерации сильного токена: `openssl rand -hex 32`\n\n### Шаг 3 — Запусти\n\n```bash\ndocker compose up -d\n```\n\n### Шаг 4 — Проверь что работает\n\n```bash\ncurl http://localhost/healthz\n# Должно вернуть: OK\n```\n\n---\n\n## Режим 2 — HTTPS (продакшен на реальном сервере)\n\n\u003e Домен должен уже указывать на IP сервера, иначе Let's Encrypt не выдаст сертификат.\n\n### Шаг 1 — Клонируй репозиторий\n\n```bash\ngit clone git@github.com:luckyfoxdesign/docker-nginx-http.git\ncd docker-nginx-http\n```\n\n### Шаг 2 — Создай файл настроек\n\n```bash\ncp .env.example .env\n```\n\nОткрой `.env` и заполни:\n\n```env\nNGINX_CONF=http-nginx.conf           # Скрипт сам переключит на https\nDOMAINS=example.com www.example.com  # Все домены через пробел\nPRIMARY_DOMAIN=example.com           # Главный домен (первый из списка)\nLETSENCRYPT_EMAIL=you@email.com      # Email для уведомлений Let's Encrypt\nAUTH_TOKEN=Bearer замени-это         # Секретный токен для API\n```\n\n\u003e Для генерации сильного токена: `openssl rand -hex 32`\n\n### Шаг 3 — Запусти скрипт инициализации\n\n```bash\n./init-ssl.sh\n```\n\nСкрипт сделает всё сам:\n1. Поднимет nginx на HTTP для проверки домена\n2. Получит SSL-сертификат от Let's Encrypt\n3. Переключит nginx на HTTPS\n4. Запустит автообновление сертификата\n\n### Шаг 4 — Проверь что работает\n\n```bash\ncurl https://example.com/healthz\n# Должно вернуть: OK\n```\n\n---\n\n## Подключить свой контейнер\n\nДопустим, у тебя есть контейнер с приложением на порту 8080.\n\n### Шаг 1 — Добавь его в `compose.yml`\n\nРаскомментируй и отредактируй блок в конце файла:\n\n```yaml\nmy-app:\n  image: my-app:latest\n  container_name: my-app-c\n  restart: always\n  networks:\n    - internal_net   # Только внутренняя сеть — снаружи недоступен\n  # НЕ добавляй ports: — доступ только через nginx\n```\n\n### Шаг 2 — Добавь маршрут в nginx конфиг\n\nОткрой `conf/http-nginx.conf` (или `https-nginx.conf`) и добавь `location` внутрь нужного `server {}`:\n\n```nginx\nlocation /api/ {\n    proxy_pass http://my-app-c:8080;\n    proxy_set_header Host $host;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_set_header X-Forwarded-Proto $scheme;\n}\n```\n\n\u003e Имя `my-app-c` — это `container_name` из compose.yml. Docker использует его как DNS внутри сети.\n\n### Шаг 3 — Перезапусти\n\n```bash\n# HTTP-режим\ndocker compose up -d\n\n# HTTPS-режим\ndocker compose --profile https up -d\n```\n\n---\n\n## Полезные команды\n\n```bash\n# Посмотреть статус контейнеров\ndocker compose ps\n\n# Посмотреть логи nginx\ndocker compose logs -f nginx-s\n\n# Перезагрузить nginx без остановки (после изменения конфига)\ndocker exec nginx-c nginx -s reload\n\n# Принудительно обновить сертификат\ndocker compose --profile https run --rm certbot renew --force-renewal\n\n# Остановить всё\ndocker compose down\n```\n\n---\n\n## Настройка токен-авторизации для API\n\nЭндпоинты `/api/*` защищены Bearer-токеном. Сгенерируй сильный токен:\n\n```bash\nopenssl rand -hex 32\n```\n\nВставь результат в `.env`:\n\n```env\nAUTH_TOKEN=Bearer \u003cсгенерированный-токен\u003e\n```\n\nЧтобы обратиться к API:\n\n```bash\ncurl -H \"Authorization: Bearer \u003cтвой-токен\u003e\" https://example.com/api/signal\n```\n\n---\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluckyfoxdesign%2Fdocker-nginx-http","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fluckyfoxdesign%2Fdocker-nginx-http","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluckyfoxdesign%2Fdocker-nginx-http/lists"}