Назад | Перейти на главную страницу

Ошибки при компиляции Nginx с Pagespeed на CentOS 7

Я пытаюсь скомпилировать Nginx с Pagespeed из исходного кода, и мне трудно решить проблему not found ошибки, которые я вижу, когда добавляю параметры конфигурации. Это мои настройки конфигурации:

Я использую CentOS 7 - 64 бит

Настроить параметры:

sudo ./configure --add-module=/nginx-compile/modules/ngx_pagespeed-release-1.9.32.1-beta \
--prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--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 \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-mail \
--with-mail_ssl_module \
--with-file-aio \
--with-ipv6 \
--with-http_spdy_module \
--with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector \ 
--param=ssp-buffer-size=4 -m64 -mtune=generic' \
--user=nginx \
--group=nginx

Когда я добавляю вышеуказанное в ssh, я получаю следующее not found ошибки и no supported file AIO was found ошибка. Вот список, который я получил:

Ошибки после выполнения Configure:

checking for OS
 + Linux 3.10.0-123.el7.x86_64 x86_64
checking for C compiler ... found
 + using GNU C compiler
 + gcc version: 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC)
checking for gcc -pipe switch ... found
checking for gcc builtin atomic operations ... not found
checking for C99 variadic macros ... not found
checking for gcc variadic macros ... not found
checking for unistd.h ... found
checking for inttypes.h ... found
checking for limits.h ... found
checking for sys/filio.h ... not found
checking for sys/param.h ... found
checking for sys/mount.h ... found
checking for sys/statvfs.h ... found
checking for crypt.h ... found
checking for Linux specific features
checking for epoll ... not found
checking for O_PATH ... not found
checking for sendfile() ... not found
checking for sendfile64() ... not found
checking for sys/prctl.h ... found
checking for prctl(PR_SET_DUMPABLE) ... not found
checking for sched_setaffinity() ... not found
checking for crypt_r() ... not found
checking for sys/vfs.h ... found
checking for poll() ... not found
checking for /dev/poll ... not found
checking for kqueue ... not found
checking for crypt() ... not found
checking for crypt() in libcrypt ... not found
checking for F_READAHEAD ... not found
checking for posix_fadvise() ... not found
checking for O_DIRECT ... not found
checking for F_NOCACHE ... not found
checking for directio() ... not found
checking for statfs() ... not found
checking for statvfs() ... not found
checking for dlopen() ... not found
checking for dlopen() in libdl ... not found
checking for sched_yield() ... not found
checking for sched_yield() in librt ... not found
checking for SO_SETFIB ... not found
checking for SO_ACCEPTFILTER ... not found
checking for TCP_DEFER_ACCEPT ... not found
checking for TCP_KEEPIDLE ... not found
checking for TCP_FASTOPEN ... not found
checking for TCP_INFO ... not found
checking for accept4() ... not found
checking for kqueue AIO support ... not found
checking for Linux AIO support ... not found

./configure: no supported file AIO was found
Currently file AIO is supported on FreeBSD 4.3+ and Linux 2.6.22+ only

Я также установил следующие зависимости перед добавлением параметров конфигурации:

sudo yum install gcc gcc-c++ pcre-devel zlib-devel make unzip openssl-devel

Конфигурация, которую я использовал, аналогична настройкам конфигурации, которые появляются, когда я устанавливаю Nginx с использованием встроенного репозитория centos, за исключением того, что в него добавлен модуль pagespeed.


ОБНОВИТЬ:

Фактическая проблема заключалась в том, что я разделил строку при передаче --params на вызов configure, который является неверным и вызывал ошибки. Благодаря @XavierLucas ответ ниже ошибка была устранена после того, как я добавил --with-cc-opt и --params в 1 строку.

РАСШИРЕНИЕ:

Хотя вышеупомянутое было причиной ошибки, я также узнал, что хорошо иметь также установленные следующие библиотеки, чтобы Nginx мог максимально использовать свои основные функции и при установленном модуле Pagespeed:

gcc 
gcc-c++ 
pcre-devel 
zlib-devel 
make 
unzip 
openssl-devel 
libaio-devel
glibc 
glibc-devel 
glibc-headers
libevent
linux-vdso.so.1
libpthread.so.0
libcrypt.so.1
libstdc++.so.6
librt.so.1
libm.so.6
libpcre.so.0
libssl.so.10
libcrypto.so.10
libdl.so.2
libz.so.1
libgcc_s.so.1
libc.so.6
/lib64/ld-linux-x86-64.so.2
libfreebl3.so
libgssapi_krb5.so.2
libkrb5.so.3
libcom_err.so.2
libk5crypto.so.3
libkrb5support.so.0
libkeyutils.so.1
libresolv.so.2
libselinux.so.1

И

yum groupinstall 'Development Tools'

Чтобы немного прекратить долгую беседу, вот библиотеки C / C ++, которые вам нужны для скомпилированной версии nginx со скоростью страницы в CentOS:

linux-vdso.so.1
libpthread.so.0
libcrypt.so.1
libstdc++.so.6
librt.so.1
libm.so.6
libpcre.so.0
libssl.so.10
libcrypto.so.10
libdl.so.2
libz.so.1
libgcc_s.so.1
libc.so.6
/lib64/ld-linux-x86-64.so.2
libfreebl3.so
libgssapi_krb5.so.2
libkrb5.so.3
libcom_err.so.2
libk5crypto.so.3
libkrb5support.so.0
libkeyutils.so.1
libresolv.so.2
libselinux.so.1

Проверить с yum whatprovides <library> в каком пакете он доступен, и убедитесь, что у вас все установлено.

редактировать : Ваши варианты важны. Например, ssp ограничивает атаки с переполнением стека и имеет цель безопасности. Другие параметры оптимизируют двоичный файл, чтобы он лучше всего работал с вашей целевой архитектурой.

После того, как я сделал шаг назад, мне показалось странным, что при изменении этих параметров происходит сбой во внешней библиотеке. В любом случае хорошо, что вы выполнили предыдущие шаги, которые мы обсуждали, поэтому у вас есть необходимые библиотеки, чтобы получить максимальную производительность от nginx (помните, что он управляется событиями, поэтому libevent просто необходим!).

Ваша настоящая проблема возникает из-за того, как вы проходите --params к вызову настройки. Вы пытаетесь разделить на новую строку внутри самой строки.

--with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector \ 
--param=ssp-buffer-size=4 -m64 -mtune=generic' \

Должно быть :

--with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' \

И тогда будьте готовы к стене текста :)

Вот как скомпилировать nginx 1.10.2 со скоростью страницы 1.11.33.4 в CentOS 7

yum update
yum install wget curl gcc-c++ pcre-devel zlib-devel make unzip openssl-devel

mkdir /root/custom-nginx
cd /root/custom-nginx

NGINX_VERSION=1.10.2          ### copy and paste, place your nginx version you want to install

wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz

tar zxvf nginx-${NGINX_VERSION}.tar.gz

ls -la ### check downloaded version

cd /root/custom-nginx/nginx-${NGINX_VERSION}/src/http/modules/

https://developers.google.com/speed/pagespeed/module/build_ngx_pagespeed_from_source

перейдите на эту страницу, чтобы найти последнюю версию

-beta не означает нестабильную версию, 1.11.33.4 - стабильная версия

NPS_VERSION=1.11.33.4        ### copy and paste, place your pagespeed version you want to install

wget https://github.com/pagespeed/ngx_pagespeed/archive/release-${NPS_VERSION}-beta.zip -O release-${NPS_VERSION}-beta.zip

unzip release-${NPS_VERSION}-beta.zip

mv ngx_pagespeed-release-${NPS_VERSION}-beta ngx_pagespeed
cd ngx_pagespeed

wget https://dl.google.com/dl/page-speed/psol/${NPS_VERSION}.tar.gz
tar -xzvf ${NPS_VERSION}.tar.gz

cd /root/custom-nginx/nginx-${NGINX_VERSION}/

обычная конфигурация (nginx установлен из репо + pagepeed)

./configure --add-module=/root/custom-nginx/nginx-${NGINX_VERSION}/src/http/modules/ngx_pagespeed --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-file-aio --with-threads --with-ipv6 --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_ssl_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'


make && make install

затем

nano /etc/init.d/nginx

Создайте файл и вставьте код:

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15
# description:  NGINX is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/etc/nginx/nginx.conf"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

make_dirs() {
   # make required directories
   user=`$nginx -V 2>&1 | grep "configure arguments:.*--user=" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
   if [ -n "$user" ]; then
      if [ -z "`grep $user /etc/passwd`" ]; then
         useradd -M -s /bin/nologin $user
      fi
      options=`$nginx -V 2>&1 | grep 'configure arguments:'`
      for opt in $options; do
          if [ `echo $opt | grep '.*-temp-path'` ]; then
              value=`echo $opt | cut -d "=" -f 2`
              if [ ! -d "$value" ]; then
                  # echo "creating" $value
                  mkdir -p $value && chown -R $user $value
              fi
          fi
       done
    fi
}

start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    make_dirs
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    configtest || return $?
    stop
    sleep 1
    start
}

reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}

force_reload() {
    restart
}

configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac

Убедитесь, что папка / var / ngx_pagespeed_cache создана nginx

отредактируйте /etc/nginx/your-domain.conf ### и разместите свои настройки

###PAGESPEED###
pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;
##EXTRA FILTERS
#--> JAVASCRIPT
pagespeed EnableFilters canonicalize_javascript_libraries,rewrite_javascript,combine_javascript,inline_javascript,make_google_analytics_async ;
#--> CSS
pagespeed EnableFilters move_css_above_scripts,move_css_to_head,rewrite_style_attributes,inline_css,inline_google_font_css ;
#--> IMAGES
pagespeed EnableFilters convert_to_webp_lossless,sprite_images,resize_mobile_images,inline_preview_images ;
#--> HTML
pagespeed EnableFilters collapse_whitespace,remove_comments,extend_cache ;
#
##EXTRA MODS
pagespeed LazyloadImagesAfterOnload off ;
pagespeed UseExperimentalJsMinifier on ;
pagespeed LowercaseHtmlNames on ;
pagespeed PreserveUrlRelativity on ;
pagespeed XHeaderValue "Modified By dimitrios" ;
#pagespeed ForceCaching on ;
###PAGESPEED###

Конфигурация теста

/usr/sbin/nginx -V  ### must include pagespeed
/usr/sbin/nginx -t  ### syntax must be ok

Предупреждение! Отключите репо, чтобы предотвратить обновление nginx!

Не работает здесь для Centos 7, nginx 1.16.1:

[root@aru-251736 nginx-1.16.1]# ./configure --add-module=../ModSecurity-nginx \
--prefix=/usr/share/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 \
--http-client-body-temp-path=/var/lib/nginx/tmp/client_body \
--http-proxy-temp-path=/var/lib/nginx/tmp/proxy \
--http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi \
--http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi \
--http-scgi-temp-path=/var/lib/nginx/tmp/scgi \
--pid-path=/run/nginx.pid \
--lock-path=/run/lock/subsys/nginx \
--with-file-aio \
--with-ipv6 \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-stream_ssl_preread_module --with-http_addition_module \
--with-http_xslt_module=dynamic \
--with-http_image_filter_module=dynamic \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_slice_module \
--with-http_stub_status_module \
--with-http_perl_module=dynamic \
--with-http_auth_request_module \
--with-mail=dynamic \
--with-mail_ssl_module \
--with-pcre --with-pcre-jit \
--with-stream=dynamic \
--with-stream_ssl_module \
--with-google_perftools_module \
--with-debug \
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' 

....

checking for IP_PKTINFO ... not found
checking for IPV6_RECVPKTINFO ... not found
checking for TCP_DEFER_ACCEPT ... not found
checking for TCP_KEEPIDLE ... not found
checking for TCP_FASTOPEN ... not found
checking for TCP_INFO ... not found
checking for accept4() ... not found
checking for kqueue AIO support ... not found
checking for Linux AIO support ... not found
checking for Linux AIO support (SYS_eventfd) ... not found

./configure: no supported file AIO was found
Currently file AIO is supported on FreeBSD 4.3+ and Linux 2.6.22+ only

Попробуйте это, чтобы установить наши основные зависимости, запустите:

RedHat, CentOS или Fedora

sudo yum install gcc-c ++ pcre-devel zlib-devel сделать распаковать libuuid-devel

Ubuntu или Debian

sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev распаковать uuid-dev

Ссылка: https://www.modpagespeed.com/doc/build_ngx_pagespeed_from_source