localhost отправил неверный ответ.ERR_INVALID_HTTP_RESPONSE - PullRequest
0 голосов
/ 04 июня 2018

Я работаю над включением http2 в докере nginx.Я получаю эту ошибку при звонке на localhost.Мой файл конфигурации nginx, как показано ниже.

server {
listen       2020 http2;
server_name  localhost;

#charset koi8-r;
#access_log  /var/log/nginx/host.access.log  main;

location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
}

#error_page  404              /404.html;

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

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
#    proxy_pass   http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
#    root           html;
#    fastcgi_pass   127.0.0.1:9000;
#    fastcgi_index  index.php;
#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
#    include        fastcgi_params;
#}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
#    deny  all;
#}
}

Порт прослушивания Http2 - это 2020. Я выставил его на 2020, когда контейнер запущен.

docker run -d --name nginx -p 80:80 -p 2020:2020 -v 
/home/pubudu/work/nginx/nginx-tms/config/conf.d:/etc/nginx/conf.d/:ro  
nginx:latest

Это ссылка на учебник: Как настроить Nginx с поддержкой HTTP / 2 в Ubuntu 16.04

Нужно ли использовать порт 443?это обязательно?(Я не использовал ssl для этого)

Если я сверну этот URL, отклик, как показано ниже.

Предупреждение: двоичный вывод может испортить ваш терминал.Используйте «--output -», чтобы сказать Warning: curl для вывода его на ваш терминал в любом случае, или рассмотрите «--output Warning:» для сохранения в файл.

Я знаю, что страницапередается в виде двоичного файла в http2.Я хочу получить индексную страницу nginx в ответ.

Ваша помощь будет по достоинству оценена.

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Я нашел решение для этого.Для достижения http2 необходимо включить SSL в nginx.Я попробовал это, и это работает хорошо.Я нашел ответ по этой ссылке.

Как настроить Nginx с поддержкой HTTP / 2 в Ubuntu 16.04

Теперь мой конфигурационный файл, как показано ниже.

server {
listen       443 ssl http2;
server_name  localhost;

ssl_certificate /etc/nginx/ssl/nginx-selfsigned.crt;
ssl_certificate_key /etc/nginx/ssl/nginx-selfsigned.key;


#charset koi8-r;
#access_log  /var/log/nginx/host.access.log  main;

location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
}

#error_page  404              /404.html;

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

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
#    proxy_pass   http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
#    root           html;
#    fastcgi_pass   127.0.0.1:9000;
#    fastcgi_index  index.php;
#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
#    include        fastcgi_params;
#}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
#    deny  all;
#}
}
0 голосов
/ 04 июня 2018

Curl не поддерживает HTTP / 2 через HTTP (h2c) напрямую и настаивает на методе обновления, как подробно в этом сообщении :

через http:// URL Если для CURLOPT_HTTP_VERSION задано значение CURL_HTTP_VERSION_2_0, libcurl включит заголовок обновления в первоначальный запрос к хосту, чтобы разрешить обновление до HTTP / 2.Возможно, позже мы сможем ввести опцию, которая приведет к сбою libcurl, если обновление невозможно.Возможно, мы представляем опцию, которая заставляет libcurl использовать HTTP / 2 сразу по http://

Nginx не поддерживает HTTP / 2 и HTTP / 1 по одному и тому же текстовому каналу (см. этот запрос на расширение ), следовательно, он не работает с curl.

Вы можете попробовать использовать nghttp2 или h2c вместо curl, но не уверены, что это работает, хотя не уверены, что ониделать.Реальность такова, что HTTP / 2 лучше всего согласовывать по HTTPS, и многие инструменты (включая все браузеры) используют только HTTP / 2 по HTTPS из-за этого .

...