Назад | Перейти на главную страницу

Как мне ОСУШИТЬ эту конфигурацию Nginx?

Я на Nginx 0.8.54 стараясь добиться следующего как можно СУХОГО:


Текущий файл конфигурации:

server {
    root /srv/web/example.com;
    server_name example.com;

    location @backend { proxy_pass http://localhost:8060; }

    location / {
        if ($cookie_no_cache = true) { proxy_pass http://localhost:8060; }
        if ($request_method != GET) { proxy_pass http://localhost:8060; }
        try_files /static/$uri /cache/$uri /cache/$uri.html @backend;
    }

    location = / {
        if ($cookie_no_cache = true) { proxy_pass http://localhost:8060; }
        if ($request_method != GET) { proxy_pass http://localhost:8060; }
        try_files /cache/index.html @backend;
    }
}
http {
  map $cookie_no_cache $cacheZone {
    default "";
    true    X;
  }

  server {
    root /srv/web/example.com;
    server_name example.com;

    error_page 405 = @backend;

    location / {
      try_files /cache$cacheZone/$uri.html /static$cacheZone/$uri
                /cache$cacheZone/$uri @backend;
    }

    location @backend {
      proxy_pass http://localhost:8060;
    }
  }
}

Объяснение.

  1. По поводу проверки cookie "no_cache". Заменяем на Nginx map. Переменная $cacheZone зависит от стоимости $cookie_no_cache. По умолчанию он пуст, но если есть файл cookie "no_cache = true", мы устанавливаем $cacheZone на любое значение, чтобы изменить путь поиска статического файла в try_files - надеюсь у тебя нет /cacheX и /staticX папки в корне вашего сервера (если да, выберите другое значение для $cacheZone)
  2. Nginx не может применять HTTP-методы PUT или POST в статические файлы (это бессмысленно), поэтому в этом случае он выдает ошибку HTTP 405 «Не разрешено». Мы перехватываем это error_page и передайте запрос @backend расположение.

Альтернативный подход

В противном случае используйте proxy_cache:

http {
  proxy_cache_path example:1m;

  server {
    root  /srv/web/example.com;
    server_name example.com;

    location / {
      proxy_cache example;
      proxy_cache_bypass $cookie_no_cache;
      proxy_cache_valid 200 10s;
      proxy_pass http://localhost:8060;
    }
  }
}