Skip to content

Compile nginx-1.13.10 to support http/2 and Server Push on CentOS 7

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

可以看到对应站点的http/2的session


Reference

https://www.nginx.com/blog/nginx-1-13-9-http2-server-push/