CentOS 6.x升级系统和PHP的curl,利用curl和cron自动重启https网站的php-fpm

CentOS 6.x升级系统和PHP的curl,利用curl和cron自动重启https网站的php-fpm
curl -I https://www.zhangfangzhou.cn/
curl: (35) SSL connect error #需要升级curl

wget https://curl.haxx.se/download/curl-7.50.0.tar.gz
tar -zxvf curl-7.50.0.tar.gz
cd curl-7.50.0
./configure --prefix=/usr/local/curl
make
make install
cp /usr/local/curl/bin/curl /usr/bin/curl #在源码的文件夹里面也有/root/curl-7.50.0/src/curl

curl --version
curl 7.50.0 (x86_64-pc-linux-gnu) libcurl/7.19.7 NSS/3.21 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2

php源码编译
--with-curl=/usr/local/curl/

502 Bad Gateway 自动重启脚本
#!/bin/bash
website="https://www.zhangfangzhou.cn/ https://www.zhangfangzhou.com"
if
/usr/bin/curl -I $website|grep "HTTP/1.1 502"
then
/bin/date -R >>/root/502.log
/etc/rc.d/init.d/nginx restart
fi

给予可执行权限:
chmod +x /root/502.sh

通过 crontab 设置周期运行:
crontab -u root -e
* * * * * /root/502.sh >/dev/null 2>&1

CentOS6 Nginx启用ngx_pagespeed加速站点访问

CentOS6 Nginx启用ngx_pagespeed加速站点访问
1、PageSpeed的功能特性

PageSpeed模块可以使用数量众多的重写"过滤器",每个过滤器都可以选择性地开启/关闭,从而自动进行各种优化(比如,减小文档大小、减少HTTP请求数据、减少HTTP往返次数以及缩短DNS解析时间)。

下面是ngx_pagespeed支持的其中一些过滤器。想了解支持的全部过滤器,请参阅官方文档。

Collapse Whitespace(压缩空白):通过把HTML网页中的多处连续空白换成一处空白,减少带宽使用量。
Canonicalize JavaScript Libraries(规范化转换JavaScript库):通过自动把流行的JavaScript库换成免费托管的JavaScript库(比如由谷歌托管),减少带宽使用量。
Combine CSS(合并CSS):通过把多个CSS文件合并成一个CSS文件,减少HTTP请求数量。
Combine JavaScript(合并JavaScript):通过把多个JavaScript文件合并成一个JavaScript文件,减少HTTP请求数量。
Elide Attributes(省略属性):通过删除由默认属性指定的标签,缩小文档大小。
Extend Cache(扩展缓存):通过优化网页资源的可缓存性,减少带宽使用量。
Flatten CSS Imports(精简CSS导入):通过删除CSS文件中的@import,减少HTTP请求往返次数。
Lazyload Images(延时加载图片):延时加载在客户端浏览器上看不见的图片。
Minify JavaScript(缩小JavaScript):通过缩小JavaScript,减少带宽使用量。
Optimize Images(优化图片):通过引入更多的内嵌图片、压缩图片,或者将GIF图片转换成PNG图片,优化图片分发。
Pre-Resolve DNS(预解析DNS):通过预解析DNS,缩短DNS解析时间。
Prioritize Critical CSS(优化加载关键CSS规则):重写CSS文件,以便首先加载渲染页面的CSS规则。

2、下载解压PageSpeed模块
Scientific Linux 6 provides gcc-4.8 packages that work on CentOS 6.
sudo rpm --import https://linux.web.cern.ch/linux/scientific6/docs/repository/cern/slc6X/i386/RPM-GPG-KEY-cern
sudo wget -O /etc/yum.repos.d/slc6-devtoolset.repo https://linux.web.cern.ch/linux/scientific6/docs/repository/cern/devtoolset/slc6-devtoolset.repo
sudo yum install devtoolset-2-gcc-c++ devtoolset-2-binutils

cd /usr/local/src/
wget https://github.com/pagespeed/ngx_pagespeed/archive/release-1.11.33.3-beta.zip
unzip -q release-1.11.33.3-beta.zip
wget https://dl.google.com/dl/page-speed/psol/1.11.33.3.tar.gz
tar xzf 1.11.33.3.tar.gz -C ngx_pagespeed-release-1.11.33.3-beta #解压出来的psol文件夹到上面ngx_pagespeed-release-1.11.33.3-beta文件夹内

3、然后到nginx源码目录,添加以下代码重新编译nginx
./configure --prefix=/usr/local/nginx --user=www --group=www\
--add-module=/root/ngx_http_google_filter_module \
--add-module=/root/ngx_http_substitutions_filter_module \
--add-module=/root/ngx_pagespeed-release-1.11.33.3-beta \
--with-cc=/opt/rh/devtoolset-2/root/usr/bin/gcc \
--with-openssl=/root/openssl \
--with-pcre=/root/pcre \
--with-zlib=/root/zlib \
--with-http_stub_status_module \
--with-http_secure_link_module \
--with-http_v2_module \
--with-http_ssl_module \
--with-ipv6 \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_sub_module \
--with-stream \
--with-stream_ssl_module
make //不需要安装 make install
/etc/init.d/nginx stop
cd objs/
cp nginx /usr/local/nginx/sbin/ //覆盖原文件
/etc/init.d/nginx start

4、配置Nginx中的ngx_pagespeed模块
PageSpeed过滤器,有两种不同的级别可供你选择:CoreFilters和PassThrough。除非有所指定,否则默认情况下使用CoreFilters。
使用CoreFilters

server {
# 侦听的端口
listen 80;
# 服务器名称
server_name www.zhangfangzhou.cn;
# 记下根目录
root /usr/local/nginx/html;
# 访问日志
access_log /var/log/nginx/access.log main;
# 启用ngx_pagespeed
pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;
# 启用CoreFilters
pagespeed RewriteLevel CoreFilters;
# 禁用CoreFilters中的某些过滤器
pagespeed DisableFilters rewrite_images;
# 选择性地启用额外的过滤器
pagespeed EnableFilters collapse_whitespace;
pagespeed EnableFilters lazyload_images;
pagespeed EnableFilters insert_dns_prefetch;
}

对高级用户而言:使用PassThrough

server {
# 侦听的端口
listen 80;
# 服务器名称
server_name www.zhangfangzhou.cn;
# 记下根目录
root /usr/local/nginx/html;
# 访问日志
access_log /var/log/nginx/access.log main;
# 启用ngx_pagespeed
pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;
# 禁用CoreFilters
pagespeed RewriteLevel PassThrough;
# 启用压缩空白过滤器
pagespeed EnableFilters collapse_whitespace;
# 启用JavaScript库卸载
pagespeed EnableFilters canonicalize_javascript_libraries;
# 把多个CSS文件合并成一个CSS文件
pagespeed EnableFilters combine_css;
# 把多个JavaScript文件合并成一个JavaScript文件
pagespeed EnableFilters combine_javascript;
# 删除带默认属性的标签
pagespeed EnableFilters elide_attributes;
# 改善资源的可缓存性
pagespeed EnableFilters extend_cache;
# 更换被导入文件的@import,精简CSS文件
pagespeed EnableFilters flatten_css_imports;
pagespeed CssFlattenMaxBytes 5120;
# 延时加载客户端看不见的图片
pagespeed EnableFilters lazyload_images;
# 启用JavaScript缩小机制
pagespeed EnableFilters rewrite_javascript;
# 启用图片优化机制
pagespeed EnableFilters rewrite_images;
# 预解析DNS查询
pagespeed EnableFilters insert_dns_prefetch;
# 重写CSS,首先加载渲染页面的CSS规则
pagespeed EnableFilters prioritize_critical_css;
}

5、建立缓存文件夹并赋予nginx用户权限

sudo mkdir /var/ngx_pagespeed_cache
sudo chown www:www /var/ngx_pagespeed_cache

Linux编译安装openssl升级系统openssl和生成系统动态连接库dynamic/shared libraries

Linux编译安装openssl升级系统openssl和生成系统动态连接库dynamic/shared libraries

openssl:多用途的命令行工具,各功能分别使用子命令实现
libcrypto:公共加密库(存放了各种加密算法)
libssl:ssl协议的实现

yum -y install perl gcc

wget -4 http://zlib.net/zlib-1.2.8.tar.gz
tar -zxvf zlib-1.2.8.tar.gz
cd zlib-1.2.8
./configure --shared
make
make install

cp libz.a /usr/local/lib
chmod 644 /usr/local/lib/libz.a
cp libz.so.1.2.8 /usr/local/lib
chmod 755 /usr/local/lib/libz.so.1.2.8
cp zlib.3 /usr/local/share/man/man3
chmod 644 /usr/local/share/man/man3/zlib.3
cp zlib.pc /usr/local/lib/pkgconfig
chmod 644 /usr/local/lib/pkgconfig/zlib.pc
cp zlib.h zconf.h /usr/local/include
chmod 644 /usr/local/include/zlib.h /usr/local/include/zconf.h

wget -4 --no-check-certificate https://www.openssl.org/source/openssl-1.0.1t.tar.gz
tar -zxvf openssl-1.0.1t.tar.gz
cd openssl-1.0.1t
./config --prefix=/usr shared zlib
make
make install

installing libcrypto.a
installing libssl.a
installing libcrypto.so.1.0.0
installing libssl.so.1.0.0
make[1]: Entering directory `/usr/lib64'
make[2]: Entering directory `/usr/lib64'
make[2]: Leaving directory `/usr/lib64'
make[2]: Entering directory `/usr/lib64'
make[2]: Leaving directory `/usr/lib64'
make[1]: Leaving directory `/usr/lib64'
cp libcrypto.pc /usr/lib64/pkgconfig
chmod 644 /usr/lib64/pkgconfig/libcrypto.pc
cp libssl.pc /usr/lib64/pkgconfig
chmod 644 /usr/lib64/pkgconfig/libssl.pc
cp openssl.pc /usr/lib64/pkgconfig
chmod 644 /usr/lib64/pkgconfig/openssl.pc

#-fPIC,在 Linux 下动态链接库,“标准” 的做法是编译成位置无关代码(Position Independent Code,PIC),然后链接成一个动态链接库,不加经常也能正常运行,只是创建 .so 的时候会有一个警告。
如果--prefix=/usr 目录是其他目录则需要使用ldconfig(一个动态链接库管理命令),为了让动态链接库为系统所共享
echo "/usr/local/openssl/lib">>/etc/ld.so.conf
ldconfig -v

shared no-shared
是否生成动态连接库。

echo '/usr/lib64' >> /etc/ld.so.conf
echo '/usr/local/lib64' >> /etc/ld.so.conf
使用ldconfig(一个动态链接库管理命令),为了让动态链接库为系统所共享

ldd $(which nginx)
ldd命令用于判断某个可执行的 binary 档案含有什么动态函式库

Linux下,动态库通常以.so(share object)结尾。(通常/lib和/usr/lib等目录下存在大量系统提供的以.so结尾的动态库文件)
Windows下,动态库常以.dll结尾。(通常C:\windows\System32等目录下存在大量系统提供的以.dll结尾的动态库文件)

动态库与静态库之间的区别
静态库是指编译连接时,把库文件的代码全部加入到可执行文件中,所以生成的文件较大,但运行时,就不再需要库文件了。即,程序与静态库编译链接后,即使删除静态库文件,程序也可正常执行。
动态库正好相反,在编译链接时,没有把库文件的代码加入到可执行文件中,所以生成的文件较小,但运行时,仍需要加载库文件。即,程序只在执行启动时才加载动态库,如果删除动态库文件,程序将会因为无法读取动态库而产生异常。

php
--with-openssl=DIR Include OpenSSL support (requires OpenSSL >= 0.9.8)

nginx
--with-pcre force PCRE library usage
--with-pcre=DIR set path to PCRE library sources
--with-zlib=DIR set path to zlib library sources
--with-openssl=DIR set path to OpenSSL library sources

apache
--with-ssl=PATH OpenSSL installation directory
--with-ssl=/usr/local/openssl 指向编译的目录,因为不但需要include还需要lib

yum -y install gcc perl make
wget -4 --no-check-certificate https://www.openssl.org/source/openssl-1.0.2-latest.tar.gz
tar -zxf openssl-1.0.2-latest.tar.gz
mv openssl-1.0.2? openssl2

如果--prefix=/usr 目录是其他目录则需要使用ldconfig(一个动态链接库管理命令),为了让动态链接库为系统所共享
echo "/usr/local/openssl/lib">>/etc/ld.so.conf #非必须
ldconfig -v
ldconfig做的这些东西都与运行程序时有关,跟编译没有关系。

1、./config
配置文件夹/usr/local/ssl/
ldd $(which openssl)

2、./config --prefix=/usr shared zlib
./config --prefix=/usr
配置文件夹/usr/ssl
ldd $(which openssl)

3、./config --prefix=/usr/local
配置文件夹/usr/local/ssl/
ldd $(which openssl)

3、./config -fPIC --prefix=/usr/local/openssl shared no-ssl2 no-ssl3
配置文件夹/usr/local/openssl/ssl

mv /usr/bin/openssl /usr/bin/openssl.old
mv /usr/include/openssl /usr/include/openssl.old
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
ln -sf /usr/local/openssl/lib/libcrypto.so.1.0.0 /lib/libcrypto.so.6
echo "/usr/local/openssl/lib" >>/etc/ld.so.conf
ldconfig -v

/usr/local/openss/ssl 配置文件
/usr/local/openss/lib 库文件
/usr/local/openss/include 头文件

./config --prefix=/usr/local/openssl
/usr/local/openssl/ssl
可执行文件放在/usr/local/openssl/bin
库文件放在/usr/local/openssl/lib
配置文件放在/usr/local/openssl/etc
其他资源在/usr/local/openssl/share/
make && make install
make uninstall

find / -name libssl.so
--with-openssl=
ln -s /usr/lib64/libssl.so /usr/lib

dynamic/shared libraries
/lib /lib64是内核级的
/usr/lib /usr/lib64是系统级的
/usr/local/lib /usr/local/lib64是用户级的

openssl