在 CentOS 7 上编译 Nginx 使其启用 TLS v1.3
升级系统
1 | yum update |
安装 Mainline 版的 Nginx
目的:自动生成 Nginx 的配置文件、获取官方 Nginx 的编译参数
修改/etc/yum.repos.d/nginx.repo
来配置源
1 | [nginx] |
安装 Mainline 版的 Nginx
1 | yum install nginx |
执行nginx -v
查看 Nginx 版本
1 | nginx version: nginx/1.17.1 |
执行nginx -V
获取编译参数
1 | nginx version: nginx/1.17.1 |
修改 Nginx 源 将enabled=1
改为enabled=0
防止yum update
时 Nginx 被更新
1 | [nginx] |
编译 Nginx
安装可能用到的依赖
1 | yum install -y git gcc gcc-c clang automake make autoconf libtool zlib-devel libatomic_ops-devel pcre-devel openssl-devel libxml2-devel libxslt-devel gd-devel GeoIP-devel gperftools-devel perl-devel perl-ExtUtils-Embed |
获取源码
1 | git clone https://github.com/nginx/nginx.git |
nginx-ct 是启用证书透明度(Certificate Transparency)策略的模块
为了启用 CT 和 TLS v1.3 需要在官方编译参数后面额外加入如下参数
1 | --add-module=../nginx-ct/ --with-openssl=../openssl/ |
全部编译参数如下
1 | --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-module=../nginx-ct/ --with-openssl=../openssl/ |
进入nginx
的 git 目录
1 | auto/configure 全部编译参数 |
开始编译
1 | make |
执行./objs/nginx -v
查看编译好的 Nginx 信息
1 | nginx version: nginx/1.17.1 |
备份 Mainline 版 用自编译版替代
1 | mv /usr/sbin/nginx /usr/sbin/nginx.1.17.1.mainline |
修改 Nginx 的配置文件开启 TLS v1.3
1 | ssl_protocols TLSv1.2 TLSv1.3; |
然后重启 Nginx
1 | systemctl restart nginx |
使用浏览器测试是否开启成功
这里我们用 Firefox 来测试
地址栏旁的绿色锁->显示连接细节->更多信息