编译过程及步骤
#LAMP组合的编译安装:
#httpd+php
#cgi
#pm(fastcgi):php作为独立的服务
#httpd对fastcgi协议的支持:
# httpd-2.2: 需要额外安装fcgi模块;
# httpd-2.4: 自带fcgi模块;
#安装顺序:
#顺序: mariadb–>httpd–>php
#httpd和mariadb顺序无所谓,PHP是最后,因为PHP编译时要指明httpd的路径
#安装开发工具
yum groupinstall "Development tools"
Apache编译安装
wget http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.41.tar.gz
wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.7.0.tar.gz
wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-util-1.6.1.tar.gz
wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz
apr与pcre的编译
[root@master httpd]# tar -xvf apr-1.7.0.tar.gz && cd apr-1.7.0
[root@master apr-1.7.0]# ./configure --profix=/usr/local/apr
[root@master apr-1.7.0]# make && make install
[root@master httpd]# tar -xvf apr-util-1.6.1.tar.gz && cd apr-util-1.6.1
[root@master apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@master apr-util-1.6.1]# make && make install
[root@master httpd]# tar -xvf pcre-8.43.tar.gz && cd pcre-8.43
[root@master pcre-8.43]# ./configure --prefix=/usr/local/pcre
[root@master pcre-8.43]# make && make install
httpd的编译
#所需依赖
ncurses-devel expat-devel zlib-static zlib-devel autoconf freetype
libjpeg libjpeg-devel libpng libpng-del libxml2 libxml2-devel freetype-devel
curl-devel libtool libtool-ltdl libtool-ltdl-devel libevent libevent-devel
#编译过程
[root@master httpd]# tar -xvf httpd-2.4.41.tar.gz
[root@master httpd]# cd httpd-2.4.41
[root@master httpd-2.4.41]# ./configure --prefix=/usr/local/apache --enable-mods-shared=most --enable-headers --enable-mime-magic \
--enable-proxy --enable-so --enable-rewrite --enable-proxy-fcgi --enable-cgi --enable-ssl --enable-proxy-http2 --enable-ssl \
--enable-deflate --with-pcre=/usr/local/pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util \
--with-nghttp2=/usr/local/nghttp2 --enable-mpms-shared=all --enable-nonportable-atomics=yes --enable-remoteip --enable-http2
[root@master httpd-2.4.41]# make -j8 && make install
[root@master httpd]# groupadd apache
[root@master httpd]# useradd -g apache -r -M -s /usr/sbin/nologin apache
#建立系统账号,不创建家目录 指定群组为apache 使用nologin建立apache用户
[root@master apache]# chown -R apache:apache ./*
[root@master apache]# PATH=$PATH:/usr/local/apache
[root@master apache]# export $PATH
[root@master apache]# vim /etc/httpd/httpd.conf
User apache
Group apache
#可以复制apachectl到init.d目录下
[root@master ~]# ln -s /usr/local/apache/bin/apachectl /etc/init.d/httpd
#配置守护进程启动方式
[root@master apache]# chown -R apache:apache ./*
[root@master apache]# cp bin/apachectl /etc/init.d/httpd
[root@master apache]# chkconfig --add httpd
[root@master apache]# chkconfig httpd on
[root@master apache]# chkconfig --list
#CentOS7 systemctl启动方式
[root@master ~]# vim /etc/systemd/system/httpd.service
[Unit]
Description=Apache Server Daemon
Documentation=man:httpd man:httpd(8) man:apachectl
After=network.target rsyslog.service
[Service]
Type=forking
ExecStart=/etc/init.d/httpd -k start
ExecStop=/etc/init.d/httpd -k stop
ExecReload=/etc/init.d/httpd -k graceful
ExecRestart=/etc/init.d/httpd -k restart
[Install]
WantedBy=multi-user.target
MySql编译与MariaDB安装
MySql编译
- 注意:MySQL从5.5版本开始,通过
./configure
进行编译配置方式已经被取消,取而代之的是cmake工具。因此,我们首先要在系统中源码编译安装cmake工具。
#下载源码包
[root@master httpd]# wget https://github.com/Kitware/CMake/releases/download/v3.16.2/cmake-3.16.2.tar.gz
[root@master httpd]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.28.tar.gz
[root@master httpd]# wget http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
#编译cmake
[root@master httpd]# tar vxf cmake-3.13.4.tar.gz && cd cmake-3.13.4
[root@master cmake-3.13.4]# ./configure
[root@master cmake-3.13.4]# make && make install
#初始化boost库
[root@master httpd]# tar xvf boost_1_59_0.tar.gz
[root@master httpd]# cp -r boost_1_59_0 /usr/local/boost_1_59
#--BEGIN--
#依赖
cmake ncurses-devel gcc gcc-c++ pcre pcre-devel openssl openssl-devel
#--END--
#编译mysql
[root@master httpd]# groupadd mysql #创建mysql用户
[root@master httpd]# useradd -M -g mysql -r -s /usr/sbin/nologin mysql
[root@master httpd]# id mysql
uid=994(mysql) gid=1002(mysql) groups=1002(mysql)
[root@master httpd]# tar xvf mysql-5.7.28.tar.gz && mysql-5.7.28
[root@master httpd]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql57 \ #安装目录
-DWITH_BOOST=/usr/local/boost_1_59_0 \ #Boost库路径
-DDOWNLOAD_BOOST=1 \ #没有boost库是否自动下载boost库到boost路径,本地有boost库可以不用加这个
-DMYSQL_UNIX_ADDR=/data/mysql/tmp/mysql.sock \ #Unix套接字存放目录
-DMYSQL_DATADIR=/mnt/data/data \ #数据存放目录
-DSYSCONFDIR=/etc/mysql \ #配置文件安装目录
-DDEFAULT_CHARSET=utf8mb4 \ #Mysql使用的字符集
-DDEFAULT_COLLATION=utf8mb4_general_ci \ #Mysql排序规则
-DWITH_EXTRA_CHARSETS=all \ #额外的字符集
-DWITH_MYISAM_STORAGE_ENGINE=1 \ #启用InnoDB
-DWITH_INNOBASE_STORAGE_ENGINE=1 \ #启用ARCHIVE
-DWITH_MEMORY_STORAGE_ENGINE=1 \ #启用MEMORY
-DWITH_READLINE=1 \ #是否支持逐行读取
-DWITH_INNODB_MEMCACHED=1 \ #是否生成memcached共享库
-DWITH_DEBUG=OFF \ #是否开启构建调试
-DWITH_ZLIB=bundled \ #使用zlib与发行版捆绑在一起的库
-DENABLED_LOCAL_INFILE=1 \ #控制本地MySQL客户端库的内置默认功能
-DENABLED_PROFILING=ON \ #是否启用查询概要分析代码
-DMYSQL_MAINTAINER_MODE=OFF \ #是否启用特定于MySQL维护人员的开发环境
-DMYSQL_TCP_PORT=3306 #MySQL使用的端口
[root@master httpd]# make -j8 && make install
#编译配置参考:
#https://zhuanlan.zhihu.com/p/60045437
#https://dev.mysql.com/doc/refman/5.7/en/source-configuration-options.html
#配置
[root@master local]# ln -sv mysql57 mysql #建立软连接
[root@master bin]# PATH=$PATH:/usr/local/mysql/bin
[root@master bin]# export PATH
[root@master bin]# mkdir -p /mnt/data/{data,logs,pids,share}
#初始化目录
[root@master bin]# touch /mnt/data/pids/mysqld.pid
[root@master bin]# touch /mnt/data/logs/mysqld.log
[root@master data]# chown -R mysql:mysql /mnt/data/
#修改配置文件
[root@master data]# vim /etc/my.cnf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
datadir=/mnt/data/data
socket=/mnt/data/tmp/mysql.sock
[mysqld_safe]
log-error=/mnt/data/logs/mysqld.log
pid-file=/mnt/data/pids/mysqld.pid
[client]
default-character-set=utf8mb4
#加入init.d守护进程
[root@master mysql57]# cp support-files/mysql.server /etc/init.d/mysqld
[root@master mysql57]# chkconfig --add mysqld
[root@master mysql57]# chkconfig mysqld on
[root@master mysql57]# chkconfig --list mysqld #查看是否创建自启进程
#初始化数据库需要开启数据库才能进行初始化
[root@master data]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql57 --datadir=/mnt/data/data
#安全初始化
[root@master ~]# mysql_secure_installation
#systemctl启动mysql
[root@master system]# vim /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Service
Documentation=man:mysqld man:mysqld(8)
After=network.target
[Service]
Type=forking
ExecStart=/etc/init.d/mysqld start
ExecStop=/etc/init.d/mysqld stop
ExecReload=/etc/init.d/mysqld reload
ExecRestart=/etc/init.d/mysqld restart
[Install]
WantedBy=multi-user.target
[root@slave system]# systemctl daemon-reload #重载管理服务
#启动测试
[root@master system]# systemctl start mysqld.service
[root@master system]# systemctl status mysqld.service
● mysqld.service - MySQL Service
Loaded: loaded (/etc/systemd/system/mysqld.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2020-01-02 22:25:29 CST; 1s ago
Docs: man:mysqld
man:mysqld(8)
Process: 21577 ExecStart=/etc/init.d/mysqld start (code=exited, status=0/SUCCESS)
Main PID: 21587 (mysqld_safe)
CGroup: /system.slice/mysqld.service
├─21587 /bin/sh /usr/local/mysql57/bin/mysqld_safe --datadir=/mnt/data/data --pid-file=/mnt/data/pids/mysqld.pid
└─21751 /usr/local/mysql57/bin/mysqld --basedir=/usr/local/mysql57 --datadir=/mnt/data/data --plugin-dir=/usr/local/mysql57/lib/plugin --u...
[root@master system]# mysql
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
MariaDB二进制包手动安装
#建立运行用户
[root@slave ~]# groupadd mysql
[root@slave ~]# useradd -r -M -g mysql -s /usr/sbin/nologin mysql
[root@slave local]# tar -xvf mariadb-10.4.11-linux-x86_64.tar.gz -C /usr/local/
[root@slave local]# ln -sv mariadb-10.4.11-linux-x86_64/ mysql
[root@slave mysql]# . scripts/mysql_install_db --datadir=/data/data --user=mysql #初始化数据库目录
#设置环境变量和建立日志文件
[root@slave system]# PATH=$PATH:/usr/local/mysql/bin/
[root@slave system]# mkdir /var/log/mariadb
[root@slave system]# touch /var/log/mariadb/mariadb.log
[root@slave system]# chown mysql:mysql /var/log/mariadb/mariadb.log
[root@slave system]# touch /tmp/mysql.sock
[root@slave system]# chown mysql:mysql /tmp/mysql.sock
#添加配置文件
[root#slave system]# vim /etc/my.cnf
[mysqld]
port = 3306
socket = /tmp/mysql.sock
datadir=/data/data
symbolic-links=0
innodb_file_per_table = on
skip_name_resolve = on
key_buffer_size = 128M
skip-external-locking
max_allowed_packet = 1M
table_open_cache = 512
sort_buffer_size = 2m
read_buffer_size = 2M
read_rnd_buffer_size = 8M
query_cache_size = 32M
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#复制启动脚本
[root@slave mysql]# cp support-files/mysql.server /etc/init.d/mysqld
#添加systemctl管理脚本
[root@slave system]# vim /etc/systemd/system/mariadb.service
[Unit]
Description=MariaDB Service
Documentation=man:mariadb
After=network.target
[Service]
Type=forking
ExecStart=/etc/init.d/mysqld start
ExecStop=/etc/init.d/mysqld stop
ExecReload=/etc/init.d/mysqld reload
ExecRestart=/etc/init.d/mysqld restart
[Install]
WantedBy=multi-user.target
[root@slave system]# systemctl daemon-reload
#安全初始化
[root@slave mysql]# ./bin/mysql_secure_installatio
PHP编译与启用FPM
#编译依赖
libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel readline readline-devel libxslt libxslt-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses curl gdbm-devel libXpm-devel libX11-devel gd-devel gmp-devel expat-devel libicu-devel libzip-devel
#下载源码包
[root@master httpd]# wget http://mirror.cogentco.com/pub/php/php-7.0.9.tar.gz
#建立运行用户和用户群组
[root@master php-7.0.9]# groupadd www
[root@master php-7.0.9]# useradd -r -M -g www -s /sbin/nologin www
#编译过程
[root@master httpd]# tar -xvf php-7.0.9.tar.gz && cd php-7.0.9/
#设置编译参数
[root@master php-7.0.9]# ./configure \
--prefix=/usr/local/php7 --with-config-file-path=/etc/php --enable-fpm --with-fpm-user=www --with-fpm-group=www \
--enable-inline-optimization --disable-debug --disable-rpath --enable-shared --with-libxml-dir \
--with-xmlrpc --with-openssl --with-mhash --with-pcre-regex --with-zlib --with-iconv --with-bz2 --with-curl \
--enable-exif --enable-fileinfo --enable-filter --with-pcre-dir --enable-ftp --with-gd --with-openssl-dir \
--with-jpeg-dir --with-png-dir --with-zlib-dir --with-freetype-dir --enable-gd-jis-conv --with-gettext \
--with-gmp --enable-json --enable-mbstring --enable-mbregex --enable-mbregex-backtrack --with-onig \
--enable-pdo --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-zlib-dir --with-readline --enable-session \
--enable-simplexml --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-wddx --with-libxml-dir \
--with-xsl --enable-zip --with-pear --enable-opcache --with-mcrypt
[root@master httpd]# make -j8 && make install
#初始化配置文件与开启php-fpm
[root@master php-7.0.9]# cp php.ini-production /etc/php/php.ini
[root@master php-7.0.9]# cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf
[root@master php-7.0.9]# cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf
#修改配置文件
[root@master php7]# vim etc/php-fpm.conf
[global]
pid = /var/run/php-fpm.pid
error_log = /www/log/php-fpm.log
log_level = notice
[www]
listen = /tmp/php-fpm.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.status_path = /status
pm.max_children = 30
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
request_terminate_timeout = 100
request_slowlog_timeout = 30
slowlog = /www/log/slow.log
request_slowlog_timeout = 1s
#添加php-fpm的守护进程运行
[root@master ~]# vim /etc/systemd/system/php-fpm.service
[Unit]
Description=The FastCGI Process Manager
Documentation=php-fpm service
After=rsyslog.target network.target
[Service]
Type=simple
ExecStart=/usr/local/php7/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php7/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -SIGINT $MAINPID
[Install]
WantedBy=multi-user.target
编译常见问题
#libmcrypt没有安装
configure: error: mcrypt.h not found. Please reinstall libmcrypt.
#解决方法:yum安装或者编译安装
[root@master php-7.0.9]# yum -y install libmcrypt-devel
#编译安装
[root@master httpd]# wget https://src.fedoraproject.org/repo/pkgs/libmcrypt/libmcrypt-2.5.8.tar.gz/0821830d930a86a5c69110837c55b7da/libmcrypt-2.5.8.tar.gz
[root@master httpd]# mv download libmcrypt-2.5.8.tar.gz
[root@master libmcrypt-2.5.8]# tar xvf libmcrypt-2.5.8.tar.gz && cd libmcrypt-2.5.8
[root@master libmcrypt-2.5.8]# ./configure --prefix=/usr
#问题
configure: error: Don t know how to define struct flock on this system, set --enable-opcache=no
#解决方法
[root@master httpd]# vim /etc/ld.so.conf
include /usr/local/lib #添加这行
[root@master httpd]# ldconfig
php编译参数解释
- 各参数配置详解
#编译参数解释
--prefix=/usr/local/php //指定 php 安装目录
--with-apxs2=/usr/local/apache/bin/apxs //整合apache,
//apxs功能是使用mod_so中的LoadModule指令,
//加载指定模块到 apache,要求 apache 要打开SO模块
--with-config-file-path=/usr/local/php/etc //指定php.ini位置
--with-MySQL=/usr/local/mysql //mysql安装目录,对mysql的支持
--with-mysqli=/usr/local/mysql/bin/mysql_config
//mysqli扩展技术不仅可以调用MySQL的存储过程、处理MySQL事务,
//而且还可以使访问数据库工作变得更加稳定。
--enable-safe-mode //打开安全模式
--enable-ftp //打开ftp的支持
--enable-zip //打开对zip的支持
--with-bz2 //打开对bz2文件的支持
--with-jpeg-dir //打开对jpeg图片的支持
--with-png-dir //打开对png图片的支持
--with-freetype-dir //打开对freetype字体库的支持
--without-iconv //关闭iconv函数,各种字符集间的转换
--with-libXML-dir //打开libxml2库的支持
--with-XMLrpc //打开xml-rpc的c语言
--with-zlib-dir //打开zlib库的支持
--with-readline //是否开启CLI或CGI
--with-gd //打开gd库的支持
--enable-gd-native-ttf //支持TrueType字符串函数库
--with-curl //打开curl浏览工具的支持
--with-curlwrappers //运用curl工具打开url流
--with-ttf //打开freetype1.*的支持,可以不加了
--with-xsl //打开XSLT 文件支持,扩展了libXML2库 ,需要libxslt软件
--with-gettext //打开gnu 的gettext 支持,编码库用到
--with-pear //打开pear命令的支持,PHP扩展用的
--enable-calendar //打开日历扩展功能
--enable-mbstring //多字节,字符串的支持
--enable-bcmath //打开图片大小调整,用到zabbix监控的时候用到了这个模块
--enable-sockets //打开 sockets 支持
--enable-exif //图片的元数据支持
--enable-magic-quotes //魔术引用的支持
--disable-rpath //关闭额外的运行库文件
--disable-debug //关闭调试模式
--with-mime-magic=/usr/share/file/magic.mime //魔术头文件位置
--enable-fastCGI //php5.2一下需要开启
--enable-opcache //
- CGI方式安装才用的参数:
--enable-fpm //打上PHP-fpm 补丁后才有这个参数,CGI方式安装的启动程序php5.3以上使用
--enable-fastCGI //支持fastcgi方式启动PHP
--enable-force-CGI-redirect //重定向方式启动PHP
--with-ncurses //支持ncurses 屏幕绘制以及基于文本终端的图形互动功能的动态库
--enable-pcntl //freeTDS需要用到的,可能是链接mssql 才用到
--with-mcrypt //mcrypt算法的扩展
--with-mhash //mhash算法的扩展
//以上函数库需要安装
--with-gmp //应该是支持一种规范
--enable-inline-optimization //优化线程
--with-openssl //openssl的支持,加密传输时用到的
--enable-dbase //建立DBA 作为共享模块
--with-pcre-dir=/usr/local/bin/pcre-config //perl的正则库案安装位置
--disable-dmalloc
--with-gdbm //dba的gdbm支持
--enable-sigchild
--enable-sysvsem
--enable-sysvshm
--enable-zend-multibyte //支持zend的多字节
--enable-mbregex
--enable-wddx
--enable-shmop
--enable-soap
- 注意事项
指定了--with-apxs2=/usr/local/apache/bin/apxs以后,就不要再激活--enable-fpm和--enable-fastCGI,apxs是以php module的模式加载PHP的。Mysql在编译了Mysql开发library以后,可以不用指定mysql的路径。
PHP编译存在基础的依赖的关系,编译PHP首先需要安装XML扩展,因为php5核心默认打开了XML的支持,其他的基础库,相应需要:GD -> zlib, Png, Jpg, 如果需要支持其他,仍需要根据实际情况编译扩展库,ttf库需要freetype库的支持。
--enable-magic-quotes,是一个极其不推荐的参数,当然,如果你需要PHP为你做这些底下的工作,实际上他也没有很彻底的解决问题。
--with-openssl,需要openssl库。mysqli是MySQL团队提供的MySQL驱动,具有很多实用的功能和典型特征。不过他不是MySQL于PHP平台最好的选择,PDO被证实,是一个简易、高并发性,而且易于创建和回收的标准接口。不过PDO也经历了5.3以前的内存溢出的问题,在5.3以后,在读取Oracle的LOB资源时,若不对内存进行限制,仍会内存溢出。
- 需要单独安装的扩展
- gd库。
- ming的扩展。
- mhash和mcrypt的扩展。
详细选项上,除了上述的安装简介外,也可以在编译时加入其它的选项。
- apache 模块
语法: --with-apache=DIR
说明: 用本选项可以让 **PHP
** 以apache的模块方式使用,DIR 的字符串可以是 /usr/local/apache 或其它安装apache的目录
范例: --with-apache=/var/lib/apache
fhttpd 服务器模块
语法: --with-fhttpd=DIR
说明: 若使用 fttpd 服务器,可以使用本指令编译 PHP。用模块的方式配合 fttpd 服务器,可以有较好的效率。
- Adabas D 数据库
语法: --with-adabas=DIR
说明: 数据库系统为 Adabas D 数据库时需要加本选项。关于 Adabas D 数据库的细节,可以参考 http://www.adabas.com。
范例: --with-adabas=/usr/local/adabasd
dBase 资料表
语法: --with-dbase
说明: 只要加本选项,不用其它的参数或函数库,PHP 就会让系统有存取 dBase 资料表的功能。
- filePro 数据库
语法: --with-filepro
说明: 不用指定数据库路径及其它函数库等,可以读取 filePro 数据库 (唯读)。
mSQL 数据库
语法: --with-msql=DIR
说明: 提供存取 mSQL 数据库。更多的细节请参考 mSQL 的网站 http://www.hughes.com.au。
范例: --with-msql=/usr/local/Hughes
- MySQL 数据库
语法: --with-mysql=DIR
说明: 提供存取 MySQL 数据库。更多的细节请参考 MySQL 的网站 http://www.tcx.se。
范例: --with-mysql=/usr/local/mysql
- iODBC 数据库装置
语法: --with-iodbc=DIR
说明: 提供 ODBC 数据库装置,用来存取后端数据库。更多的细节请参考 iODBC 的网站 http://www.iodbc.org。
范例: --with-iodbc=/usr/local/iodbc
- OpenLink ODBC 数据库装置
语法: --with-openlink=DIR
说明: 使用 OpenLink ODBC 数据库装置,用来存取后端数据库。更多的细节请参考 OpenLink ODBC 的网站 http://www.openlinksw.com。
范例: --with-openlink=/usr/local/openlink
- Oracle 数据库
语法: --with-oracle=DIR
说 明: 使用 Oracle 数据库。Oracle 的版本要在 7.3 版以上。您也可以在 PHP 程序中使用环境变量 ORACLE_HOME 来指定 Oracle 的路径。更多有关 Oracle 的信息请参考 Oracle 的网站 > http://www.oracle.com。
范例: --with-oracle=/export/app/oracle/product/7.3.2
- PostgreSQL 数据库
语法: --with-pgsql=DIR
说 明: 使用 PostgreSQL 数据库。更多有关 PostgreSQL 的信息请参考 PostgreSQL 的网站 http://www.postgreSQL.org 或台湾的 Mirror 站 http://postgresql.ccit.edu.tw。
范例: --with-pgsql=/usr/local/pgsql
- 自订 ODBC 数据库驱动程序
语法: --with-custom-odbc=DIR
说明: 使用自订的 ODBC 函数库。当然,在使用本方式时要指定 CUSTOM_ODBC_LIBS 及 CFLAGS 变量。例如在 QNX 机器上使用 Sybase **SQL
** Anywhere 时可能要配置系统环境变量 CFLAGS=-DODBC_QNX、LDFLAGS=-lunix 及 CUSTOM_ODBC_LIBS="-ldblib -lodbc",并要在 PHP 配置加入 --with-custom-odbc=/usr/lib/sqlany50
范例: --with-custom-odbc=/usr/local/odbc
- 不使用 ODBC 数据库驱动程序
语法: --disable-unified-odbc
说 明: 使用本选项将使所有的 ODBC 数据库驱动程序不作用。本选项不用指定路径,而受本选项影响的选项有 --with-iodbc、--with-solid、--with-adabas、--with-velocis 及 --with-custom-odbc。
- LDAP 目录协议
语法: --with-ldap=DIR
说明: 若要使用目录协议 (Lightweight Directory Access Protocol, LDAP) 则必须要打开本选项。有关 LDAP 的细节,可以参考 RFC 文件的 RFC1777 及 RFC1778。
范例: --with-ldap=/usr/local/ldap.
- mcrypt 编码函数库
语法: --with-mcrypt=DIR
说明: 当安装了 mcrypt 函数库后,可在编译 PHP 时加入本选项,让程序可以使用编解码功能。
范例: --with-mcrypt=/usr/local/include
- XML 支持
语法: --with-xml
说明: 打开本选项可以支持 James Clark's 写的 XML 解析程序库。
- 维护模式
语法: --enable-maintainer-mode
说明: 本选项一般不会打开,除非是 PHP 开发人员比较有用。
- 正则表达式程序库
语法: --with-system-regex
说明: 若您需要额外的正则表达式功能,可以加入本选项。
- PHP 配置文件
语法: --with-config-file-path=DIR
说明: 用来指定 php3.ini 或 php4.ini 的路径,供 PHP 初始化时使用。
范例: --with-config-file-path=/usr/local/lib
- PHP 执行路径
语法: --with-exec-dir=DIR
说明: 有时为了系统的安全性考虑,会指定 PHP 程序一定要在哪个目录执行。
范例: --with-exec-dir=/usr/local/bin
- 调试模式
语法: --enable-debug
说明: 本选项一般不会使用,除非在开发 PHP 程序时比较有用。它可以显示额外的错误信息。
- 安全模式
语法: --enable-safe-mode
说明: 默认值是打开的,可以对系统安全提供比较多的保护。
- 变量追踪
语法: --enable-track-vars
说明: 让 PHP 能 追踪 HTTP_GET_VARS、HTTP_POST_VARS 及 HTTP_COOKIE_VARS 三个变量,一般是打开的。
- 自动加引入字符
语法: --enable-magic-quotes
说明: 可让程序在执行时自动加入反斜线的引入字符。
- 打开调试器
语法: --enable-debugger
说明: 打开内建的 PHP 调试器。目前本功能还在实验阶段,尚未成熟。
取消路径 (discard path)
语法: --enable-discard-path
说明: 打开这个选项,**用户
**就不能透过浏览器读取 .htaccess 等和系统安全相关的文件。
- 高精确度数学函数
语法: --enable-bcmath
说明: 打开高精确度函数。必须要先安装本函数库,本选项方有效。
- 强制 CGI 重定向
语法: --enable-force-cgi-redirect
范 例: 若使用 CGI VERSION 模式来执行 PHP 的设,打开本选项会增加安全性。例如用户读 http://my.host/cgi-bin/php/secret/doc.html 遇到比较了解 PHP 系统的黑客级用户可能会自
已输入以下网址 http://my.host/secret/doc.html 来读取相关信息。若 PHP 和 Apache 编译在一起,让 PHP 变成 Apache 的一部份,则不需要加入本选项。
不使用短的标记
语法: --disable-short-tags
说明: 配置本选项后,PHP 的程序就不能使用短的标记,一定要用的长标记。
php-fpm参数配置详解
pid = run/php-fpm.pid
#pid设置,默认在安装目录中的var/run/php-fpm.pid,建议开启
error_log = log/php-fpm.log
#错误日志,默认在安装目录中的var/log/php-fpm.log 如果设置为syslog,log就会发送给syslogd服务而不会写进文件里。
syslog.facility = daemon
# 把日志写进系统log,linux还不够熟悉,暂时不用理会。
syslog.ident = php-fpm
#系统日志标示,如果跑了多个fpm进程,需要用这个来区分日志是谁的。
log_level = notice
#错误级别. 可用级别为: alert(必须立即处理), error(错误情况), warning(警告情况), notice(一般重要信息), debug(调试信息). 默认: notice.
emergency_restart_threshold = 60
emergency_restart_interval = 60s
#表示在emergency_restart_interval所设值内出现SIGSEGV或者SIGBUS错误的php-cgi进程数如果超过 emergency_restart_threshold个,php-fpm就会优雅重启。这两个选项一般保持默认值。
process_control_timeout = 0
#设置子进程接受主进程复用信号的超时时间. 可用单位: s(秒), m(分), h(小时), 或者 d(天) 默认单位: s(秒). 默认值: 0.
daemonize = yes
#后台执行fpm,默认值为yes,如果为了调试可以改为no。在FPM中,可以使用不同的设置来运行多个进程池。 这些设置可以针对每个进程池单独设置。
listen = 127.0.0.1:9000
#fpm监听端口,即nginx中php处理的地址,一般默认值即可。可用格式为: 'ip:port', 'port', '/path/to/unix/socket'. 每个进程池都需要设置.
listen.backlog = -1
#未accept处理的socket队列大小,-1 on FreeBSD and OpenBSD,其他平台默认65535,高并发时重要,合理设置会及时处理排队的请求;太大会积压太多,处理完后nginx在前面都等超时断开这个和fpm的socket连接了,就杯具了。不要用-1,建议1024以上,最好是2的幂值。
# 一个池共用一个backlog队列,所有的池进程都去这个队列里accept连接。
# 最大数量受限于系统配置 cat /proc/sys/net/core/somaxconn,系统配置修改:vim /etc/sysctl.conf,增加 net.core.somaxconn = 2000 则最大为2000,然后php最大的backlog可以到2000。
listen.allowed_clients = 127.0.0.1
#允许访问FastCGI进程的IP,设置any为不限制IP,如果要设置其他主机的nginx也能访问这台FPM进程,listen处要设置成本地可被访问的IP。默认值是any。每个地址是用逗号分隔. 如果没有设置或者为空,则允许任何服务器请求连接
listen.owner = www
listen.group = www
listen.mode = 0666
#unix socket设置选项,如果使用tcp方式访问,这里注释即可。
user = www
group = www
#启动进程的帐户和组
pm = dynamic
#对于专用服务器,pm可以设置为static。
#如何控制子进程,选项有static和dynamic。如果选择static,则由pm.max_children指定固定的子进程数。如果选择dynamic,则由下开参数决定:
pm.max_children
#,子进程最大数
#--BEGIN--
计算方式: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.start_servers
#,启动时的进程数
pm.min_spare_servers
#,保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
pm.max_spare_servers
#,保证空闲进程数最大值,如果空闲进程大于此值,此进行清理
#--END--
pm.max_requests = 1000
#设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 '0' 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0.
pm.status_path = /status
#FPM状态页面的网址. 如果没有设置, 则无法访问状态页面. 默认值: none. munin监控会使用到
ping.path = /ping
#FPM监控页面的ping网址. 如果没有设置, 则无法访问ping页面. 该页面用于外部检测FPM是否存活并且可以响应请求. 请注意必须以斜线开头 (/)。
ping.response = pong
#用于定义ping请求的返回相应. 返回为 HTTP 200 的 text/plain 格式文本. 默认值: pong.
request_terminate_timeout = 0
#设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的'max_execution_time'因为某些特殊原因没有中止运行的脚本有用. 设置为 '0' 表示 'Off'.当经常出现502错误时可以尝试更改此选项。
request_slowlog_timeout = 10s
#当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中. 设置为 '0' 表示 'Off'
slowlog = log/$pool.log.slow
#慢请求的记录日志,配合request_slowlog_timeout使用
rlimit_files = 1024
#设置文件打开描述符的rlimit限制. 默认值: 系统定义值默认可打开句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改。
rlimit_core = 0
#设置核心rlimit最大限制值. 可用值: 'unlimited' 、0或者正整数. 默认值: 系统定义值.
chroot =
#启动时的Chroot目录. 所定义的目录需要是绝对路径. 如果没有设置, 则chroot不被使用.
chdir =
#设置启动目录,启动时会自动Chdir到该目录. 所定义的目录需要是绝对路径. 默认值: 当前目录,或者/目录(chroot时)
catch_workers_output = yes
#重定向运行过程中的stdout和stderr到主要的错误日志文件中. 如果没有设置, stdout 和 stderr 将会根据FastCGI的规则被重定向到 /dev/null . 默认值: 空
跟多详细配置参考:https://www.zybuluo.com/phper/note/89081
Nginx+php-fpm+Mysql整合
#编译安装nginx
[root@master ~]# wget https://mirrors.sohu.com/nginx/nginx-1.16.1.tar.gz
[root@master ~]# tar xvf nginx-1.16.1.tar.gz && nginx-1.16.1
[root@master nginx-1.16.1]# mkdir /etc/nginx
[root@master nginx-1.16.1]# mkdir /var/log/nginx/
[root@master nginx-1.16.1]# mkdir /var/lock/
[root@master nginx-1.16.1]# touch /var/log/nginx/access.log
[root@master nginx-1.16.1]# touch /var/log/nginx/error.log
[root@master nginx-1.16.1]# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx --pid-path=/run/nginx.pid \
--lock-path=/var/lock/nginx.lock --user=www --group=www --with-http_ssl_module --with-http_realip_module \
--with-http_image_filter_module --with-http_sub_module --with-pcre --with-http_gzip_static_module \
--with-http_random_index_module --with-http_degradation_module --with-http_gzip_static_module \
--with-http_random_index_module --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log \
--with-threads --with-stream --with-stream_ssl_module --with-file-aio --http-client-body-temp-path=/tmp/nginx/body \
--http-proxy-temp-path=/tmp/nginx/proxy --http-fastcgi-temp-path=/tmp/nginx/fcgi
[root@master nginx-1.16.1]# make -j8 && make install
#修改配置文件
[root@master sbin]# vim /etc/nginx/nginx.conf
user www www;
index index.php index.html;
root /html;
access_log /var/log/nginx/main.access.log main;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /html$fastcgi_script_name;
include fastcgi_params;
}
测试结果
[root@master sbin]# elinks 127.0.0.1/echo.php
is pho!
#mysql测试
[root@master sbin]# elinks 127.0.0.1/mysql_test.php
connect ok!
#phpinfo
[root@master sbin]# elinks 127.0.0.1/info.php
PHP logo
PHP Version 7.0.9
System Linux master 3.10.0-1062.9.1.el7.x86_64 #1 SMP Fri Dec 6 15:49:49 UTC 2019 x86_64
Build Date Jan 4 2020 20:08:36
'./configure' '--prefix=/usr/local/php7' '--with-config-file-path=/etc/php' '--enable-fpm'
'--with-fpm-user=www' '--with-fpm-group=www' '--enable-inline-optimization' '--disable-debug'
'--disable-rpath' '--enable-shared' '--with-xmlrpc' '--with-openssl' '--with-mhash'
'--with-pcre-regex' '--with-zlib' '--with-iconv' '--with-bz2' '--with-curl' '--enable-exif'
'--enable-fileinfo' '--enable-filter' '--with-pcre-dir' '--enable-ftp' '--with-gd'
Configure Command '--with-openssl-dir' '--with-jpeg-dir' '--with-png-dir' '--with-freetype-dir'
'--enable-gd-jis-conv' '--with-gettext' '--with-gmp' '--enable-json' '--enable-mbstring'
'--enable-mbregex' '--enable-mbregex-backtrack' '--with-onig' '--enable-pdo'
'--with-mysqli=mysqlnd' '--with-pdo-mysql=mysqlnd' '--with-zlib-dir' '--with-readline'
'--enable-session' '--enable-simplexml' '--enable-sockets' '--enable-sysvmsg'
'--enable-sysvsem' '--enable-sysvshm' '--enable-wddx' '--with-libxml-dir' '--with-xsl'
'--enable-zip' '--with-pear' '--enable-opcache' '--with-mcrypt'
Server API FPM/FastCGI
Virtual Directory Support disabled
Configuration File (php.ini) Path /etc/php
Loaded Configuration File /etc/php/php.ini
Scan this dir for additional .ini (none)
files
Additional .ini files parsed (none)
PHP API 20151012
PHP Extension 20151012
Zend Extension 320151012
Zend Extension Build API320151012,NTS
PHP Extension Build API20151012,NTS
Debug Build no
Thread Safety disabled
Zend Signal Handling disabled
Zend Memory Manager enabled
Zend Multibyte Support provided by mbstring
IPv6 Support enabled
DTrace Support disabled
Registered PHP Streams https, ftps, compress.zlib, compress.bzip2, php, file, glob, data, http, ftp, phar, zip
Registered Stream Socket tcp, udp, unix, udg, ssl, sslv3, tls, tlsv1.0, tlsv1.1, tlsv1.2
Apache+php-fpm+MySQL整合
#apache配置php解析
[root@master ~]# vim /etc/httpd/httpd.conf
#修改运行用户
User www
Group www
#开启模块
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule status_module modules/mod_status.so
LoadModule dir_module modules/mod_dir.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
#注释中心主机
#DocumentRoot "/usr/local/apache/htdocs" #注释这行防止多虚拟主机冲突
#添加文件解析
DirectoryIndex index.html index.php
#开启文件
# Server-pool management (MPM specific)
Include /etc/httpd/extra/httpd-mpm.conf
# Various default settings
Include /etc/httpd/extra/httpd-default.conf
# Virtual hosts
Include /etc/httpd/extra/httpd-vhosts.conf
#添加php文件解析
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
#添加主机配置文件
IncludeOptional /etc/httpd/conf.d/*.conf
ServerLimit 400
#配置虚拟主机解析php文件
[root@master ~]# vim /etc/httpd/conf.d/www.test.com.conf
<VirtualHost *:80>
ServerAdmin admin@test.com
DocumentRoot "/html"
ServerName 1.www.test.com
ServerAlias www.test.com
ErrorLog "/www/log/error.log"
CustomLog "/www/log/access.log" combined
<FilesMatch \.php$>
SetHandler "proxy:unix:/tmp/php-fpm.sock|fcgi://localhost"
#ProxyPassMatch "^/(.*\.php(/.*)?)$" "fcgi://127.0.0.1:9000/html/$1" #注意会全局转发到php-fpm,且只能使用端口方式的不能使用unix sock模式
</FilesMatch>
<Directory "/html">
SetOutputFilter DEFLATE
Options FollowSymLinks
AllowOverride All
Require all granted
DirectoryIndex index.php index.html
</Directory>
</virtualHost>
测试结果
#mysql连接测试结果
[root@master html]# cat /html/mysql_test.php
<?php
$mysql = new mysqli("127.0.0.1","root","root");
if(!$mysql){
echo "connect error!";
$mysql=null;
}else{
echo "connect ok!";
$mysql->close();
}
?>
[root@master html]# elinks 127.0.0.1/mysql_test.php
connect ok!
#phpinfo测试结果
[root@master php7]# elinks 127.0.0.1/info.php
PHP logo
PHP Version 7.0.9
System Linux master 3.10.0-1062.9.1.el7.x86_64 #1 SMP Fri Dec 6 15:49:49 UTC 2019 x86_64
Build Date Jan 4 2020 20:08:36
'./configure' '--prefix=/usr/local/php7' '--with-config-file-path=/etc/php' '--enable-fpm'
'--with-fpm-user=www' '--with-fpm-group=www' '--enable-inline-optimization' '--disable-debug'
'--disable-rpath' '--enable-shared' '--with-xmlrpc' '--with-openssl' '--with-mhash' '--with-pcre-regex'
'--with-zlib' '--with-iconv' '--with-bz2' '--with-curl' '--enable-exif' '--enable-fileinfo'
'--enable-filter' '--with-pcre-dir' '--enable-ftp' '--with-gd' '--with-openssl-dir' '--with-jpeg-dir'
Configure Command '--with-png-dir' '--with-freetype-dir' '--enable-gd-jis-conv' '--with-gettext' '--with-gmp'
'--enable-json' '--enable-mbstring' '--enable-mbregex' '--enable-mbregex-backtrack' '--with-onig'
'--enable-pdo' '--with-mysqli=mysqlnd' '--with-pdo-mysql=mysqlnd' '--with-zlib-dir' '--with-readline'
'--enable-session' '--enable-simplexml' '--enable-sockets' '--enable-sysvmsg' '--enable-sysvsem'
'--enable-sysvshm' '--enable-wddx' '--with-libxml-dir' '--with-xsl' '--enable-zip' '--with-pear'
'--enable-opcache' '--with-mcrypt'
Server API FPM/FastCGI
Virtual Directory Support disabled
Configuration File (php.ini) Path /etc/php
Loaded Configuration File /etc/php/php.ini
Scan this dir for additional .ini (none)
files
Additional .ini files parsed (none)
PHP API 20151012
PHP Extension 20151012
Zend Extension 320151012
Zend Extension Build API320151012,NTS
PHP Extension Build API20151012,NTS
Debug Build no
Thread Safety disabled
Zend Signal Handling disabled
Zend Memory Manager enabled
Zend Multibyte Support provided by mbstring
IPv6 Support enabled
DTrace Support disabled
Registered PHP Streams https, ftps, compress.zlib, compress.bzip2, php, file, glob, data, http, ftp, phar, zip
Registered Stream Socket Transports tcp, udp, unix, udg, ssl, sslv3, tls, tlsv1.0, tlsv1.1, tlsv1.2
Registered Stream Filters zlib.*, bzip2.*, convert.iconv.*, mcrypt.*, mdecrypt.*, string.rot13, string.toupper, string.tolower,
string.strip_tags, convert.*, consumed, dechunk
Zend logo This program makes use of the Zend Scripting Language Engine:
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
版权属于:龙之介大人
本文链接:https://i7dom.cn/215/2020/05/make-lanmp.html
本站所有原创文章采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 您可以自由的转载和修改,但请务必注明文章来源和作者署名并说明文章非原创且不可用于商业目的。