最近有个ERP+PHP-web �y��面�h境部署需求,需要部署Nginx+PHP的cgi+socket的模式、MysqL环境。查看服务端口是否起来,我们习惯使用netstat指令查看,所以如果你的系统里尚未安装netstat,可直接安�b yum install -y net-tools即可


实验环境:

Linux版本:CentOS 7.2

Nginx版本:Nginx-1.10.1

PHP版本:PHP-5.6.5

MysqL版本:MariaDB-5.5.52


一、首先部署Nginx

把相�P依�包安�b完��

openssl-devel 、zlib-devel `pcre-devel

程序默认是使用 nobody 身份运行的,我们使用 Nginx 用户来运行,首先添加Nginx组和用户,不创建家目录,不允许登陆系统

#groupadd Nginx

#useradd -M -s /sbin/nologin -g Nginx Nginx


安�bNginx�袢〉氖�Nginx-1.10.1.tar.gz

# tar xf Nginx-1.10.1.tar.gz

# cd Nginx-1.10.1


指定安装目�和�\行时用的属主和属组,�K�⒂��B�O控模�K等

# ./configure \

--prefix=/usr/local/Nginx \

--pid-path=/usr/local/Nginx/logs/Nginx.pid \

--lock-path=/var/lock/Nginx.lock \

--user=Nginx \

--group=Nginx \

--with-http_ssl_module \

--with-http_flv_module \

--with-http_stub_status_module \

--with-http_gzip_static_module \

--http-client-body-temp-path=/var/tmp/Nginx/client/ \

--http-proxy-temp-path=/var/tmp/Nginx/proxy/ \

--http-fastcgi-temp-path=/var/tmp/Nginx/fcgi/ \

--http-uwsgi-temp-path=/var/tmp/Nginx/uwsgi \

--http-scgi-temp-path=/var/tmp/Nginx/scgi \

--with-pcre


大致的配置结果

Configuration summary

+ using system PCRE library

+ using system OpenSSL library

+ md5: using OpenSSL library

+ sha1: using OpenSSL library

+ using system zlib library


Nginx path prefix: "/usr/local/Nginx"

Nginx binary file: "/usr/local/Nginx/sbin/Nginx"

Nginx modules path: "/usr/local/Nginx/modules"

Nginx configuration prefix: "/usr/local/Nginx/conf"

Nginx configuration file: "/usr/local/Nginx/conf/Nginx.conf"

Nginx pid file: "/var/run/Nginx/Nginx.pid"

Nginx error log file: "/usr/local/Nginx/logs/error.log"

Nginx http access log file: "/usr/local/Nginx/logs/access.log"

Nginx http client request body temporary files: "/var/tmp/Nginx/client/"

Nginx http proxy temporary files: "/var/tmp/Nginx/proxy/"

Nginx http fastcgi temporary files: "/var/tmp/Nginx/fcgi/"

Nginx http uwsgi temporary files: "/var/tmp/Nginx/uwsgi"

Nginx http scgi temporary files: "/var/tmp/Nginx/scgi"


上述配置完,就�M行��g安�b

#make && make install

#mkdir /var/tmp/Nginx/client/ -pv


等编译安装完成后在 /usr/local 下就会出现 Nginx 这个目录了,进入这个目录后发现目录非常简单。

它的配置文件存放在 conf 目录中,网页文件存放在 html 中,日志文件存放在 logs 中,

sbin 目录下只有一个可执行程序 "Nginx"


二、部署PHP�h境

a. FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口

b. Nginx是个轻量级的HTTP server,必须借助第三方的FastCGI处理器才可以对PHP进行解析

c. PHP-FPM是一个第三方的FastCGI进程管理器,它是作为PHP的一个补丁来开发的,在安装的时候也需要和PHP源码一起编译,

也就是说PHP-FPM被编译到PHP内核中,因此在处理性能方面更加优秀;同时它在处理高并发方面也比spawn-fcgi引擎好很多,

因此,推荐Nginx+PHP/PHP-FPM这个组合对PHP进行解析。


首先安�bPHP的一些依�包

gcc gcc-c++ libxml2 libxml2-devel autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel


然後解�合螺d好的tar包

# tar -xvzf PHP-5.6.5.tar.gz


�M入到解�横岬�PHP-5.6.5中

# cd PHP-5.6.5

# ./configure --prefix=/usr/local/PHP �Cenable-fpm �Cenable-mbstring �Cwith-MysqL=MysqLnd �Cwith-MysqLi=MysqLnd �Cwith-pdo-MysqL=MysqLnd

# make && make install


查看PHP版本

# PHP -v

PHP 5.6.5 (cli) (built: Jan 10 2017 03:53:13)

copyright (c) 1997-2014 The PHP Group

Zend Engine v2.6.0,copyright (c) 1998-2014 Zend Technologies


如果不行,�t直接在PHP的�绦形募�做����接到/usr/bin/PHP或者复制一份至/usr/bin/下面即可查看PHP版本啦


#ln -s /usr/local/PHP/bin/PHP /usr/bin/PHP

或者

#cp -raf /usr/local/PHP/bin/PHP /usr/bin/PHP


PHP的配置文件PHP.ini,复制一份安装目录下的PHP.ini-development这个配置文件模板到PHP的目录

# cp -raf PHP-5.6.5/PHP.ini-development /usr/local/PHP/lib/PHP.ini


当然,我们还需要配置一下PHP-fpm,在安装PHP的时候,已经为我们生成了一个配置模板了,在 /usr/local/PHP/etc/PHP-fpm.conf.default了,所以只要复制这个模板并改名为PHP-fpm.conf就可以了,进去把 daemonize改成yes,以后台服务的运行方式启动。然后捏,whereis PHP-fpm,

这个是个可执行文件,直接执行PHP-fpm就可以运行了,然后netstat -an| grep PHP-fpm,看到,果然9000号端口在监听啦

#cp -raf /usr/local/PHP/etc/PHP-fpm.conf.default /usr/local/PHP/etc/PHP-fpm.conf

# whereis PHP-fpm


配置与优化PHP-FPM

PHP的全局配置文件是PHP.ini,在上面的步骤中,已经将此文件复制到了/usr/local/PHP/lib/PHP.ini下。可以根据每个应用需求的不同,对PHP.ini进行相应的配置。

下面重点介绍PHP-FPM引擎的配置文件。

根据上面指定的安装路径,PHP-FPM的默认配置文件为/usr/local/PHP/etc/PHP-fpm.conf。

PHP-fpm.conf是一个XML格式的纯文本文件,其内容很容易看明白。这里重点介绍几个重要的配置标签:

标签listen_address是配置fastcgi进程监听的IP地址以及端口,默认是127.0.0.1:9000,端口可更改

<value name="listen_address">127.0.0.1:9000</value>

标签display_errors用来设置是否显示PHP错误信息,默认是0,不显示错误信息,设置为1可以显示PHP错误信息。

<value name="display_errors">0</value>

标签user和group用于设置运行FastCGI进程的用户和用户组。需要注意的是,这里指定的用户和用户组要和Nginx配置文件中指定的用户和用户组一致。

<value name="user">nobody</value>

<value name="group">nobody</value>

标签max_children用于设置FastCGI的进程数。根据官方建议,小于2GB内存的服务器,可以只开启64个进程,4GB以上内存的服务器可以开启200个进程。

<value name="max_children">5</value>

标签request_terminate_timeout用于设置FastCGI执行脚本的时间。默认是0s,也就是无限执行下去,可以根据情况对其进行修改。

<value name="request_terminate_timeout">0s</value>

标签rlimit_files用于设置PHP-FPM对打开文件描述符的限制,默认值为1024。这个标签的值必须和Linux内核打开文件数关联起来,例如要将此值设置为65535,

就必须在Linux命令行执行'ulimit -HSn 65536'。

<value name="rlimit_files">1024</value>

标签max_requests指明了每个children最多处理多少个请求后便会被关闭,默认的设置是500。

<value name="max_requests">500</value>

标签allowed_clients用于设置允许访问FastCGI进程解析器的IP地址。如果不在这里指定IP地址,Nginx转发过来的PHP解析请求将无法被接受。

<value name="allowed_clients">127.0.0.1</value>


管理FastCGI进程,在配置完PHP-fpm后,就可以启动FastCGI进程

/usr/local/PHP/sbin/PHP-fpm


FastCGI进程启动后,其监听的IP地址和端口也随即启动,可以通过ps和netstat查看相关信息


由于Nginx本身不会对PHP进行解析,因此要实现Nginx对PHP的支持,其实是将对PHP页面的请求交给fastCGI进程监听的IP地址及端口。

如果把PHP-fpm当做动态应用服务器,那么Nginx其实就是一个反向代理服务器。Nginx通过反向代理功能实现对PHP的解析,这就是Nginx实现PHP动态解析的原理


Nginx配置文件的路径为/usr/local/Nginx/conf/Nginx.conf。下面是在Nginx下支持PHP解析的一个虚拟主机配置实例

# vi /usr/local/Nginx/conf/Nginx.conf


fastcgi_param指令指定放置PHP动态程序的主目录,也就是$fastcgi_script_name前面指定的路径,这里是/usr/local/Nginx/html目录

fastcgi_params文件是FastCGI进程的一个参数配置文件,在安装Nginx后,会默认生成一个这样的文件,这里通过include指令将FastCGI参数配置文件包含了进来


在配置完成Nginx+FastCGI之后,为了保证Nginx下PHP环境的高速稳定运行,需要添加一些FastCGI优化指令。下面给出一个优化实例,

将下面代码添加到Nginx主配置文件中的HTTP层级

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;

# fastcgi_cache_path /usr/local/Nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;

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;

# fastcgi_cache TEST;

fastcgi_cache_valid 200 302 1h;

fastcgi_cache_valid 301 1d;

fastcgi_cache_valid any 1m;

}


下面是对上述代码的含义进行介绍。

第一行代码是为FastCGI缓存指定一个文件路径、目录结构等级、关键字区域存储时间和非活动删除时间。

fastcgi_connect_timeout指定连接到后端FastCGI的超时时间。

fastcgi_send_timeout指定向FastCGI传送请求的超时时间,这个值是已经完成两次握手后向FastCGI传送请求的超时时间。

fastcgi_read_timeout指定接收FastCGI应答的超时时间,这个值是已经完成两次握手后接收FastCGI应答的超时时间。

fastcgi_buffer_size用于指定读取FastCGI应答第一部分需要用多大的缓冲区,这个值表示将使用1个64KB的缓冲区读取应答的第一部分(应答头),可以设置为fastcgi_buffers选项指定的缓冲区大小。

fastcgi_buffers指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求。如果一个PHP脚本所产生的页面大小为256KB,那么会为其分配4个64KB的缓冲区来缓存;如果页面大小大于256KB,那么大于256KB的部分会缓存到fastcgi_temp指定的路径中,但是这并不是好方法,因为内存中的数据处理速度要快于硬盘。一般这个值应该为站点中PHP脚本所产生的页面大小的中间值,如果站点大部分脚本所产生的页面大小为256KB,那么可以把这个值设置为“16 16k”、“4 64k”等。

fastcgi_busy_buffers_size的默认值是fastcgi_buffers的两倍。

fastcgi_temp_file_write_size表示在写入缓存文件时使用多大的数据块,默认值是fastcgi_buffers的两倍。

fastcgi_cache表示开启FastCGI缓存并为其指定一个名称。开启缓存非常有用,可以有效降低cpu的负载,并且防止502错误的发生,但是开启缓存也会引起很多问题,要视具体情况而定。

fastcgi_cache_valid、fastcgi用来指定应答代码的缓存时间,实例中的值表示将200和302应答缓存一个小时,将301应答缓存1天,其他应答均缓存1分钟。


测试Nginx对PHP的解析功能


这里在/usr/local/Nginx/html目录下创建一个PHPinfo.PHP文件,内容如下:

<?PHP PHPinfo(); ?>

然后通过浏览器访问http://ip/index.html,默认会在浏览器显示“Welcome to Nginx!”表示Nginx正常运行。

接着在浏览器中访问http://ip/PHPinfo.PHP,如果PHP能够正常解析,会出现PHP安装配置以及功能列表统计信息。


三.yum 安装Mariadb数据库

删除全部MysqL/MariaDB相关的rpm包

MysqL 已经不再包含在 CentOS 7 的源中,而改用了 MariaDB;

1、使用rpm -qa | grep mariadb搜索 MariaDB 现有的包:

如果存在,使用rpm -e --nodeps mariadb-*将全部删除


2、使用rpm -qa | grep MysqL搜索 MysqL现有的包:

如果存在,使用yum remove MysqL MysqL-server MysqL-libs compat-MysqL全部删除;


我比较推荐使用系统自带的mariadb,所以直接yum安装比较方便

3、yum安装mariadb

# yum install -y mariadb mariadb-server

注:mariadb为数据库客户端,mariadb-server是数据库服务器端


4、命令启动MariaDB 服务

# systemctl start mariadb


5、查看mariadb进程服务是否在跑

# ps -ef | grep mariadb

root 10131 10095 0 19:24 pts/2 00:00:00 grep --color=auto mariadb

MysqL 10197 10009 0 Jan19 ? 15:56:01 /usr/sbin/MysqLd --basedir=/usr --datadir=/var/lib/MysqL --plugin-dir=/usr/lib64/MysqL/plugin --user=MysqL --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/lib/MysqL/zgz.pid --socket=/var/lib/MysqL/MysqL.sock


6、查看������B

#systemctl status mariadb


7、接着运行 MysqL_secure_installation初始化配置MariaDB:

#MysqL_secure_installation

在这个阶段进入时root初始密码为空,所以回车即可。我个人觉得可以选择在这个时候修改设定数据库root密码,然后接下来的设定中,除了disallow root login remotely 、Remove test database and accesss to it 可以��n,其他都是y


8、登录 MariaDB 并创建相应的数据库用户与数据库

(1)使用MysqL -uroot -p登录,回车之后会提示输入密码。

(2)创建新用户,CREATE USER 'git'@'localhost' IDENTIFIED BY '$password';其中$password填写自己设置的密码。当然后面也可以修改;

(3)设置存储引擎

mariadb[none]> set storage_engine=INNODB;

(4)创建数据库

mariadb[none]>create database database_name character set utf8;

(5)设置用户权限

grant all privileges on *.* to 'root'@'%' identified by '$password' with option;

#上述可以定义为:root用户可以从任何机器上远程连接数据库里的所有内容且具备最高权限,并且具有授予权他人远程连接的权限。


经过上述操作步骤,lnmp环境就算是基本搭建完毕。后面只需要把应用代码放进Nginx的html内,并将应用与数据库连接的配置文件设定完毕即可。

CentOS7.2 上 Nginx PHP Mariadb 环境搭建的更多相关文章

  1. HTML5 Web缓存和运用程序缓存(cookie,session)

    这篇文章主要介绍了HTML5 Web缓存和运用程序缓存(cookie,session),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. 详解前端HTML5几种存储方式的总结

    本篇文章主要介绍了前端HTML5几种存储方式的总结 ,主要包括本地存储localstorage,本地存储sessionstorage,离线缓存(application cache),Web SQL,IndexedDB。有兴趣的可以了解一下。

  3. ios – 200在xcode 7中生成DSMM警告

    解决方法我有同样的问题.Facebook表示他们已经意识到这一点并且不是高优先级,因为它不会影响应用程序.我回退到4.7.1警告问题不再存在.我不认为它会被拒绝但不能确定.

  4. xamarin.ios – Facebook iOS SDK:应用程序在启动时找不到“找不到符号:_ACFacebookAppIdKey.”仅在iOS 5中崩溃

    解决方法这是一个已修复的knownbug.目前唯一已知的解决方法是使用较旧版本的FacebookSDK.

  5. osx – 无法创建目录/ var / teamsserver

    OpenSSH_6.2p2,OSSLShim0.9.8r8Dec2011debug1:Readingconfigurationdata/etc/ssh_configdebug1:/etc/ssh_configline20:Applyingoptionsfor*debug1:Connectingto1.2.3.4[1.2.3.4]portPORT.debug1:Connectionestablished.Couldnotcreatedirectory‘/var/teamsserver/.ssh’.debug

  6. ios – 如何在Xcode 4.5中完成代码签名

    解决方法事实证明,从AppStore升级XCode并不会自动升级所有内容.转到首选项/下载,并确保安装最新的命令行工具.

  7. xcode7 – 谁在创建文件“/private/var/tmp/Untitled-*.uicatalog”?

    我正在调查为什么TeamCity构建代理程序用完了磁盘,并且在/private/var/tmp中找到了超过11,000个文件,它们都以Untitled-.uicatalog行命名.每个文件至少0.6MB.总磁盘占用空间约为4GB.这些文件可以追溯到几个月,所以他们能够重新启动.谁在创造他们?Xcode在编译至少有一个图像的xcassets目录时创建这些目录.我可以删除它们吗?

  8. ios – 由于无效配置文件,Testflight错误无法安装WWDR错误

    我已经通过iTunes连接上传了IOS8应用程序,有安装测试用户,并邀请他们测试我的应用程序.这些用户已经从AppStore安装了TestFlight,并已接受条款和条件.TestFlight应用程序使用安装按钮显示我的应用程序.当用户单击安装并显示错误消息时立即显示“Testflight错误无法安装由于非活动配置文件的WWDR错误”我没有发现任何搜索字符串和一堆子串(包括在Testflight搜

  9. ios – 绕过http响应头缓存控制:如何设置缓存过期?

    来自服务器的所有http响应都带有标题,通知我们的应用程序不缓存响应:因此,如果您使用默认缓存策略“NSURLRequestUseProtocolCachePolicy”进行NSUrlRequests,则应用程序将始终从服务器加载数据.然而,我们需要缓存响应,明显的解决办法是将这些头设置为一段时间,例如(在后端),设置为10秒.但是我对解决方案感兴趣,如何绕过此策略并缓存每个请求10秒.为此,您需

  10. ios – 如何设置NSURLRequest缓存过期?

    我使用AFNetworking,需要在一个响应中缓存数据几分钟.所以我在应用程序委托中设置NSUrlCache,然后在我的请求中设置它:如何设置到期日期:如果数据在超过n分钟前加载,请从服务器询问响应,而不是从磁盘?

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部