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

случайные ошибки SSL на nginx 1.13.8 с сертификатом Let's encrypt

Я использую самокомпилированный nginx / 1.13.8 с дополнительными модулями brotli и headers-more-nginx-module, но моя ошибка возникает независимо от активации brotli или нет. На сервере работает Debian 9. В большинстве случаев все работает, но иногда один или несколько запросов (например, к ресурсам css / js) приводят к следующим ошибкам. Все запросы обслуживаются через http / 2:

хром: ERR_SPDY_PROTOCOL_ERROR

Fire Fox: загрузка не удалась

сафари: kCFErrorDomainCFNetwork-Fehler 303

край: (та же ошибка, сейчас не могу протестировать; обновлю позже)

Моя конфигурация SSL nginx (кажется, все в порядке (A +) согласно ssllabs):

ssl_certificate      "/etc/letsencrypt/live/***/fullchain.pem";
ssl_certificate_key  "/etc/letsencrypt/live/***/privkey.pem";
ssl_protocols TLSv1.2;
ssl_dhparam /etc/ssl/dhparam.pem;

ssl_session_cache    shared:SSL:10m;
    ssl_session_timeout  10m;

    #raymii.org/s/tutorials/Strong_SSL_Secruity_On_nginx.html
ssl_ciphers  'EECDH-AESGCM:EDH+ESGCM:AES256+EECDH:AES256+EDH';
    ssl_prefer_server_ciphers  on;

Поскольку я новичок в серверах и управлении серверами, я понятия не имею, как я могу отладить эту проблему. Все, что я знаю, это то, что ошибка, скорее всего, произошла не с nginx из репозитория debian, но я не уверен.

Я предполагаю, что это как-то связано с шифрами, потому что, поскольку я изменил их с их последнего значения, ошибка возникает реже. Server-Log кажется прекрасным: например:

**MY-IP** - - [23/Jan/2018:10:33:06 +0100] TLSv1.2/ECDHE-RSA-AES256-GCM-SHA384 "GET /portal HTTP/2.0" 200 383 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
**MY-IP** - - [23/Jan/2018:10:33:06 +0100] TLSv1.2/ECDHE-RSA-AES256-GCM-SHA384 "GET /styles.a01bb74b47d88d296c44.bundle.css HTTP/2.0" 200 24238 "***" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
**MY-IP** - - [23/Jan/2018:10:33:06 +0100] TLSv1.2/ECDHE-RSA-AES256-GCM-SHA384 "GET /inline.bfe190f13378e2257d4e.bundle.js HTTP/2.0" 200 731 "***" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
**MY-IP** - - [23/Jan/2018:10:33:06 +0100] TLSv1.2/ECDHE-RSA-AES256-GCM-SHA384 "GET /polyfills.74b809925dee18bd9f89.bundle.js HTTP/2.0" 200 19182 "***" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
**MY-IP** - - [23/Jan/2018:10:33:06 +0100] TLSv1.2/ECDHE-RSA-AES256-GCM-SHA384 "GET /scripts.1cd17589767e3c3fbdfe.bundle.js HTTP/2.0" 200 40807 "***" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"

**MY-IP** - - [23/Jan/2018:10:33:06 +0100] TLSv1.2/ECDHE-RSA-AES256-GCM-SHA384 "GET /main.c0a6975cd3e3b14f7b2a.bundle.js HTTP/2.0" 200 0 "***" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
--> The one that failed in this case! - looks fine?

Кстати это происходит на разных устройствах с разными операционными системами.

В зависимости от размера проксируемого файла nginx может буферизоваться на диск.

Я предполагаю, что файлы с ошибками больше, чем удачные. Так что только в этих случаях он пытается его буферизовать и терпит неудачу.

Вы получаете не ошибки SSL, а ошибки протокола http / spdy. Скорее всего, потому, что размер, установленный в заголовке Content-length, не соответствует передаваемой сумме. Надеюсь, это ответ на ваш вопрос, почему это не удается.

Думаю, я нашел решение (но я не уверен на 100%!). Как говорится в журнале ошибок (см. Мой комментарий под вопросом), в /var/lib/nginx/proxy/**. все каталоги и файлы там принадлежали "none", пока nginx работал как "nginx". Я сменил владельца nginx-процесса на «никто», теперь он работает.

В любом случае, как он мог работать в 90% случаев и в 10% случаев падал? На мой взгляд, в разрешении отказано должно быть либо постоянно, либо никогда ... но иногда?