{"id":44891452,"url":"https://github.com/pavloniym/nginx-cache","last_synced_at":"2026-02-23T00:01:52.067Z","repository":{"id":338859490,"uuid":"1159434656","full_name":"pavloniym/nginx-cache","owner":"pavloniym","description":"Laravel-пакет для автоматической генерации конфигурационных файлов кеширования Nginx на основе атрибутов в контроллерах.","archived":false,"fork":false,"pushed_at":"2026-02-17T17:33:56.000Z","size":331,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-18T21:25:24.351Z","etag":null,"topics":["cache","laravel","nginx","nginx-cache"],"latest_commit_sha":null,"homepage":"","language":"PHP","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/pavloniym.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-16T18:15:09.000Z","updated_at":"2026-02-17T17:33:37.000Z","dependencies_parsed_at":"2026-02-18T20:00:45.322Z","dependency_job_id":null,"html_url":"https://github.com/pavloniym/nginx-cache","commit_stats":null,"previous_names":["pavloniym/nginx-cache"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/pavloniym/nginx-cache","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavloniym%2Fnginx-cache","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavloniym%2Fnginx-cache/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavloniym%2Fnginx-cache/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavloniym%2Fnginx-cache/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pavloniym","download_url":"https://codeload.github.com/pavloniym/nginx-cache/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavloniym%2Fnginx-cache/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29632708,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-19T18:02:07.722Z","status":"ssl_error","status_checked_at":"2026-02-19T18:01:46.144Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["cache","laravel","nginx","nginx-cache"],"created_at":"2026-02-17T19:08:43.757Z","updated_at":"2026-02-19T21:02:35.894Z","avatar_url":"https://github.com/pavloniym.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Laravel Nginx Cache\n\nLaravel-пакет для автоматической генерации конфигурационных файлов кеширования Nginx на основе атрибутов в контроллерах.\n\n## Оглавление\n\n1. [Зачем это нужно](#зачем-это-нужно)\n2. [Установка](#установка)\n3. [Настройка Nginx](#настройка-nginx)\n4. [Использование](#использование)\n5. [Типы кеша](#типы-кеша)\n6. [Команды](#команды)\n7. [Тестирование](#тестирование)\n8. [Кастомные типы кеша](#кастомные-типы-кеша)\n9. [Интеграция в CI/CD](#интеграция-в-cicd)\n\n---\n\n## Зачем это нужно\n\nВместо ручного прописывания `location` блоков для кеширования API-ендпоинтов в конфигах Nginx, пакет сканирует контроллеры и генерирует конфиг автоматически. Вы используете атрибут `#[NginxCache]` на методе контроллера, а пакет берет на себя формирование корректных правил для Nginx.\n\n## Установка\n\n```bash\ncomposer require pavloniym/nginx-cache\n\n```\n\nОпубликуйте конфигурационный файл:\n\n```bash\nphp artisan vendor:publish --tag=config\n\n```\n\nВ файле `config/nginx-cache.php` укажите путь, куда PHP должен записывать файл для Nginx:\n\n```php\nreturn [\n    'path' =\u003e '/etc/nginx/conf.d/_cache',      // Директория для конфигов\n    'filename' =\u003e 'locations.conf',             // Имя выходного файла\n];\n\n```\n\n---\n\n## Настройка Nginx\n\nДля работы кеширования необходимо подготовить инфраструктуру на стороне Nginx.\n\n### Глобальные настройки (`nginx.conf`)\n\nДобавьте настройки зоны кеша и GeoIP в блок `http`:\n\n```nginx\nhttp {\n    \n    # ...\n    \n    # Add GeoIP2 (for SimpleWithCountryIsoCache)\n    geoip2 /var/www/html/storage/app/geoip/geoip.mmdb {\n        auto_reload 5m;\n        $geoip2_metadata_country_build metadata build_epoch;\n        $geoip2_data_country_code default=NL source=$http_x_forwarded_for country iso_code;\n        $geoip2_data_country_name country names en;\n    }\n\n    # ...\n\n    # Cache options\n    proxy_cache_path /var/cache/nginx levels=2 keys_zone=httpCache:1024M inactive=12h max_size=4096M;\n    proxy_cache_lock on;\n    proxy_cache_methods GET HEAD POST;\n    proxy_cache_min_uses 1;\n    proxy_ignore_headers Expires Cache-Control;\n    proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504;\n    proxy_cache_revalidate on;\n    proxy_cache_background_update on;\n}\n\n```\n\n### Настройка виртуального хоста\n\nПодключите сгенерированный файл внутри блока `server`:\n\n```nginx\nserver {\n    # ...\n    \n    set $backend http://127.0.0.1:8080;\n    proxy_cache httpCache;\n\n    # Add cache locations config\n    include /etc/nginx/conf.d/_cache/locations.conf;\n\n    location / {\n        try_files $uri $uri/ @backend;\n    }\n\n    location @backend {\n        internal;\n        proxy_pass $backend$suffix;\n    }\n    \n    # ...\n}\n```\n\n---\n\n## Использование\n\nПросто добавьте атрибут к методу вашего контроллера:\n\n```php\nuse Pavloniym\\NginxCache\\Attributes\\NginxCache;\nuse Pavloniym\\NginxCache\\Types\\SimpleCache;\n\nclass ProductController extends Controller\n{\n    #[NginxCache(type: SimpleCache::class, duration: 300)]\n    public function index()\n    {\n        return Product::all();\n    }\n}\n\n```\n\n---\n\n## Типы кеша\n\n* **SimpleCache**: Базовый кеш по URI и телу запроса.\n* **SimpleWithCountryIsoCache**: Кеш, разделенный по странам (требует GeoIP2).\n* **SimpleWithIpCache**: Персонализированный кеш по IP адресу.\n* **UserCache**: Кеш для авторизованных пользователей (учитывает сессии и Bearer токены).\n* **WithoutCache**: Явное отключение кеширования для метода.\n\n---\n\n## Команды\n\n**Просмотр списка всех кешируемых роутов:**\n\n```bash\nphp artisan nginx-cache:list\n\n```\n\n**Генерация файла конфигурации:**\n\n```bash\nphp artisan nginx-cache:build\n\n```\n\n---\n\n## Тестирование\n\nПакет покрыт автотестами на `PHPUnit` + `Orchestra Testbench`.\n\nУстановка dev-зависимостей:\n\n```bash\ncomposer install\n```\n\nЗапуск всех тестов:\n\n```bash\ncomposer test\n```\n\n---\n\n## Кастомные типы кеша\n\nВы можете создавать свои правила, наследуя класс `NginxCacheType`:\n\n```php\nnamespace App\\NginxCache;\n\nuse Pavloniym\\NginxCache\\Contracts\\Types\\NginxCacheType;\n\nclass HeavyCache extends NginxCacheType\n{\n    public string $key = '$request_uri';\n    public string $duration = '3600s';\n    public string $responses = '200';\n}\n\n```\n\n---\n\n## Интеграция в CI/CD\n\nДля автоматизации обновления правил добавьте выполнение команды в процесс деплоя:\n\n```bash\nphp artisan nginx-cache:build\nnginx -s reload\n\n```\n\n## Требования\n\n* PHP 8.1+\n* Laravel 9.x / 10.x / 11.x / 12.x\n* Nginx с модулем `ngx_http_geoip2_module` (для соответствующих типов кеша)\n\n## License\n\nMIT\n\n---\n\n**Важно:** Пакет только генерирует конфиги. Настройку базовых параметров Nginx (proxy_cache_path, upstream и т.д.) делай вручную в основном конфиге.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpavloniym%2Fnginx-cache","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpavloniym%2Fnginx-cache","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpavloniym%2Fnginx-cache/lists"}