Skip to content

How to compile nginx-1.13.10 to support http/2 on CentOS 7

homepage-banner

Introduction

Nginx is a free, open-source, high-performance web server used to serve dynamic HTTP content. HTTP/2 is a protocol that provides significant improvements over HTTP/1.1, such as faster page load times, lower latency, and reduced bandwidth usage. In this blog post, we’ll go over the steps to compile Nginx-1.13.10 with HTTP/2 support on CentOS 7.

Installing Prerequisites

0 make sure openssl>=1.0.2

openssl version

1 Download nginx-1.13.10

wget http://nginx.org/download/nginx-1.13.10.tar.gz
tar zxf nginx-1.13.10.tar.gz
cd nginx-1.13.10

2 prepare gcc and dev tools

yum groupinstall "Development Tools" 
yum install pcre* openssl* gd-devel* \
    zlib-devel pcre-devel libpcre3 \
    libpcre3-dev zlib1g-dev unzip git

3 prepare config module

./configure --user=nginx --group=nginx --prefix=/usr/local/nginx \
            --with-http_stub_status_module --with-http_ssl_module \
            --with-http_v2_module --with-http_gzip_static_module \
            --with-http_sub_module

the output:

Configuration summary
  + using system PCRE library
  + using system OpenSSL library
  + using system zlib library

  nginx path prefix: "/usr/local/nginx"
  nginx binary file: "/usr/local/nginx/sbin/nginx"
  nginx modules path: "/usr/local/nginx/modules"
  nginx configuration prefix: "/usr/local/nginx/conf"
  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx/logs/nginx.pid"
  nginx error log file: "/usr/local/nginx/logs/error.log"
  nginx http access log file: "/usr/local/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"

4 compile

make

5 install

make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/nginx

6 nginx config

server {
        listen       443 ssl http2 default_server;
        server_name  _;
        root         /usr/local/nginx/html;

        ssl_certificate "/usr/local/nginx/conf/server.crt";
        ssl_certificate_key "/usr/local/nginx/conf/server.key";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;


        location /index.html {
            http2_push_preload on;
            http2_push /image.jpg;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

7 prepare cert file

  • server.crt
  • server.key

8 reload nginx

nginx -t
nginx -s reload

9 Verify in chrome

Open chrome and input

chrome://net-internals/#http2

You can see the http/2 session for the corresponding site.

Conclusion

In this blog post, we went over the steps to compile Nginx-1.13.10 with HTTP/2 support on CentOS 7. We also covered how to configure Nginx to use HTTP/2. By following these steps, you can take advantage of the benefits that HTTP/2 provides over HTTP/1.1.

Reference

  • https://www.nginx.com/blog/nginx-1-13-9-http2-server-push
Leave a message