Сборка Nginx

July 23, 2010

От нечего делать некоторое приличное время назад я занялся поиском способов оптимизирования скорости работы nginx. Логично, что кроме конфига единственный способ оптимизации, который нашёлся - это статическая сборка с оптимизацией под процессор. С первого раза у меня ничего не вышло ибо статическая сборка - это вещь с нюансами.
Итак, что нам для этого понадобится - сам <a href='http://sysoev.ru/nginx/download.html'>nginx</a>, <a href='http://zlib.net/'>zlib</a>, <a href='http://www.pcre.org/'>pcre</a>, <a href='http://www.openssl.org/'>openssl</a> и <a href='http://exs.elm.ru/doc/ngx_http_etag-0.1.3-for_0.8.44.patch'>патч</a> для реализации ETAG и всё. Ну, ещё инструкции по сборке этой ботвы. Вначале распаковываем nginx и в каталог nginx'а распаковываем тарболы всех библиотек, вот что нам даёт утилита ls:

# ls -l nginx-0.8.46 
итого 440
drwxr-xr-x  6 sergei sergei    4096 Июл 23 10:09 auto
-rwxr-xr-x  1 root   root      2001 Июл 23 11:08 build-nginx.sh
-rw-r--r--  1 sergei sergei  177777 Июл 19 15:31 CHANGES
-rw-r--r--  1 sergei sergei  182832 Июл 19 15:31 CHANGES.ru
drwxr-xr-x  2 sergei sergei    4096 Июл 23 10:09 conf
-rwxr-xr-x  1 sergei sergei    2401 Июн 18 19:51 configure
drwxr-xr-x  3 sergei sergei    4096 Июл 23 10:09 contrib
drwxr-xr-x  2 sergei sergei    4096 Июл 23 10:09 html
-rw-r--r--  1 root sergei    1326 Янв  1  2010 LICENSE
-rw-r--r--  1 root   root       281 Июл 23 11:12 Makefile
-rw-r--r--  1 root   root      18212 Июл 12 11:30 ngx_http_etag-0.1.3-for_0.8.44.patch
drwxr-xr-x  3 root   root      4096 Июл 23 11:15 objs
drwxr-xr-x 23 root   root      4096 Июл 23 11:13 openssl-1.0.0a
drwxr-xr-x  7   1169    1169   4096 Июл 23 11:14 pcre-8.10
-rw-r--r--  1 sergei sergei     127 Окт 12  2006 README
drwxr-xr-x  8 sergei sergei    4096 Июл 23 10:09 src
drwxr-xr-x 12    501 dialout   4096 Июл 23 11:14 zlib-1.2.5

это для пущей ясности изложения :) .
И собственно под x86_64 линукс почищенный сборочный скрипт вот:

#!/bin/bash

export ZLIBVERSION='1.2.5'
export PCREVERSION='8.10'
export OPENSSLVERSION='1.0.0a'

# export compile-time variables
export CFLAGS="-pipe -s -static -O3 -mmmx -msse -msse2 -msse3 -mfpmath=sse -mtune=core2 -march=core2 -mcmodel=small -enable-new-dtags -DNODEBUG -DNDEBUG -enable-stdcall-fixup -m64"
export LDFLAGS="-Wl,-O1 -static"

# make a zlib
cd zlib-$ZLIBVERSION
make clean
./configure
make

# make a perl compatible regular expressions library
cd ../pcre-$PCREVERSION
make distclean
./configure --enable-newline-is-any --enable-utf8 --enable-unicode-properties
make

# make an openssl
cd ../openssl-$OPENSSLVERSION
make clean
if [[ -d ./.openssl ]] ; then
    rm -rf ./.openssl
fi
./config
make
cd ..

# the main part 
./configure \
--prefix=/usr/local \
--sbin-path=/usr/local/sbin \
--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/lock/nginx.lock \
--user=www-data \
--group=www-data \
--with-file-aio \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_secure_link_module \
--http-client-body-temp-path=/var/lib/nginx/body \
--http-proxy-temp-path=/var/lib/nginx/proxy \
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
--without-mail_pop3_module \
--without-mail_imap_module \
--without-mail_smtp_module \
--with-pcre=./pcre-$PCREVERSION \
--with-zlib=./zlib-$ZLIBVERSION \
--with-openssl=./openssl-$OPENSSLVERSION \
--with-cc-opt='-pipe -s -static -O3 -mmmx -msse -msse2 -msse3 -mfpmath=sse -mtune=core2 -march=core2 -mcmodel=small -enable-new-dtags -DNODEBUG -DNDEBUG -enable-stdcall-fixup -ftracer -m64' \
--with-ld-opt='-Wl,-O1 -static'

make

Next Post