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

Nginx не может отображать много статических изображений при использовании HTTP / 2

На одном из моих сайтов WordPress есть много статических изображений (думаю, не менее 20 на страницу), и после того, как я включу HTTP / 2, изображения в нижней части начинают отображаться как сломанные (зачеркнутые, как на изображениях с мертвыми ссылками). В файле error.log нет ничего плохого, но в консоли Chrome 53 сообщает следующее:

Failed to load resource: net::ERR_SPDY_PROTOCOL_ERROR

Я пробовал возиться с client_max_body_size но это не повезло.

изменить: это мой nginx.conf:

load_module /usr/local/libexec/nginx/ngx_mail_module.so;
load_module /usr/local/libexec/nginx/ngx_stream_module.so;
user  www;
worker_processes 4;
error_log  /var/log/nginx/error.log  info;

events {
        worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    client_body_buffer_size 10K;
    client_header_buffer_size 1k;
    client_max_body_size 0;
    large_client_header_buffers 2 1k;
    client_body_timeout 12;
    send_timeout 10;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    gzip off;
    charset UTF-8;

    server {
        listen       80;
        server_name manuth.life www.manuth.life;
        server_tokens off;
        return 301 https://$server_name$request_uri; #redirects to HTTPS
        root   /usr/local/www/nginx/manuth.life;
        index index.php index.html index.htm;
        access_log /var/log/nginx/manuth.life.access.log;
        error_log /var/log/nginx/manuth.life.error.log;

        error_page      500 502 503 504  /50x.html;

        # redirect server error pages to the static page /50x.html
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }
    }

    server {
        listen       443 ssl http2;
        server_name  manuth.life www.manuth.life;
        server_tokens off;
        root   /usr/local/www/nginx/manuth.life;
        index index.php index.html index.htm;
        access_log /var/log/nginx/manuth.life.access.log;
        error_log /var/log/nginx/manuth.life.error.log;

        # redirect server error pages to the static page /50x.html
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }

        # strict SSL settings
        ssl_certificate /usr/local/etc/letsencrypt/live/manuth.life/fullchain.pem;
        ssl_certificate_key /usr/local/etc/letsencrypt/live/manuth.life/privkey.pem;

        ssl_session_timeout 5m;
        ssl_protocols TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
        ssl_ecdh_curve secp384r1; #
        ssl_session_cache builtin:1000 shared:SSL:10m;
        ssl_session_tickets off;
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_dhparam /usr/local/etc/ssl/dhparam.pem;
        resolver 8.8.8.8 8.8.4.4 valid=300s;
        resolver_timeout 10s;
        add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
        add_header X-Frame-Options DENY;
        add_header X-Content-Type-Options nosniff;

        location / {
            try_files $uri $uri/ /index.php?q=$uri&$args;
        }

        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            include fastcgi_params;
        }

    }

}

Похоже, это проблема Chrome 53. Я использую Chrome 54 и больше не вижу этой проблемы. На самом деле скорость просто летает! (то есть в локальной сети)

Вы получаете ошибки SPDY, которые являются предшественником HTTP2. HTTP2 по умолчанию не встроен в Nginx, вам придется собрать Nginx самостоятельно (ссылка на документацию, которая говорит об этом, ссылка на руководство по сборке). Создать Nginx довольно просто. Некоторые дистрибутивы могут встраивать http / 2 в.

После того, как вы получили Nginx со встроенной поддержкой HTTP / 2, как люди сохранили, вам нужно добавить директиву http2 в свою команду listen.

listen 443 ssl http2;

Если это не сработает, вам необходимо опубликовать полную и точную конфигурацию, а также ссылку на веб-сайт, который не работает должным образом. Мы не можем диагностировать то, чего не видим.