nginx неправильно отвечает на HTTP / 1.1

У меня проблема, когда некоторые клиенты, которые сначала пытаются подключиться через HTTP / 1.1, неправильно перенаправляются на HTTPS

curl -v http://indentationerror.com/
*   Trying 217.45.175.173:80...
* Connected to indentationerror.com (217.45.175.173) port 80 (#0)
> GET / HTTP/1.1
> Host: indentationerror.com
> User-Agent: curl/7.73.0
> Accept: */*
> 
* Received HTTP/0.9 when not allowed

* Closing connection 0
curl: (1) Received HTTP/0.9 when not allowed

Однако с помощью команды:

curl -v http://indentationerror.com/ --http2-prior-knowledge

nginx возвращает перенаправление 301 как предназначен для HTTP / 2

Моя конфигурация в настоящее время:

server {
        server_name www.indentationerror.com;
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        ssl    on;
        root "/http/indentationerror.com/www";
        include /etc/nginx/genericHandlers/indentationerror.com;
}

server {
        server_name indentationerror.com;
        listen 443 ssl http2 default_server;
        listen [::]:443 ssl http2 default_server;
        ssl    on;
        root "/http/indentationerror.com/www";
        include /etc/nginx/genericHandlers/indentationerror.com;
}

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name $host;
        return 301 https://$host$request_uri;   
}

Неисправная часть (добавлена, когда я обнаружил проблему):

server {
    server_name api.indentationerror.com;
    listen 80 http2;
    listen [::]:80 http2;
    root "/http/indentationerror.com/api";

    include /etc/nginx/genericHandlers/indentationerror.com;
}

server {
    server_name api.indentationerror.com;
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    ssl    on;
    root "/http/indentationerror.com/api";
    include /etc/nginx/genericHandlers/indentationerror.com;

}
0
задан 8 November 2020 в 17:42
1 ответ

Я случайно обнаружил директиву http2 в одной из директив сервера 80 порта (вы можете увидеть ее на сервере API). По какой-то причине использование этого на одном блоке сервера влияет на другие. Спасибо Михаилу за подсказку. Для всех, кто столкнулся с этой проблемой, удаление «http2» со всех ваших серверов с портом 80 решит проблему.

6
ответ дан 8 November 2020 в 14:35

Теги

Похожие вопросы