在CentOS 7上使用Pagespeed编译Nginx时出现错误

我正在尝试使用来自源代码的Pagespeed编译Nginx,而且我试图解决在添加configuration设置时看到的not found错误。 这是我的configuration设置:

我正在使用CentOS 7 – 64位

configuration设置:

 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错误。 这是我得到的名单:

执行configuration后出现错误:

 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 

在添加configuration设置之前,我还安装了以下依赖项:

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

我使用的configuration与使用centos内置的repo安装Nginx时的configuration设置类似,只是它添加了pagespeed模块。


更新:

实际的问题是,当我将--params传递给configuration调用,这是不正确的,并导致错误时,我已经拆分线的方式。 感谢下面的@XavierLucas答案 ,一旦我在1行中添加--with-cc-opt--params ,就可以解决错误。

延伸:

虽然上面是错误的原因,但我也了解到,为了使Nginx能够充分发挥其核心function,并安装了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' 

为了停止一些闲聊,下面是在CentOS上使用pagespeed编译的nginx版本所需的C / C ++库:

 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>检查什么提供yum whatprovides <library>它在哪个包可用,并确保你已经安装了所有。

编辑 :你的select很重要。 例如,ssp将限制计算器的攻击并具有安全的目的。 其他选项将优化二进制文件,因此最适合您的目标版本。

退后一步,对我来说,通过改变这些选项,它会在外部库上崩溃,这似乎很奇怪。 无论如何,这是很好的,你遵循我们讨论过的前面的步骤,所以你有必要的图书馆,以获得最好的performance(注意,这是事件驱动,所以libevent是必须的!)。

您的实际问题来自您传递给configure调用的方式 。 你正在尝试在string本身内的新行上进行分割。

 --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' \ 

然后准备好墙壁的文字:)

这是如何在CentOS 7中以pagespeed 1.11.33.4编译nginx 1.10.2

 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}/ 

常见configuration(nginx从repo + pagespeed安装)

 ./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 

创build文件并粘贴代码:

 #!/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创build

编辑/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### 

testingconfiguration

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

警告! 禁用您的回购,以防止nginx更新!