This post was published in 2022-07-02. Obviously, expired content is less useful to users if it has already pasted its expiration date.
下面的命令都不包含make install这一步骤
如果要编译openssl/zlib/pcre等依赖而不是使用系统自带的库,则可能比较耗时,需要tmux新窗口
Table of Contents
使用系统库(当前采用的方案)
每次一有依赖库更新就要重新花很长时间编译nginx,编译工作文件夹占了2.1GB,其中openssl就占了1.8GB.
想通了,不搞那么多麻烦的源代码编译了,直接用系统的就行(反正系统是最新的)。编译工作文件夹160MB,编译也很快。
cd /root
rm -rf new_nginx
mkdir new_nginx
cd new_nginx
wget https://nginx.org/download/nginx-1.29.4.tar.gz
# https://github.com/google/ngx_brotli
git clone --recurse-submodules -j8 https://github.com/google/ngx_brotli
cd ngx_brotli/deps/brotli
mkdir out && cd out
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DCMAKE_C_FLAGS="-Ofast -m64 -march=native -mtune=native -flto -funroll-loops -ffunction-sections -fdata-sections -Wl,--gc-sections" -DCMAKE_CXX_FLAGS="-Ofast -m64 -march=native -mtune=native -flto -funroll-loops -ffunction-sections -fdata-sections -Wl,--gc-sections" -DCMAKE_INSTALL_PREFIX=./installed ..
cmake --build . --config Release --target brotlienc
cd ../../../..
# end brotli
tar -xzf nginx-1.29.4.tar.gz
cd nginx-1.29.4
# https://github.com/google/ngx_brotli
# DO NOT USE IT
# export CFLAGS="-m64 -march=native -mtune=native -Ofast -flto -funroll-loops -ffunction-sections -fdata-sections -Wl,--gc-sections"
# export LDFLAGS="-m64 -Wl,-s -Wl,-Bsymbolic -Wl,--gc-sections"
# end brotli conf
./configure --user=www --group=www --with-file-aio --with-threads --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 --with-stream --with-stream_ssl_preread_module --with-stream_ssl_module --with-http_gunzip_module --with-http_realip_module --with-pcre-jit --add-module=../ngx_brotli
make -j `grep 'processor' /proc/cpuinfo | wc -l`./configure --user=www --group=www --with-file-aio --with-threads --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 --with-stream --with-stream_ssl_preread_module --with-stream_ssl_module --with-http_gunzip_module --with-http_realip_module --with-pcre-jit --add-module=../ngx_brotli开启brotli(各种依赖自己下载编译)
由于不常用,所以下面的内容应该不是最新的。使用之前记得把所有版本号都更新到最新版。
2025年8月,cloudflare end-to-end brotli终于搞定了!
2024年4月,我发现cloudflare已经支持从源服务器获取brotli格式编码的数据了,所以以后会默认编译带有brotli的nginx.
cd /root
rm -rf new_nginx
mkdir new_nginx
cd new_nginx
wget https://nginx.org/download/nginx-1.29.2.tar.gz
wget https://github.com/openssl/openssl/releases/download/openssl-3.5.4/openssl-3.5.4.tar.gz
wget https://github.com/PhilipHazel/pcre2/releases/download/pcre2-10.46/pcre2-10.46.tar.gz
# https://github.com/google/ngx_brotli
git clone --recurse-submodules -j8 https://github.com/google/ngx_brotli
cd ngx_brotli/deps/brotli
mkdir out && cd out
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DCMAKE_C_FLAGS="-Ofast -m64 -march=native -mtune=native -flto -funroll-loops -ffunction-sections -fdata-sections -Wl,--gc-sections" -DCMAKE_CXX_FLAGS="-Ofast -m64 -march=native -mtune=native -flto -funroll-loops -ffunction-sections -fdata-sections -Wl,--gc-sections" -DCMAKE_INSTALL_PREFIX=./installed ..
cmake --build . --config Release --target brotlienc
cd ../../../..
# end brotli
wget https://github.com/madler/zlib/releases/download/v1.3.1/zlib-1.3.1.tar.gz
tar -xzf nginx-1.29.2.tar.gz
tar -xzf openssl-3.5.4.tar.gz
tar -xzf pcre2-10.46.tar.gz
tar -xzf zlib-1.3.1.tar.gz
cd nginx-1.29.2
# https://github.com/google/ngx_brotli
# DO NOT USE IT
# export CFLAGS="-m64 -march=native -mtune=native -Ofast -flto -funroll-loops -ffunction-sections -fdata-sections -Wl,--gc-sections"
# export LDFLAGS="-m64 -Wl,-s -Wl,-Bsymbolic -Wl,--gc-sections"
# end brotli conf
./configure --user=www --group=www --with-file-aio --with-threads --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-zlib=../zlib-1.3.1 --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_preread_module --with-stream_ssl_module --with-openssl=../openssl-3.5.4 --with-openssl-opt=enable-tls1_3 --with-http_gunzip_module --with-http_realip_module --with-pcre=../pcre2-10.46 --with-pcre-jit --add-module=../ngx_brotli
make -j `grep 'processor' /proc/cpuinfo | wc -l`其中nginx的编译参数如下:
./configure --user=www --group=www --with-file-aio --with-threads --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-zlib=../zlib-1.3.1 --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_preread_module --with-stream_ssl_module --with-openssl=../openssl-3.5.4 --with-openssl-opt=enable-tls1_3 --with-http_gunzip_module --with-http_realip_module --with-pcre=../pcre2-10.46 --with-pcre-jit --add-module=../ngx_brotli不开启brotli(暂时不用,所以版本不是最新)
由于不常用,所以下面的内容应该不是最新的。使用之前记得把所有版本号都更新到最新版。
不开启brotli,nginx二进制文件大小会减少大约6M .
cd /root
rm -rf new_nginx
mkdir new_nginx
cd new_nginx
wget https://nginx.org/download/nginx-1.25.4.tar.gz
wget https://www.openssl.org/source/openssl-3.2.1.tar.gz
wget https://github.com/PhilipHazel/pcre2/releases/download/pcre2-10.42/pcre2-10.42.tar.gz
wget https://github.com/madler/zlib/releases/download/v1.3.1/zlib-1.3.1.tar.gz
tar -xzf nginx-1.25.4.tar.gz
tar -xzf openssl-3.2.1.tar.gz
tar -xzf pcre2-10.42.tar.gz
tar -xzf zlib-1.3.1.tar.gz
cd nginx-1.25.4
./configure --user=www --group=www --with-file-aio --with-threads --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-zlib=../zlib-1.3.1 --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_preread_module --with-stream_ssl_module --with-openssl=../openssl-3.2.1 --with-openssl-opt=enable-tls1_3 --with-http_gunzip_module --with-http_realip_module --with-google_perftools_module --with-pcre=../pcre2-10.42 --with-pcre-jit
make -j `grep 'processor' /proc/cpuinfo | wc -l`其中nginx的编译参数如下:
./configure --user=www --group=www --with-file-aio --with-threads --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-zlib=../zlib-1.3.1 --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_preread_module --with-stream_ssl_module --with-openssl=../openssl-3.2.1 --with-openssl-opt=enable-tls1_3 --with-http_gunzip_module --with-http_realip_module --with-google_perftools_module --with-pcre=../pcre2-10.42 --with-pcre-jit Last Modified in 2025-12-10