一、安装、升级所需的程序库
1、利用CentOS Linux系统自带的yum命令安装、升级所需的程序库
yum update -y
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers patch git libtool automake telnet bison bind-utils jwhois setuptool ntsysv
2、编译安装高版本的cmake
yum remove cmake -y
wget https://cmake.org/files/v3.12/cmake-3.12.4.tar.gz
tar -zxvf cmake-3.12.4.tar.gz
cd cmake-3.12.4
./bootstrap
gmake && gmake install
ln -s /usr/local/bin/cmake /usr/bin/
二、到官网下载 Nginx 和 PHP 的源码包
http://nginx.org (nginx官网)
http://www.php.net (php官网)
1、创建新的目录用于保存下载的源码包,在该目录下下载Nginx,PHP源码包
mkdir -p /myDownload/software
cd /myDownload/software
wget http://nginx.org/download/nginx-1.16.0.tar.gz
wget https://www.php.net/distributions/php-7.3.7.tar.gz
三、编译安装Nginx
1、创建www用户和组
/usr/sbin/groupadd www
/usr/sbin/useradd -g www www
2、解压并编译安装Nginx
cd /myDownload/software
tar zxf nginx-1.16.0.tar.gz
cd nginx-1.16.0/
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_ssl_module --with-http_sub_module --with-http_v2_module
//编译安装
make && make install
3、创建Nginx日志目录
mkdir -p /nginx/logs
chmod +w /nginx/logs
chown -R www:www /nginx/logs
4、从新编写 nginx.conf 文件,内容如下 (注意 :当浏览器使用ip访问的时候,会被指向第一个server)
user www www;
worker_processes 8;
pid logs/nginx.pid;
events {
use epoll;
worker_connections 65535;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
log_format access '$remote_addr - $remote_user [$time_local] "$request" "$uri" $status $body_bytes_sent $request_time $upstream_response_time "$http_referer" "$http_user_agent" $http_x_forwarded_for "$server_name" "$http_host" "$cookie_userid" "$http_cookie" "$request_body"';
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
keepalive_timeout 60;
server_tokens off;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml application/javascript;
gzip_vary on;
upstream myfastcgi {
server 127.0.0.1:9000 weight=2;
}
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
include vhost/*.conf;
}
5、创建fcgi.conf文件
vi /usr/local/nginx/conf/fcgi.conf
输入以下内容:
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
6、建立 nginx.service 文件
vi /usr/lib/systemd/system/nginx.service
在末尾添加如下内容
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
7、启动 Nginx 并加入启动项
ulimit -SHn 65535
systemctl start nginx.service
// 把 nginx 加入到开机启动项
systemctl enable nginx.service
四、编译安装 PHP(FastCGI模式)
1、下载PHP 所需扩展库
1.1、libzip库 和 zlib库(提供数据压缩用的函式库)
# 移除旧的libzip
yum remove libzip
# 下载编译安装 libzip
wget https://libzip.org/download/libzip-1.5.1.tar.gz
tar zxf libzip-1.5.1.tar.gz
cd libzip-1.5.1/
mkdir build && cd build
cmake ..
make && make install
wget http://www.zlib.net/zlib-1.2.11.tar.gz
tar -zxf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make && make install
1.2、pcre库(rewrite的支持)
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz
tar -zxf pcre-8.42.tar.gz
cd pcre-8.42
./configure
make && make install
1.3、libiconv库(字符编码转换)
wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz
tar -zxf libiconv-1.15.tar.gz
cd libiconv-1.15
./configure
make && make install
1.4、jpeg库(图片库)
wget http://www.ijg.org/files/jpegsrc.v9a.tar.gz
tar -zxf jpegsrc.v9a.tar.gz
cd jpeg-9a/
./configure
make libdir=/usr/lib64
make libdir=/usr/lib64 install
1.5、libmcrypt库(加密算法)
wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gz
tar -zxf libmcrypt-2.5.7.tar.gz
cd libmcrypt-2.5.7
./configure
make && make install
/sbin/ldconfig
cd libltdl/
./configure --enable-ltdl-install
make && make install
ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8
ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a
ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la
ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so
ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1
ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
1.6、mhash库(加密)
wget http://nchc.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz
tar -zxf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9
./configure
make && make install
1.7、ImageMagick
wget http://www.imagemagick.org/download/ImageMagick-7.0.8-53.tar.gz
tar -zxf ImageMagick-7.0.8-53.tar.gz
cd ImageMagick-7.0.8-53
ldconfig /usr/local/lib
./configure
make && make install
ln -s /usr/local/include/ImageMagick-7 /usr/local/include/ImageMagick
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
2、编译安装PHP
./configure \
--prefix=/usr/local/webserver \
--with-config-file-path=/usr/local/webserver/php/etc \
--with-fpm-user=www \
--with-fpm-group=www \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-iconv-dir=/usr/local \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--enable-fpm \
--enable-mbstring \
--with-gd \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--enable-opcache \
--enable-exif \
--without-pear \
--enable-ftp \
--with-gettext \
--disable-fileinfo \
--enable-maintainer-zts
make ZEND_EXTRA_LIBS='-liconv' && make install
cp php.ini-production /usr/local/webserver/php/etc/php.ini
3、编译安装PHP扩展模块
3.1、imagick模块
wget http://pecl.php.net/get/imagick-3.4.3.tgz
tar imagick-3.4.3.tgz
cd imagick-3.4.3/
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make && make install
3.2、redis模块
git clone git://github.com/nicolasff/phpredis
cd phpredis
git submodule init
git submodule update
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make && make install
4、修改php.ini
vi /usr/local/webserver/php/etc/php.ini
修改如下
# 查找 ; extension_dir = "./" 修改为 extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20170718/" 并添加extension = "imagick.so" extension = "redis.so"
; extension_dir = "./"
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20170718/"
extension = "imagick.so"
extension = "redis.so"
# 查找 ; date.timezone = 改为 date.timezone = Asia/Hong_Kong
; date.timezone =
date.timezone = Asia/Hong_Kong
# 查找 ; log_errors = Off 改为 log_errors = On
; log_errors = Off
log_errors = On
# 查找 ; error_log = php_errors.log 改为 error_log = /var/log/php/errors.log
; error_log = php_errors.log
error_log = /var/log/php/errors.log
# 查找 disable_functions = 改为如下
disable_functions = passthru,exec,system,shell_exec,chroot,chgrp,chown,proc_open,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,fsocket,popen
# 查找 expose_php 改为
expose_php = Off
创建日志目录
mkdir /var/log/php
5、创建php-fpm配置文件
cd /usr/local/webserver/php/etc/
vi php-fpm.conf
可参考如下配置(less /usr/local/webserver/php/etc/php-fpm.conf | grep -v “^KaTeX parse error: Got function '\newline' with no arguments as superscript at position 1: \̲n̲e̲w̲l̲i̲n̲e̲”)
[global]
pid = /usr/local/webserver/php/php-fpm.pid
error_log = /var/log/php/php-fpm.log
syslog.facility = daemon
syslog.ident = php-fpm
log_level = error
emergency_restart_threshold = 10
emergency_restart_interval = 1s
process_control_timeout = 5s
rlimit_files = 65535
rlimit_core = 0
[www]
user = www
group = www
listen = 127.0.0.1:9000
listen.backlog = 65535
listen.owner = www
listen.group = www
listen.mode = 0666
pm = static
pm.max_children = 128
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 50
pm.max_requests = 1024
pm.status_path = /status
ping.path = /ping
ping.response = pong
access.log = /var/log/php/access.log
access.format = "%R - %u %t \\"%m %r%Q%q\\" %s %f %{mili}d %{kilo}M %C%%"
slowlog = /var/log/php/slow.log
request_slowlog_timeout = 1s
request_terminate_timeout = 0
rlimit_files = 65535
rlimit_core = 0
catch_workers_output = yes
php_flag[display_errors] = yes
6、建立 php-fpm.service 文件并启动 php
拷贝 php-fpm.service 到 /usr/lib/systemd/
cp /myDownload/software/php-7.2.8/sapi/fpm/php-fpm.service /usr/lib/systemd/system/
ulimit -SHn 65535
systemctl start php-fpm.service
# 把 php-fpm.service 相关命令
systemctl stop php-fpm.service # 停止
systemctl start php-fpm.service # 启动
systemctl restart php-fpm.service # 重启
systemctl enable php-fpm.service # 加入启动项
注:
错误解决
1、 error: off_t undefined; check your library configuration
# 添加搜索路径到配置文件
echo '/usr/local/lib64
/usr/local/lib
/usr/lib
/usr/lib64'>>/etc/ld.so.conf
# 更新配置
ldconfig -v