[nginx-quic] HTTP/3(QUIC): I can't test HTTP/3 with nginx-quic repo

Andrey Khramov andrey at apporto.com
Tue Feb 2 14:30:04 UTC 2021


Hello, there

I tried to test the HTTP/3 (QUIC) with nginx-quic in several days.
But I couldn't test HTTP/3 (QUIC).

I built the quic branch of nginx-quic repo according to README of that repo.
The configuration options follows as below:
$ ./auto/configure --prefix=/etc/nginx \
                 --sbin-path=/usr/sbin/nginx \
                 --conf-path=/etc/nginx/nginx.conf \
                 --pid-path=/var/run/nginx.pid \
                 --error-log-path=/var/log/nginx/error.log \
                 --http-log-path=/var/log/nginx/access.log \
                 --with-debug \
                 --with-http_v2_module --with-http_ssl_module \
                 --with-http_v3_module --with-http_quic_module \
                 --with-stream_quic_module \
                 --with-cc-opt="-I../boringssl/include" \
                 --with-ld-opt="-L../boringssl/build/ssl \
                 -L../boringssl/build/crypto"
$ make

To install the nginx-quic, I installed the nginx 1.19.6 package on Ubuntu
18.04 and replaced the nginx binary with the nginx-quic:
$ sudo cp objs/nginx /usr/sbin/

I configured that the nginx-quic works as load-balancer of HTTPS:
HTTPS -> nginx-quic (7443 port) -> Apache2 (80 port) -> Apache Tomcat (8080
port)

The configuration file (nginx.conf) follows as below:

user  nginx;
worker_processes  auto;

events {
    worker_connections  1024;
}

http {
    log_format quic '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent" "$quic" "$http3"';

    access_log /var/log/nginx/access.log quic;
    error_log  /var/log/nginx/error.log debug;

    server {

        listen 7443 http3 reuseport; # Enable HTTP/3.
        listen 7443 ssl; # Enable HTTP/1.1 (optional).

        ssl_certificate
 /home/ubuntu/andrey/http3/example-fullchain.pem;
        ssl_certificate_key  /etc/ssl/private/example.key;
        ssl_protocols        TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

        location / {
            add_header alt-svc '$http3=":7443"; ma=86400'; # Advertise that
QUIC is available
            add_header QUIC-Status $quic; # Sent when QUIC was used

            proxy_pass http://backend1;
        }
    }

    server {
        listen 8443 ssl http2;

        ssl_certificate
 /home/ubuntu/andrey/http3/example-fullchain.pem;
        ssl_certificate_key  /etc/ssl/private/example.key;
        ssl_protocols        TLSv1 TLSv1.1 TLSv1.2;

        location / {
            proxy_pass http://backend2;
        }
    }

    upstream backend1 {
        ip_hash;
        server localhost max_fails=3 fail_timeout=30s;
    }

    upstream backend2 {
        ip_hash;
        server localhost max_fails=3 fail_timeout=30s;
    }
}

I opened UDP 7443 port on the cloud server (AWS).

I tested HTTP/3 (QUIC) with the client tools (neqo-client, curl-http3) and
the browsers (Firefox 85 and Chrome 88) according to
https://quic.nginx.org/readme.html.
I got the right result with the client tools, but I didn't get the right
result with the browsers.

When connecting 7443 port with the browsers, I get the HTTP/1.1 now.
When connecting 8443 port with the browsers, I get the HTTP/2 now.

I hope any suggestions and help.
Thanks.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-devel/attachments/20210202/ad56077d/attachment.htm>


More information about the nginx-devel mailing list