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

nginx gzip не работал на процессорах php js и css

У меня есть менеджер активов для процессов css и js через php. Я использую nginx и php5-fpm для загрузки своего приложения. но вернул файлы css и js, а не gziped.

например мой URL http://mysite.com/phpcssprocessor/mycssfile.css этот файл создается через php.

это моя конфигурация виртуального хоста:

# /
    location / {
        # gzip
        gzip on;
        gzip_static on;
        gzip_proxied any;
        gzip_types application/javascript application/json application/x-javascript application/xml text/css text/javascript text/plain text/x-component text/xml;

        # disable etag
        if_modified_since off;
        add_header 'Last-Modified' '';

        # mvc rewrite
        try_files $uri $uri/ /index.php?$uri&$args;
    }
  1. Ваш php-скрипт устанавливает Content-Type: Заголовок ответа HTTP правильно? Соответствует ли это вашему gzip_types параметры?

  2. Ваш клиент устанавливает Accept-Encoding: gzip Заголовок HTTP-запроса правильно?

  3. Имеет ли ваш соответствующий http, server или location откуда php обрабатывается, включить директивы для сжатия gzip? Когда внутреннее перенаправление происходит через try_files из / location к php location, указав любой тип сжатия gzip в / location было бы noop - вы должны либо указать его глобально, либо в последнем location который завершает запрос (промежуточные местоположения не влияют на окончательную обработку).

Без всех трех вышеперечисленных случаев сжатия gzip не будет.

В вашем конкретном случае кажется, что try_files перенаправить на другой location причиняет вам горе, поскольку я вижу, что вы, должно быть, указываете материал gzip в / location только, что, вероятно, нет. Переместите директивы gzip за пределы / location. Точно так же вы можете переместить другие варианты подальше от try_files / location также.

Я просто столкнулся с той же проблемой и, наконец, решил ее.

Проблема заключалась в том, что файл style.css.php имел вверху:

header("Content-type: text/css; charset: UTF-8");

И это помешало nginx заархивировать файл. Очевидно, "gzip_type text / css" не подхватит это из-за части "charset".

Я удалил "; charset: UTF-8" из аргумента header (), и nginx начал сжатие вывода.

header("Content-type: text/css");

Позже я добавил

charset  UTF-8;

в блоке расположения nginx для этого процессора CSS, поэтому я получаю правильные заголовки и gzip работает.

Надеюсь, это поможет и кому-то другому.