LNMP源码编译
LNMP=Linux Nginx Mysql PHP
Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器。Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度BWS、新浪、网易、腾讯等
Nginx官方网站
Nginx:http://nginx.org/
RamBler:http://www.rambler.ru/
Rambler是俄罗斯的门户网站,也是俄罗斯的三大门户之一,在这里你可以了解俄罗斯社会的方方面面。严格意义来讲,Rambler应该是俄罗斯的行业分类网站,每天大约有800万人利用该网站查询相关信息,是俄罗斯当之无愧的第二大本土搜索引擎。
了解Tengine
Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。(可以这样理解:淘宝拿到了Nginx源代码之后,进行了功能的填充,优化等等,然后提交给Nginx官方,但是由于Nginx官方相应慢或者不响应,加上语言沟通的不顺畅,于是淘宝公司就自己打包,在遵循GPL的原则上进行二次开发,于是就出了现在的Tengine这个版本)。
官网网站:http://tengine.taobao.org/
Nginx的工作原理
Nginx 本身只支持静态页面的处理,当客户端访问php页面的时候,nginx会将php转到php-fpm也处理,
php-fpm服务会把php页面解析成html文件给nginx处理,nginx返回给客户端处理
这里需要结合Apache的工作,对PHP文件处理过程的区别
1:Nginx是通过php-fpm这个服务来处理php文件
2:Apache是通过libphp5.so这个模块来处理php文件
Apache:
Nginx:
Apache的libphp5.so随着apache服务器一起运行,而Nginx和php-fpm是各自独立运行,所以在服务的运行过程中,Nginx和php-fpm都需要分别启动!
修改Nginx配置文件,启动nginx服务,修改php配置文件,启动php-fpm服务
LNMP软件所需要的软件包
MySQL=http://dev.mysql.com/downloads/mysql/ mysql主程序包
PHP=http://php.net/downloads.php php主程序包
Nginx=http://nginx.org/en/download.html Nginx主程序包
libmcrypt=http://mcrypt.hellug.gr/index.html libmcrypt加密算法扩展库,支持3DES等加密
或者:http://mcrypt.sourceforge.net/ MCrypt/Libmcrypt development site (secure access)
pcre=http://pcre.org/ pcre是php的依赖包
在Nginx官网网站上
Mainline version 主线版本
Stable version 稳定版本
Legacy versions 老版本,历史版本
旧版本下载:http://mirrors.sohu.com/nginx/
编译安装Nginx
安装包下载,开源的软件包,选择稳定版本既可
[root@localhost ~]# wget http://nginx.org/download/nginx-1.16.1.tar.gz
[root@localhost ~]# wget https://ftp.pcre.org/pub/pcre/pcre-8.37.tar.gz
解决依赖
在编译之前,把开发包组安装
[root@localhost ~]# yum -y groupinstall "Development Tools" "Development Libraries"
[root@localhost ~]# yum -y install pcre-devel openssl-devel zlib-devel libxslt-devel gd-devel perl-ExtUtils-Embed perl-devel GeoIP-devel GeoIP-data gperftools-devel gcc gcc-c++ autoconf automake zlib openssl pcre* pcre-devel
用yum安装的pcre是系统依赖的pcre
Zlib:Nginx提供gzip模块,需要zlib的支持
Openssl:Nginx提供SSL的功能
解压安装包
[root@localhost ~]# tar -xf pcre-8.37.tar.gz -C /usr/local/src/
//解压此安装包即可,不需要安装,Nginx需要指定pcre的源码不是安装后的路径,此包的功能是支持地址重写rewrite功能 pcre的依赖可以yum安装pcre和pcre-devel解决!
[root@localhost ~]# tar -xf nginx-1.16.1.tar.gz -C /usr/local/src/
[root@localhost ~]# cd /usr/local/src/nginx-1.16.1/
[root@localhost nginx-1.16.1]# ./configure \
--prefix=/usr/local/nginx \
--with-pcre=/usr/local/src/pcre-8.37 \
--user=nginx \
--group=nginx \
--with-file-aio \
--with-http_auth_request_module \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_xslt_module=dynamic \
--with-http_image_filter_module=dynamic \
--with-http_geoip_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-mail=dynamic \
--with-mail_ssl_module \
--with-pcre \
--with-pcre-jit \
--with-stream=dynamic \
--with-stream_ssl_module \
--with-google_perftools_module \
--with-debug
********************************************参数解释*********************************************************************
通用配置选项
–prefix=PATH Nginx安装的根路径,其它安装选项不明确指定安装路径,默认安装在此路径下
–sbin-path=PATH 指定Nginx二进制文件的路径,如果没有指定,默认使用–prefix选项指定的路径
–modules-path=PATH 指定模块文件放置的路径
–conf-path=PATH 命令行未明确指定配置文件时,使用的配置文件所在路径
–error-log-path=PATH 指定错误日志的路径
–pid-path=PATH 指定写入nginx master进程pid的文件,通常在/var/run/下
–lock-path=PATH 共享存储器互斥锁文件的路径
–user=USER 运行worker进程的用户
–group=GROUP 运行worker进程的组
–with-file-aio 为Linux 2.6.22+ 系统启用异步I/O
–with-debug 这个选项用于启用调试日志,在生产环境的系统中不推荐使用该选项
配置优化选项
–with-cc-opt=OPTIONS 设置将被添加到CFLAGS变量的附加参数
–with-ld-opt=OPTIONS 设置将在链接期间使用的额外参数
HTTP配置选项
–http-log-path=PATH http访问日志的默认路径
–http-client-body-temp-path=PATH 设置临时存储http客户端请求报文的目录路径
–http-proxy-temp-path=PATH 设置使用代理后存放临时文件的路径
–http-fastcgi-temp-path=PATH 设置fastcgi后存放临时文件的路径
–http-uwsgi-temp-path=PATH 设置uwsgi后存放临时文件的路径
–http-scgi-temp-path=PATH 设置scgi后存放临时文件的路径
HTTP模块配置选项
–with-http_auth_request_module 启用构建ngx_http_auth_request_module模块,该模块基于子请求的结果实现客户端授权。默认情况下不生成此模块。
–with-http_ssl_module 使用https协议进行通信,对通信的流量进行加密,需要依赖OpenSSL库。
–with-http_v2_module 构建一个支持http协议2.0版本的模块,该模块默认是不生成的。
–with-http_realip_module Nginx在七层负载均衡器或者其它设备之后时,启用此模块,可以获取调度器转发的请求报文首部中真实客户端的IP。
–with-http_addition_module 这是一个作为输出过滤器的模块,能够在一个请求经过location前或后时在该location自身添加内容。
–with-http_xslt_module=dynamic 该模块用于处理XML响应转换,基于一个或多个XSLT格式,需要依赖libxml2和libxslt库。
–with-http_image_filter_module=dynamic 该模块作为图像过滤器使用,在将图像发送给客户之前进行处理,需要依赖libgd库。
–with-http_geoip_module=dynamic 使用该模块能,可以设置各种变量在配置文件中的区段使用,能够基于客户端的ip地址查找代理位置,需要依赖MaxMindGeoIP库和相应的预编译数据库文件。
–with-http_sub_module 该模块实现替代过滤,在响应中用一个字符串替代另一个字符串,Note:使用该模块隐式禁用标头缓存。
–with-http_dav_module 启用这个模块将激活使用WebDAV的配置指令,Note:建议该模块只有在需要时才进行启用,如果配置不正确可能会带来安全隐患。
–with-http_flv_module 如果需要提供Flash流媒体视频文件,需要启用该模块提供伪流媒体。
–with-http_mp4_module 该模块支持H.264/AA文件伪流媒体
–with-http_gunzip_module 对于不支持gzip编码的客户,该模块用于为客户解压缩预压缩内容。
–with-http_gzip_static_module 当被调用的资源是没有.gz结尾格式的文件时,如果想支持发送预压缩版本的静态文件,可以使用该模块。
–with-http_random_index_module 启用这个模块可以提供从一个目录中随机选择文件的索引文件。
–with-http_secure_link_module 该模块提供了一种机制,会将一个散列值链接到一个URL中,只有使用正确的密码才能计算出链接。
–with-http_degradation_module 可以构建ngx_http_degradation_module模块,默认情况下,此模块是不构建的。
–with-http_slice_module 构建将请求拆分为子请求的ngx_http_slice_module模块,每个子请求可以返回一定范围的响应,该模块为大的响应提供了更有效的缓存,默认情况下,此模块是不构建的。
–with-http_stub_status_module 启用这个模块后会收集Nginx自身的状态信息
–with-http_perl_module=dynamic 构建嵌入式Perl模块,该模块默认不生成。
邮件代理配置选项
–with-mail=dynamic 动态启用POP3/IMAP4/SMTP代理模块
–with-mail_ssl_module 构建一个支持SSL/TLS协议的邮件代理服务模块,该模块默认不生成,构建和运行需要依赖OpenSSL库。
反向代理配置选项
–with-stream=dynamic 动态启用构建stream module模块,作为通用的TCP/UDP代理和负载均衡流模块,该模块默认不构建。
–with-stream_ssl_module 构建一个支持SSL/TLS协议的stream模块,该模块默认不生成,构建和运行需要依赖OpenSSL库。
其它配置选项
–with-ipv6 启用IPv6支持,在1.11.x后的版本编译时,已经不需要该编译选项
–with-pcre 强制使用PCRE库
–with-pcre-jit 使用即时编译构建PCRE库,支持1.1.12 pcre_jit指令
–with-google_perftools_module 启用构建ngx_google_perftools_module模块,该模块可使用Google Performance Tools对nginx工作进程进行分析,该模块专供nginx开发人员使用,默认不会生成。
安装
[root@localhost nginx-1.16.1]# make -j `grep processor /proc/cpuinfo | wc -l` && make install
创建用于运行的用户nginx
[root@localhost nginx-1.16.1]# useradd -M -s /sbin/nologin -u 1500 nginx
[root@localhost nginx-1.16.1]#chown -R nginx.nginx /usr/local/nginx/
查看nginx的目录结构
[root@localhost nginx-1.16.1]# ll /usr/local/nginx
总用量 4
drwxr-xr-x. 2 root root 4096 11月 1 18:49 conf #Nginx相关配置文件
drwxr-xr-x. 2 root root 40 11月 1 18:49 html #网站根目录
drwxr-xr-x. 2 root root 6 11月 1 18:49 logs #日志文件
drwxr-xr-x. 2 root root 19 11月 1 18:49 sbin #Nginx启动脚本
配置Nginx支持php文件
[root@localhost conf]# vim nginx.conf #nginx主配置文件
user nginx nginx; #程序运行的属主与属组
....
....
......
#access_log logs/host.access.log main;
location / {
root html;
index index.php index.html index.htm; 添加index.php
}
.....
....
....
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
以上的注释全部去掉
如下
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;#填写网站根路径
include fastcgi_params;
}
改完保存退出
启动nginx
[root@localhost conf]# /usr/local/nginx/sbin/nginx
配置环境变量
[root@localhost conf]# vim /etc/profile
export PATH=/usr/local/nginx/sbin:$PATH
[root@localhost conf]# source /etc/profile
Nginx维护命令
[root@localhost conf]# nginx -t #检查配置文件语法是否有错误
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost conf]# nginx -s reload #重新加载配置文而建(平滑重启)
[root@localhost conf]# nginx -s stop #停止Nginx,注意:启动没有任何参数
[root@localhost conf]# echo "/usr/local/nginx/sbin/nginx &" >> /etc/rc.local #开机启动
平滑重启(保持了C-S链接,不断开,服务器只是重新加载了配置文件,没有开启和关闭的服务器的一个动作)
使用浏览器测试
yum安装mysql
下载并安装mysql 的yum源
[root@localhost ~]#rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm #mysql8
[root@localhost ~]#rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm #mysql5.7
先修改需要安装的版本在执行安装命令,默认是最新的版本[0是关闭|1是启用]
[root@localhost ~]#yum -y install mysql-community-server mysql-community-devel mysql-connector-c++-devel``
[root@localhost ~]#yum -y install mysql57-community-release-el7-10.noarch.rpm
[root@localhost ~]#yum -y install mysql-community-server
过滤密码
```bash
[root@localhost yum.repos.d]# grep "password" /var/log/mysqld.log
2020-05-29T18:29:04.406797Z 1 [Note] A temporary password is generated for root@localhost: IPp?YpEBr9#g
登录
[root@localhost yum.repos.d]# mysql -uroot -p"IPp?YpEBr9#g"
修改密码
mysql> set password for root@localhost=password('Admin123!@#');
Query OK, 0 rows affected, 1 warning (0.00 sec)
刷新
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
编译安装mysql
检查是否有安装mysql数据库
[root@localhost ~]# rpm -qa |grep mysql
[root@localhost ~]# rpm -qa | grep mariadb
[root@localhost ~]# yum -y remove `rpm -qa | grep mariadb`
解决依赖
[root@localhost ~]# yum install -y gcc-c++ ncurses-devel perl-Data-Dumperpython-devel openssl openssl-devel
[root@localhost ~]#yum -y install perl perl-devel autoconf
[root@localhost ~]#yum -y install zlib zlib-devel cmake ncurses ncurses-devel bison bison-devel
安装boost
如果安装的MySQL5.7及以上的版本,在编译安装之前需要安装boost,因为高版本mysql需要boots库的安装才可以正常运行。否则会报CMake Error at cmake/boost.cmake:81错误
下载boost
[root@localhost ~]#wget http://www.sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
[root@localhost ~]#tar -xf boost_1_59_0.tar.gz -C /usr/local/
[root@localhost ~]# mv /usr/local/boost_1_59_0/ /usr/local/boost
在预编译安装MySQL时要加上-DWITH_BOOST=/usr/local/boost
下载mysql
[root@localhost ~]#wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.28.tar.gz #5.7.28版本
解压到指定目录
[root@localhost ~]#tar -xf mysql-5.7.28.tar.gz -C /usr/local && cd /usr/local/mysql-5.7.28
创建mysql运行用户
[root@localhost ~]# useradd -M -s /sbin/nologin mysql
**预编译**
[root@localhost mysql-5.7.28]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
> -DWITH_BOOST=/usr/local/boost \
> -DMYSQL_UNIX_ADDR=/usr/local/mysql/tmp/mysql.sock \
> -DMYSQL_DATADIR=/usr/local/mysql/data \
> -DDEFAULT_CHARSET=utf8 \
> -DDEFAULT_COLLATION=utf8_general_ci \
> -DWITH_EXTRA_CHARSETS=all \
> -DWITH_MYISAM_STORAGE_ENGINE=1 \
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \
> -DWITH_MEMORY_STORAGE_ENGINE=1 \
> -DWITH_READLINE=1 \
> -DWITH_INNODB_MEMCACHED=1 \
> -DWITH_DEBUG=OFF \
> -DWITH_ZLIB=bundled \
> -DENABLED_LOCAL_INFILE=1 \
> -DENABLED_PROFILING=ON \
> -DMYSQL_MAINTAINER_MODE=OFF \
> -DMYSQL_TCP_PORT=3306 \
> -DMYSQL-USER=mysql
*********************************参数解释****************************************************************************
DCMAKE_INSTALL_PREFIX #制定mysql的安装根目录,目录在安装的时候会自动创建,这个值也可以在服务器启动时,用--basedir来设置
DMYSQL_UNIX_ADDR #服务器与本地客户端进行通信的Unix套接字文件,必须是绝对路径,默认位置/tmp/mysql.sock,可以在服务器启动时,用--socket改变
DDEFAULT_CHARSET #mysql默认使用的字符集,不指定将默认使用Latin1西欧字符集
DDEFAULT_COLLATION #默认字符校对
DWITH_EXTRA_CHARSETS #制定mysql拓展字符集,默认值也是all支持所有的字符集
DWITH_MYISAM_STORAGE_ENGINE
DWITH_INNOBASE_STORAGE_ENGINE
DWITH_MEMORY_STORAGE_ENGINE
#静态编译MYISAM,INNOBASE,MEMORY存储引擎到MYSQL服务 器,这样MYSQL就支持这三种存储引擎
DWITH_READLINE #支持readline库
DENABLED_LOCAL_INFILE #允许本地倒入数据,启用加载本地数据
DMYSQL_DATADIR #mysql数据库存放路径
DMYSQL-USER #运行mysql的用户
这些编译参数的帮助寻找方法:
http://www.mysql.com→→Documentation→→选择对应的版本→→HTML Online→→View→→Installation & Upgrades→→Installing MySQL from Source →→MySQL Source-Configuration Options→→
http://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html
编译&安装
[root@localhost mysql-5.7.28]# make -j `grep processor /proc/cpuinfo | wc -l` && make install
配置文件
[root@localhost mysql-5.7.28]# mkdir -p /usr/local/mysql/{data,tmp,run}
[root@localhost mysql-5.7.28]# chown -R mysql.mysql /usr/local/mysql/
[root@localhost ~]#vim /etc/my.cnf
[client]
default-character-set=utf8
socket=/usr/local/mysql/run/mysql.sock
[mysql]
port=3306
socket=/usr/local/mysql/run/mysql.sock
[mysqld]
# skip-name-resolve
# skip-external-locking
max_connections=300
log_timestamps=SYSTEM
# GENERAL #
user=mysql
port=3306
character_set_server=utf8
collation-server=utf8_general_ci
default_storage_engine=InnoDB
basedir=/usr/local/mysql/
datadir=/usr/local/mysql/data
pid-file=/usr/local/mysql/run/mysqld.pid
socket=/usr/local/mysql/run/mysql.sock
sql_mode='NO_ENGINE_SUBSTITUTION'
修改启动脚本
[root@localhost mysql-5.7.28]#cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@localhost mysql-5.7.28]# vim /etc/init.d/mysqld
//更改启动脚本中指定mysql位置
basedir=
datadir=
#修改为
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
初始化数据库
[root@localhost mysql-5.7.28]# /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql --initialize-insecure
配置mysql服务
[root@localhost mysql-5.7.28]# chkconfig --add mysqld #添加到系统服务
[root@localhost mysql-5.7.28]# chkconfig mysqld on #设置开机自启
启动服务
[root@localhost mysql-5.7.28]# service mysqld start #启动
Starting MySQL.Logging to '/usr/local/mysql/data/localhost.localdomain.err'.
........... SUCCESS!
[root@localhost mysql-5.7.28]#service mysqld restart #重启
[root@localhost mysql-5.7.28]#service mysqld stop #停止
设置环境变量
[root@localhost mysql-5.7.28]# vim /etc/profile
添加下面的内容到最后
export PATH=/usr/local/mysql/bin:$PATH
保存退出
[root@localhost mysql-5.7.28]# source /etc/profile
登录服务,设置密码
[root@localhost mysql-5.7.28]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.28 Source distribution
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> set password for root@localhost =password('Admin123!@#');
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
退出用新密码登录
mysql> exit
Bye
[root@localhost mysql-5.7.28]# mysql -uroot -p'Admin123!@#'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.28 Source distribution
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
php编译安装
在Nginx中,我们使用的是php-fpm来对php页面解析,PHP-FPM其实是PHP源代码的一个补丁,指在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,再编译安装PHP后才可以使用
从PHP5.3.3开始,PHP中直接整合了PHP-FPM,所以从PHP5.3.3版本以后,不需要下载PHP-FPM补丁包了,下面是PHP-FPM官方发出来的通知:
http://php-fpm.org/download
https://www.php.net/releases/index.php
解决依赖
[root@localhost ~]# yum -y install php-pear
pear按照一定的分类来管理pear应用代码库,你的pear代码可以组织到其中适当的目录中,其他人可以方便的检索并分享到你的成果;pear不仅仅是一个代码仓库,它同时也是一个标准,使用这个标准来书写你的php代码,将会增强你的程序的可读性,复用性,减少出错的几率;Pear通过两个类为你搭建了一个框架,实现了诸如析构函数,错误捕获功能,你通过继承就可以使用这些功能
PHP添加libmcrypt拓展
libmcrypt加密算法扩展库,支持DES, 3DES, RIJNDAEL, Twofish, IDEA, GOST, CAST-256, ARCFOUR, SERPENT, SAFER+等算法
官方网站:http://mcrypt.hellug.gr/index.html 或者 http://mcrypt.sourceforge.net/
下载https://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/
在页面上点击下图连接,可以下载2.5.8版本
[root@localhost ~]# wget https://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
安装加密算法扩展库
[root@localhost ~]# tar -xf libmcrypt-2.5.8.tar.gz -C /usr/local/src/ && cd /usr/local/src/libmcrypt-2.5.8
[root@localhost libmcrypt-2.5.8]# ./configure --prefix=/usr/local/libmcrypt && make && make install && cd /root
除开上面的依赖解决之外,还需要安装图片,xml,字体支持基本库,使用yum去安装,安装的时候,这些软件包自
身也有依赖!
[root@localhost ~]# yum install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel -y
需要添加到库文件路径
由于系统默认规定只在/lib、/lib64、/lib/lib64下面找库文件,所以我们需要手动添加进去。
[root@localhost ~]# vim /etc/ld.so.conf
include ld.so.conf.d/*.conf #此行原有
/usr/local/libmcrypt/lib #此行添加
/usr/local/mysql/lib #此行添加
/usr/local/lib64
/usr/local/lib
/usr/lib
/usr/lib64
[root@localhost ~]# ldconfig -v
[root@localhost ~]# echo 'ldconfig' >> /etc/rc.local
5.3版本
https://www.php.net/distributions/php-5.3.28.tar.gz
[root@localhost ~]# wget https://www.php.net/distributions/php-7.3.4.tar.gz
[root@localhost ~]# tar -xf php-7.3.4.tar.gz -C /usr/local/src/
[root@localhost ~]# cd /usr/local/src/php-7.3.4/
[root@localhost php-7.3.4]# ./configure \
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--enable-fpm \
--with-MySQLi=/home/mysql/bin/mysql_config \
--with-MySQL=/home/mysql \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--enable-inline-optimization \
--with-mcrypt=/usr/local/libmcrypt\
--disable-debug \
--disable-rpath \
--enable-shared \
--enable-soap \
--with-libxml-dir \
--with-xmlrpc \
--with-openssl \
--with-mcrypt \
--with-mhash \
--with-pcre-regex \
--with-sqlite3 \
--with-zlib \
--enable-bcmath \
--with-iconv \
--with-bz2 \
--enable-calendar \
--with-curl \
--with-cdb \
--enable-dom \
--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-native-ttf \
--enable-gd-jis-conv \
--with-gettext \
--with-gmp \
--with-mhash \
--enable-json \
--enable-mbstring \
--enable-mbregex \
--enable-mbregex-backtrack \
--with-libmbfl \
--with-onig \
--enable-pdo \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-zlib-dir \
--with-pdo-sqlite \
--with-readline \
--enable-session \
--enable-shmop \
--enable-simplexml \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-wddx \
--with-libxml-dir \
--with-xsl \
--enable-zip \
--enable-mysqlnd-compression-support \
--with-pear \
--enable-opcache
[root@localhost php-7.3.4]#make -j `grep processor /proc/cpuinfo | wc -l` && make install
######################################参数解释################################################################
./configure \
--prefix=/usr/local/php \ 指定 php 安装目录
--with-config-file-path=/usr/local/php/etc \ 指定php.ini位置
#--with-apxs2=/usr/local/apache/bin/apxs 整合apache
--with-MySQLi=/usr/local/mysql/bin/mysql_config mysqli文件目录,mysqli扩展技术不仅可以调用MySQL的存储过程、处理MySQL事务,而且还可以使访问数据库工作变得更加稳定。
--with-mysqli=mysqlnd \
--with-MySQL=/usr/local/mysql mysql安装目录,对mysql的支持
--with-pdo-mysql=mysqlnd \
--with-iconv-dir \
--with-freetype-dir \ 打开对freetype字体库的支持
--with-jpeg-dir \ 打开对jpeg图片的支持
--with-zlib \
--with-libxml-dir=/usr \
--without-iconv 关闭iconv函数,种字符集间的转换
--with-libXML-dir 打开libxml2库的支持
--with-xmlrpc 打开xml-rpc的c语言
--with-zlib-dir 打开zlib库的支持
--with-gd \ 打开gd库的支持
--with-curl \ 打开curl浏览工具的支持
--with-curlwrappers 运用curl工具打开url流
--with-ttf 打开freetype1.*的支持,可以不加了
--with-xsl 打开XSLT 文件支持,扩展了libXML2库 ,需要libxslt软件
--with-gettext 打开gnu 的gettext 支持,编码库用到
--with-pear 打开pear命令的支持,PHP扩展用的
--with-mime-magic=/usr/share/file/magic.mime 魔术头文件位置
--enable-calendar 打开日历扩展功能
-enable-sockets 打开 sockets 支持
--enable-exif 图片的元数据支持
--enable-magic-quotes 魔术引用的支持
--enable-gd-native-ttf 支持TrueType字符串函数库
--enable-xml \
--disable-rpath \ 关闭额外的运行库文件
-disable-debug 关闭调试模式
--enable-bcmath \ 打开图片大小调整,用到zabbix监控的时候用到了这个模块
--enable-inline-optimization \
--enable-mbregex \
--enable-mbstring \ 多字节,字符串的支持
--enable-mysqlnd \
--enable-gd-native-ttf \
--with-gettext \
--with-mcrypt=/opt/libmcrypt \
--enable-safe-mode \ 打开安全模式
--enable-zip \ 打开对zip的支持
--with-bz2 \ 打开对bz2文件的支持
--enable-ftp \ 打开ftp的支持
CGI方式安装才用的参数
--enable-fpm 打上PHP-fpm 补丁后才有这个参数,CGI方式安装的启动程序
--enable-fastCGI 支持fastcgi方式启动PHP
--enable-force-CGI-redirect 同上 ,帮助里没有解释
--with-ncurses 支持ncurses 屏幕绘制以及基于文本终端的图形互动功能的动态库
--enable-pcntl freeTDS需要用到的,可能是链接mssql 才用到
mhash和mcrypt算法的扩展
--with-mcrypt 算法
--with-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
如果上面在make的时候 提示libzip相关的报错,可以安装下面的方法来解决:
先 执行 make clean
然后 安装压缩支持库
[root@localhost ~]#tar xf libzip-1.1.2.tar.gz -C /usr/local/src/
[root@localhost ~]#cd /usr/local/src/libzip-1.1.2/
[root@localhost libzip-1.1.2]#./configure --prefix=/usr/local/libzip && make && make install
再重新编译:
[root@localhost php-7.3.4]#./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --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 --enable-mysqlnd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-soap --with-gettext --with-mcrypt=/usr/local/libmcrypt --with-pcre-dir=/usr/local/src/pcre-8.37/ --with-zlib-dir=/usr/local/libzip
配置php和php-fpm
PHP配置文件:
[root@localhost php-7.3.4]# cp /usr/local/src/php-7.3.4/php.ini-production /usr/local/php/php.ini
PHP-FPM配置文件:
[root@localhost php-7.3.4]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
修改 /usr/local/php/etc/php-fpm.conf 运行用户和组改为nginx
将这个路径下的文件/usr/local/php/etc/php-fpm.d,重命名为php-fpm.conf
[root@localhost php-fpm.d]# vim php-fpm.conf
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
user = nginx #修改成nginx
group = nginx #nginx
PHP-FPM启动脚本
[root@localhost php-7.3.4]# cp /usr/local/src/php-7.3.4/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@localhost php-7.3.4]# chmod +x /etc/init.d/php-fpm
[root@localhost php-7.3.4]# chkconfig php-fpm on
启动
[root@localhost php-fpm.d]# /etc/init.d/php-fpm start
Starting php-fpm done
[root@localhost php-fpm.d]# ps -uax |grep php
root 86264 0.0 0.1 219888 4364 ? Ss 21:32 0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
nginx 86265 0.0 0.0 219888 3916 ? S 21:32 0:00 php-fpm: pool www
nginx 86266 0.0 0.0 219888 3916 ? S 21:32 0:00 php-fpm: pool www
root 86268 0.0 0.0 112728 972 pts/1 S+ 21:32 0:00 grep --color=auto php
测试LNMP的PHP支持
[root@localhost html]# vim index.php
<?php
phpinfo();
?>
如果测试访问有问题,检查一下网页的根路径,还有防火墙
安装phpmyadmin
centos7 安装phpmyadmin
1、先安装epel,不然安装pgpmyadmin时会出现找不到包。
yum install epel-release
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
2、
yum -y install phpmyadmin
3、修改配置文件
修改前
vim /etc/httpd/conf.d/phpMyAdmin.conf
<Directory /usr/share/phpMyAdmin/>
AddDefaultCharset UTF-8
<IfModule mod_authz_core.c>
Apache 2.4
<RequireAny>
# Require ip 127.0.0.1 #注释掉
# Require ip ::1 #注释掉
Require all granted #新添加
</RequireAny>
</IfModule>
<IfModule !mod_authz_core.c>
Apache 2.2
Order Deny,Allow
Deny from All
Allow from 127.0.0.1
Allow from ::1
</IfModule>
</Directory>
<Directory /usr/share/phpMyAdmin/setup/>
<IfModule mod_authz_core.c>
修改后
Apache 2.4
<RequireAny>
#Require ip 127.0.0.1 #注释掉
#Require ip ::1 #注释掉
Require all granted #新添加
</RequireAny>
</IfModule>
<IfModule !mod_authz_core.c>
Apache 2.2
Order Deny,Allow
Deny from All
Allow from 127.0.0.1
Allow from ::1
</IfModule>
</Directory>
修改nginx配置
新增
server
{
listen 888;
server_name phpmyadmin;
index index.html index.htm index.php;
root /usr/share/phpMyAdmin;
#error_page 404 /404.html;
include enable-php.conf;
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
location ~ /\.
{
deny all;
}
access_log /usr/loacl/logs/access.log;
}
注意两点
一文件的属主,属主要设置成启动nginx的用户,如果是用root,启动这个可以忽略
二.文件权限问题,文件权限755
改完之后重启nginx