网站整体设计流程,公司必备的几个部门,分销商城网站开发,在线传媒有限公司在前面的一篇博客中#xff0c;我已经介绍过#xff0c;如何通过源码编译安装LAMP#xff0c;见教你源码编译制作LAMP详细过程 #xff0c;这里就介绍下如何编译安装LNMP#xff0c;以及如何在LNMP中添加ssl认证。LNMP#xff0c;也叫做LEMP。L#xff0c;即linux操作系… 在前面的一篇博客中我已经介绍过如何通过源码编译安装LAMP见教你源码编译制作LAMP详细过程 这里就介绍下如何编译安装LNMP以及如何在LNMP中添加ssl认证。LNMP也叫做LEMP。L即linux操作系统N即nginx因其读作engine x所以也成为LEMPM即MySQLP即Php等脚本语言。说白了LNMP也是个组合。只不过将LAMP中的Apache换成了Nginx而已但别看仅仅是名字的替换这个替换可是有着巨大的意义。他们实现的功能虽说差异不大但它们背后的实现机制还是有很多区别的。因在上篇博客中已经介绍过了其他几个这里就主要介绍nginx了。那我们一块来认识下nginx到底是何方神圣吧。Nginx发音同engine x是一款由俄罗斯程序员Igor Sysoev所开发轻量级的网页服务器、反向代理服务器以及电子邮件IMAP/POP3代理服务器。起初是供俄国大型的门户网站及搜索引擎Rambler俄语Рамблер使用。此软件在BSD-like协议下发行可以在UNIX、GNU/Linux、BSD、Mac OS X、Solaris以及Microsoft Windows等操作系统中运行。因它的高性能、稳定性、丰富的特性、简单方便的配置和低系统资源的消耗而闻名。因其占有内存少并发能力强等众多优点广受各大门户网站的喜爱。中国大陆使用nginx网站用户有新浪、网易、腾讯等。下图是netcraft网站统计的在所有领域的顶级服务器市场份额的相关信息通过该图我们可以对nginx有个初步的了解。从上图可以看到apache因其成熟的技术、强大的功能及开源特性依然占据着服务器市场的半壁江山但其市场份额却很不稳定而nginx从其出现开始一直保持其增长趋势到目前为止其市场份额已达12.18%。预计在未来几年由于nginx的众多优点nginx的市场份额还会继续增长。那究竟是什么原因让nginx从其出现就保持强劲增长呢要回答清楚这个问题且听我一一分解。首先先看一下nginx都有哪些特性只有知道其特性才更容易理解。Nginx 是一个很强大的高性能Web和反向代理服务器它具有很多非常优越的特性在高连接并发的情况下Nginx是Apache服务器不错的替代品Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应。Nginx作为负载均衡服务器Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务也可以支持作为 HTTP代理服务器对外进行服务。Nginx采用C进行编写不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。作为邮件代理服务器Nginx 同时也是一个非常优秀的邮件代理服务器最早开发这个产品的目的之一也是作为邮件代理服务器。Nginx 是一个安装非常的简单配置文件非常简洁还能够支持perl语法Bugs非常少的服务器Nginx 启动特别容易并且几乎可以做到7*24不间断运行即使运行数个月也不需要重新启动。你还可以再不间断服务的情况下进行软件版本的升级。nginx可以做网页服务器反向代理服务器同时还可以做电子邮件代理服务器这里我们主要介绍其网页服务器其他服务器特性这里暂不介绍。单进程、多进程及线程在多请求到来时的比较单进程仅接受一个请求其他请求阻塞直到完成才响应下一个请求多进程每个进程响应一个请求 进程量大进程切换次数过多 每个进程的地址空间是独立的很多空间是重复的数据所以内存使用效率较低线程每个线程响应一个请求但因linux对线程支持不够故 线程依然需要切换切换较之进程属于轻量级切换 同一个进程的线程可以共享进程的诸多资源比如打开的文件 对内存的需求较之进程略有下降 快速切换时会带来线程抖动传统上基于进程或线程模型架构的web服务通过每进程或每线程处理并发连接请求这势必会在网络和I/O操作时产生阻塞其另一个必然结果则是对内存或CPU的利用率低下。生成一个新的进程/线程需要事先备好其运行时环境这包括为其分配堆内存和栈内存以及为其创建新的执行上下文等。这些操作都需要占用CPU而且过多的进程/线程还会带来线程抖动或频繁的上下文切换系统性能也会由此进一步下降。同时由于传统的web服务器是基于进程或线程模型架构的在处理C10K(当我们的并发连接达到10K时会出现众多问题由此称为C10K)问题时显得很吃力不能很好地处理高并发的请求。而因nginx工作在AIO(异步I/O)模型下且支持内存映射、事件驱动因此nginx很好的解决了这个问题。在设计的最初阶段nginx的主要着眼点就是其高性能以及对物理计算资源的高密度利用因此其采用了不同的架构模型。受启发于多种操作系统设计中基于“事件”的高级处理机制nginx采用了模块化、事件驱动、异步、单线程及非阻塞的架构并大量采用了多路复用及事件通知机制。在nginx中连接请求由为数不多的几个仅包含一个线程的进程worker以高效的回环(run-loop)机制进行处理而每个worker可以并行处理数千个的并发连接及请求。Nginx会按需同时运行多个进程一个主进程(master)和几个工作进程(worker)配置了缓存时还会有缓存加载器进程(cache loader)和缓存管理器进程(cache manager)等。所有进程均是仅含有一个线程并主要通过“共享内存”的机制实现进程间通信。主进程以root用户身份运行而worker、cache loader和cache manager均应以非特权用户身份运行。主进程主要完成如下工作1. 读取并验正配置信息2. 创建、绑定及关闭套接字3. 启动、终止及维护worker进程的个数4. 无须中止服务而重新配置工作特性5. 控制非中断式程序升级启用新的二进制程序并在需要时回滚至老版本6. 重新打开日志文件实现日志滚动7. 编译嵌入式perl脚本worker进程主要完成的任务包括1. 接收、传入并处理来自客户端的连接2. 提供反向代理及过滤功能3. nginx任何能完成的其它任务cache loader进程主要完成的任务包括1. 检查缓存存储中的缓存对象2. 使用缓存元数据建立内存数据库cache manager进程的主要任务1. 缓存的失效及过期检验Nginx的配置有着几个不同的上下文main、http、server、upstream和location(还有实现邮件服务反向代理的mail)。配置语法的格式和定义方式遵循所谓的C风格因此支持嵌套还有着逻辑清晰并易于创建、阅读和维护等优势。Nginx的代码是由一个核心和一系列的模块组成, 核心主要用于提供Web Server的基本功能以及Web和Mail反向代理的功能还用于启用网络协议创建必要的运行时环境以及确保不同的模块之间平滑地进行交互。不过大多跟协议相关的功能和某应用特有的功能都是由nginx的模块实现的。这些功能模块大致可以分为事件模块、阶段性处理器、输出过滤器、变量处理器、协议、upstream和负载均衡几个类别这些共同组成了nginx的http功能。事件模块主要用于提供OS独立的(不同操作系统的事件机制有所不同)事件通知机制如kqueue或epoll等。协议模块则负责实现nginx通过http、tls/ssl、smtp、pop3以及imap与对应的客户端建立会话。在nginx内部进程间的通信是通过模块的pipeline或chain实现的换句话说每一个功能或操作都由一个模块来实现。例如压缩、通过FastCGI或uwsgi协议与upstream服务器通信以及与memcached建立会话等。上边介绍了这么多关于nginx的知识不知你是否了解了nginx。下面我们就一块来安装LNMP吧。实验坏境系统rhel6.4系统内核linux-2.6.32-358.el6.i686平台在VMware虚拟机上实现。虚拟机IP172.16.32.50所需要的软件包nginx-1.4.1.tar.gzmysql-5.6.10-linux-glibc2.5-i686.tar.gzphp-5.4.13.tar.bz2xcache-3.0.1.tar.bz2(提供php加速)扩展rpm包libev-4.03-3.el6.i686.rpmlibmcrypt-devel-2.5.8-9.el6.i686.rpmmhash-devel-0.9.9.9-3.el6.i686.rpmlibev-devel-4.03-3.el6.i686.rpmmcrypt-2.6.8-10.el6.i686.rpmlibmcrypt-2.5.8-9.el6.i686.rpm mhash-0.9.9.9-3.el6.i686.rpm解决依赖关系安装开发组Development Tools和 Development Libraries安装pcre-develbzip2-devellibcurl-devellibxml2-developenssl-devel在开始我们的安装前请先同步时间。否则因你虚拟机的时间不是现在的时间可能是过去的某个时间因此当你安装某个软件包时你会发现该软件包来自未来。service ntpd stop ntpdate 172.16.0.1 #同步时间该IP是本地的默认网关可与外部网络通信这里是与其同步时间读者可自行设定crontab -e #为了避免以后还要同步时间这里添加了任务计划没3分钟同步一次将同步后的结果都送到/dev/null中否则会每3分钟收到一封信*/3 * * * * /sbin/ntpdate 172.16.0.1 /dev/null 接下来下载所需要的各软件包并配置好yum源。各软件包的可在epel网站下载这里仅给出链接不再给出各个附件请各位自行下载。这里我们将下载好的各软件包放在了/root目录下。在/root目录下除了上边提到的软件包之外不要有其他rpm包在当前目录下执行如下命令yum grouplist #查看安装的组假如你没有安装Development Tools和 Server Platform Development请执行下面的命令
yum -y groupinstall Development Tools Server Platform Development #安装开发工具和服务器端开发平台
yum -y --nogpgcheck localinstall *rpm #安装本地当前目录下所有的rpm包
yum -y pcre-devel bzip2-devel libcurl-devel libxml2-devel openssl-devel #确保以配置好yum源然后安装所依赖的各软件包否则后边编译安装时会报错
yum -y groupinstall Compatibility libraries #这个是兼容库兼容一些老版本的库如果需要可以安装不需要可不安装这里没有安装该兼容库准备工作已经完毕现在开始编译安装我们的各个软件。安装nginxgroupadd -r nginx #创建nginx系统组
useradd -r -g nginx nginx #添加用户nginx实现以nginx用户身份运行nginx服务进程
tar xf nginx-1.4.1.tar.gz #解压该文件
cd nginx-1.4.1
./configure \ #在相应目录下执行该命令其中\表示续行符--prefix/usr \ #指定安装文件目录安装完毕后会在此目录下生成一个html目录--sbin-path/usr/sbin/nginx \ #nginx的可执行程序路径--conf-path/etc/nginx/nginx.conf \ #指定配置文件所在路径--error-log-path/var/log/nginx/error.log \ #错误日志所在路径--http-log-path/var/log/nginx/access.log \ #访问日志所在路径--pid-path/var/run/nginx/nginx.pid \ #pid文件所在路径--lock-path/var/lock/nginx.lock \ #锁文件所在路径--usernginx \ #指定运行nginx服务的用户知道为何创建nginx用户了吧--groupnginx \ #指定运行nginx服务的组--with-http_ssl_module \ #启用ssl模块--with-http_flv_module \ #启用flv模块--with-http_stub_status_module \ #启用stub状态模块--with-http_gzip_static_module \ #启用gzip静态模块--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/ \ #指定fastcgi临时文件路径--http-uwsgi-temp-path/var/tmp/nginx/uwsgi \ #指定uwsgi临时文件路径--http-scgi-temp-path/var/tmp/nginx/scgi \ #指定scgi临时文件路径--with-pcre \ #启用pcre--with-file-aio #启用文件aio功能
如果想了解更多选项的意义可在nginx-1.4.1目录下执行./configure --help命令查看。这里不再过多的介绍。
make make install
安装完毕后为我们的nginx提供SysV风格的服务脚本
vim /etc/init.d/nginx #编辑该文件
#!/bin/sh #这里是/bin/sh不是/bin/bash千万不要写错了
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /etc/nginx/nginx.conf #nginx配置文件
# config: /etc/sysconfig/nginx #服务脚本的配置文件
# pidfile: /var/run/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions #读取系统自带的函数
# Source networking configuration.
. /etc/sysconfig/network #读取网络配置
# Check that networking is up.
[ $NETWORKING no ] exit 0 #判断时候启用网络功能如果没有返回0
nginx/usr/sbin/nginx
prog$(basename $nginx)
NGINX_CONF_FILE/etc/nginx/nginx.conf
[ -f /etc/sysconfig/nginx ] . /etc/sysconfig/nginx #如果存在服务脚本的配置文件则读取该文件
lockfile/var/lock/subsys/nginx #设定锁文件
make_dirs() { #定义函数创建相关目录# make required directoriesusernginx -V 21 | grep configure arguments: | sed s/[^*]*--user\([^ ]*\).*/\1/g -options$nginx -V 21 | grep configure arguments:for opt in $options; doif [ echo $opt | grep .*-temp-path ]; thenvalueecho $opt | cut -d -f 2if [ ! -d $value ]; then# echo creating $valuemkdir -p $value chown -R $user $valuefifidone
}
start() {[ -x $nginx ] || exit 5[ -f $NGINX_CONF_FILE ] || exit 6make_dirsecho -n $Starting $prog: daemon $nginx -c $NGINX_CONF_FILEretval$?echo[ $retval -eq 0 ] touch $lockfilereturn $retval
}
stop() {echo -n $Stopping $prog: killproc $prog -QUITretval$?echo[ $retval -eq 0 ] rm -f $lockfilereturn $retval
}
restart() {configtest || return $?stopsleep 1start
}
reload() {configtest || return $?echo -n $Reloading $prog: killproc $nginx -HUPRETVAL$?echo
}
force_reload() {restart
}
configtest() {$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {status $prog
}
rh_status_q() {rh_status /dev/null 21
}
case $1 instart)rh_status_q exit 0$1;;stop)rh_status_q || exit 0$1;;restart|configtest)$1;;reload)rh_status_q || exit 7$1;;force-reload)force_reload;;status)rh_status;;condrestart|try-restart)rh_status_q || exit 0;;*)echo $Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}exit 2
esac
保存退出。
chmod x /etc/init.d/nginx #为该脚本赋予执行权限
chkconfig --add nginx #将nginx添加至服务列表
chkconfig nginx on #让nginx开机自启动
service nginx start #启动nginx服务进行测试在物理机上测试一下吧。可能有些人在启动nginx服务即执行service nginx start命令时出现如下错误出现此问题是因为你本地的80端口已经被占用了这时候你可使用netstat -tnlp命令查看下本地是否已经启用了80端口一般来说都是本地自动启动了httpd服务导致80端口被占用造成的错误。因为httpd和nginx使用的是同一个端口80。查看及解决办法如下图所示然后在测试就可以出现欢迎界面了。你也可以为其提供一个主机面不显示自带的欢迎界面。到此我们的nginx安装完毕。先一块来看下nginx的配置文件的信息这里我们只贴出待会我们要用到的信息介绍有些是默认注释掉的我们也一块介绍下。/etc/nginx/nginx.conf文件部分信息
worker_processes 1; #工作进程个数默认为1可自行修改但要看你服务器的性能如何
#error_log logs/error.log;
#error_log logs/error.log notice; #定义错误日志我们在编译安装是已指定过因此这里默认是注释掉的
#error_log logs/error.log info;
#pid logs/nginx.pid; #pid文件编译安装时已指定过这里默认为注释掉了
events {worker_connections 1024; #事件驱动模型中工作进程单个最大连接数系统最大连接总数为worker_processes*worker_connections
}
http { #http服务段include mime.types; #支持mime类型已支持非文本格式default_type application/octet-stream;#log_format main $remote_addr - $remote_user [$time_local] $request # $status $body_bytes_sent $http_referer # $http_user_agent $http_x_forwarded_for;#access_log logs/access.log main;sendfile on;#keepalive_timeout 0;keepalive_timeout 65; #持续连接超时时长#gzip on;server { #服务段设置listen 80; #监听端口server_name localhost; #服务名#charset koi8-r;#access_log logs/host.access.log main;location / { #相当于httpd服务配置文件的Directory /段root html; #相当于httpd服务配置文件的DocumentRoot配置段用来定义web文档所在目录是相对路径相对于/usr/html而言index index.html index.htm; #定义web文档类型}#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$ { #php段默认是注释掉的待会我们安装完php后就需要启用该段# root html;# fastcgi_pass 127.0.0.1:9000; #监听的地址及端口号# fastcgi_index index.php; #指定类型为php# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params; #其他相关配置在该文件中设定#}}# another virtual host using mix of IP-, name-, and port-based configuration##server { #虚拟主机配置可使用基于虚拟主机访问这里我们不使用基于虚拟主机访问仅使用基于IP的访问默认是注释掉的假如你想使用基于虚拟主机的访问可启用此段# listen 8000;# listen somename:8080;# server_name somename alias another.alias;# location / {# root html;# index index.html index.htm;# }#}# HTTPS server##server { #基于https的服务默认为注释掉的待会使用CA时就需要启用该段了# listen 443; #监听的端口# server_name localhost;# ssl on; #是否启用ssl认证# ssl_certificate cert.pem; #ssl认证的证书所在文件# ssl_certificate_key cert.key; #ssl认证的密钥文件# ssl_session_timeout 5m; #ssl会话超时时长# ssl_protocols SSLv2 SSLv3 TLSv1; #ssl支持的协议# ssl_ciphers HIGH:!aNULL:!MD5; #ssl认证使用的加密算法# ssl_prefer_server_ciphers on; #启动服务器ssl认证# location / { # root html;# index index.html index.htm;# }#}
}location段各字符含义备注location [|~|~*|^~] uri {}location uri {}; 对当前路径及子路径下的所有对象都生效location uri {} 精确匹配指定的路径不包括子路径因此只对当前资源生效location ~ uri {} location ~* uri {} 模式匹配uri此处的uri可使用正则表达式与~的区别是~区分字符大小写~*不区分字符大小写location ^~ uri {}; 不使用正则表达式优先级由高到低 ^~ ~*|~ 空(当省略|~|~*|^~时即为空)/usr/html/50x.html文件显示内容如下图配置文件介绍完毕我们先去自己添加个个人主页测试下再说吧。cd /etc/nginx/ #进入该目录
cp nginx.conf nginx.conf.bak #先做个备份到时候修改完了还可以恢复过来
vim nginx.conf #编辑该文件location / { #修改该段root /web/html; #修改默认设置然后指定web文档根目录index index.html index.htm;}
mkdir /web/html #创建该目录作为我们的根目录
vim /web/html/index.html #编辑该文件添加如下信息
h1http://lq2419.blog.51cto.com//h1保存退出。然后重新载入nginx服务。说到这里不管前面有没有提到介绍一个nginx很重要的特性。就是nginx服务在线时可实现不需重启服务即可实现修改其配置且新配置会在下次响应请求时自动启用。假如现在nginx正在响应请求但我们对nginx的配置进行了修改则正响应的请求依然使用原来的配置。当响应完毕后再有新的请求到来时使用新的配置进行响应。service nginx reload #重新载入nginx服务下图是显示效果到此nginx已经介绍完毕。等安装完毕所有的软件再来介绍其他功能。安装mysql在前面的博客中我已经介绍过如何安装mysql了这里本不想在重复介绍如何编译安装mysql了但由于安装环境不同加上一些人呢懒得去打开另一个网页这里就在啰嗦一遍重新介绍下如何编译安装mysql同时将自己在创建逻辑卷及安装过程中遇到的问题及解决办法一并分享一下。假如你在创建逻辑卷时没有遇到什么问题就当我在说废话下面两个问题可以忽略。问题一先分享一下我在创建逻辑卷时遇到的一个问题吧。虚拟机是通过克隆生成的一个虚拟机原虚拟机安装的rhel6.4的32位系统添加了两块磁盘一个SCSI口的磁盘大小为120G一个IDE口磁盘(后来又添加的)大小为20G内存大小为256M。由于是第一次在rhel6.4的32位系统上安装mysql-5.6.10版本我们知道为了数据的安全及因数据增加让磁盘空间具有可扩展性需创建逻辑卷来保存我们的数据。本人在创建逻辑卷时在命令行界面输入的fdisk /dev/sda查看磁盘分区情况后没发现什么问题显示的大小也是128G多然后执行的分区、修改磁盘类型等一步步操作完成后在还没保存退出时使用p选项查看磁盘分区情况显示的是/dev/sda2一切正常保存退出。在执行partprobe /dev/sda系统提示错误说磁盘有问题需重启。检查各种地方都没有发现错误后没有办法只好重启。就reboot了但当我重启后使用fdisk -l命令发现我刚创建的磁盘分区/dev/sda2现在居然变成了/dev/sdb2很是郁闷。好吧我认了重启过了也就没必要执行partprobe /dev/sdb命令了。执行fdisk -l查看一切正常后创建物理卷、卷组、逻辑卷然后一切才算正常。所以总结出来假如在分区过程过遇到类型提示你必须重启的问题那就果断重启吧。不要浪费我们宝贵的时间了。IT人伤不起啊。问题二这个是同学遇到的问题。暂时还没有解决对于为何会出现此问题仅仅是猜测。其实这个问题不应该在这里就提应该更早些就分享出来。发现这个问题也是在准备去创建逻辑卷时出现的。先说下问题时什么吧。我与同学用的是同一个rhel6.4的引导盘安装的镜像文件也是同一个唯一不同的是我创建了两个磁盘而同学就创建了一个120G的SCSI磁盘没有要IDE磁盘。在rhel6.4上执行fdisk -l命令让人不爽的是系统上所有磁盘分区包括创建的所有逻辑卷都会显示出来系统自动创建的逻辑卷忒多显示信息太多让人看得眼花缭乱。他在执行fdisk -l命令查看磁盘分区情况时还是给个图片吧结合我们两个的虚拟机猜测可能是因为安装该系统就需要两个磁盘而同学正好就按了一个磁盘造成的缘故目前此问题还没有解决。以下是kickstart里与此相关的内容不知是否与此有关贴出来供高手参考还请高手指点zerombr yesclearpart --allpart /boot --fstypeext4 --size200part pv.008 --size61440volgroup vg0 --pesize8192 pv.008logvol / --fstypeext4 --nameroot --vgnamevg0 --size20480logvol swap --nameswap --vgnamevg0 --size2048logvol /usr --fstypeext4 --nameusr --vgnamevg0 --size10240logvol /var --fstypeext4 --namevar --vgnamevg0 --size20480废话不多说继续我们上边的安装吧。先创建我们的逻辑卷。本地是磁盘分区/dev/sdb2所以直接创建物理卷、卷组、逻辑卷。pvcreate /dev/sdb2 #创建物理卷
vgcreate myvg /dev/sdb2 #创建卷组卷组名为myvg
lvcreate -n mydata -L 10G myvg #在卷组上创建逻辑卷大小为10G卷标为mydata
lvs #查看创建的逻辑卷信息
mke2fs -j /dev/myvg/mydata #格式化该逻辑卷
mkdir /mydata #创建该目录用于挂载我们的逻辑卷
vim /etc/fstab #编辑该文件添加如下该行信息将我们的创建的逻辑卷挂载至/mydata目录下
/dev/myvg/mydata /mydata ext3 defaults 0 0
mount -a #挂载所有磁盘分区
然后创建mysql用户mysql组。
groupadd -r mysql #创建mysql组
useradd -r -g mysql mysql #创建mysql系统用户
mkdir /mydata/data #创建该目录用于存放我们mysql 的数据文件
chown -R mysql.mysql /mydata/data #修改该文件及子文件为mysql属主属组方便mysql写入数据
tar xf mysql-5.6.10-linux-glibc2.5-i686.tar.gz -C /usr/local/ #解压该文件到指定目录确保当前处于mysql压缩文件所在目录
ln -sv mysql-5.6.10-linux-glibc2.5-i686 mysql #创建mysql-5.6.10-linux-glibc2.5-i686到mysql的链接
cd /usr/local/mysql #进入该目录
scripts/mysql_install_db --usermysql --datadir/mydata/data #--user指定我们的mysql服务器创建的文件及目录以哪个用户运行--datadir指定我们的数据文件所在目录这里mysql不需要执行./configure命令
完成后在当前目录下会生成一个my.cnf的文件这就是我们的配置文件直接编辑。
vim my.cnf
datadir /mydata/data #修改我们的数据文件存放位置
socket /tmp/mysql.sock #添加套接字文件所在路径
innodb_file_per_tableON #启用每表一个表空间
保存退出。同样为我们的mysql服务提供服务脚本。这里我们使用系统自带的我们不需修改即可使用。
cp support-files/mysql.server /etc/rc.d/init.d/mysqld #将该目录下的脚本拷贝到指定目录下并重命名
vim /etc/profile.d/mysql #编辑该文件添加环境变量
export PATH$PATH:/usr/local/mysql/bin #添加环境变量让系统直接使用mysql的命令
同样将该服务脚本添加到服务列表。
chkconfig --add mysql #添加该服务脚本至服务列表
chkconfig mysql on #设置开机启动默认级别为2345
service mysql start #开启mysql服务
netstat -tunlp #查看我们的mysql服务端口是否已开启默认mysql监听在3306端口
现在为我们的mysql创建帮助手册并添加其开发组件至系统。
在我们的mysql目录下有个man目录其下就是mysql的帮助手册了。
vim /etc/man.config #编辑该文件添加如下一行信息
MANPATH /usr/local/mysql/man
ln -sv /usr/local/mysql/include /usr/include/mysql #创建符号链接输出mysql的头文件至系统头文件路径
echo /usr/local/mysql/lib /etc/ld.so.conf.d/mysql.conf #添加该行信息输出mysql的库文件给系统库查找路径
ldconfig #让系统重新载入系统库
进入mysql测试下。
mysql -uroot -p #通过以root身份进入mysql下图为测试效果到此mysql安装完毕。安装php在准备阶段我们已经安装过libmcryptlibmcrypt-develmhashmhash-develmcryptlibevlibev-devel软件包现在我们只需解压php编译安装即可。tar xf php-5.4.13.tar.bz2
cd php-5.4.13
./configure \
--prefix/usr/local/php \ #安装文件所在目录
--with-mysql/usr/local/mysql \ #mysql文件所在目录
--with-openssl \ #启用openssl认证功能
--enable-fpm \ #支持fpm
--enable-sockets \
--enable-sysvshm \
--with-mysqli/usr/local/mysql/bin/mysql_config \
--enable-mbstring \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib-dir \
--with-libxml-dir/usr \
--enable-xml \
--with-mhash \ #启用mhash扩展
--with-mcrypt \ #启用mcrypt扩展
--with-config-file-path/etc \
--with-config-file-scan-dir/etc/php.d \
--with-bz2 --with-curl
make make install
完成后为php提供配置文件。
cp php.ini-production /etc/php.ini
为php-fpm提供Sysv init脚本并将其添加至服务列表
cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
chmod x /etc/rc.d/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on
为php-fpm提供配置文件
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
编辑php-fpm的配置文件修改如下内容
vim /usr/local/php/etc/php-fpm.conf
pm.max_children 50
pm.start_servers 5
pm.min_spare_servers 2
pm.max_spare_servers 8
pid /usr/local/php/var/run/php-fpm.pid
配置完成后启动php-fpm服务。
service php-fpm start
ps aux | grep php-fpm #查看该进程显示如下
root 4132 0.0 1.1 104036 2984 ? Ss May18 0:03 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
nobody 4133 0.0 1.9 104564 4916 ? S May18 0:00 php-fpm: pool www
nobody 4134 0.0 2.1 104564 5260 ? S May18 0:00 php-fpm: pool www
nobody 4135 0.0 1.9 104564 4948 ? S May18 0:00 php-fpm: pool www
nobody 4136 0.0 1.9 104564 4960 ? S May18 0:00 php-fpm: pool www
nobody 4137 0.0 1.9 104564 4948 ? S May18 0:00 php-fpm: pool www
php安装完毕。现在去修改nginx配置文件整合nginx和php。
vim /etc/nginx/nginx.conf #编辑该文件启用如下选项上边已经介绍个各选项含义这里直接修改location ~ \.php$ {root /web/html;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;include fastcgi_params;}location / {root /web/html;index index.php index.html index.htm; #添加index.php}
vim /etc/nginx/fastcgi_params #编辑该文件删除里边所有信息添加如下信息
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;
修改完毕后保存退出。重新装载nginx服务。
service nginx reload
修改我们刚才建的主界面添加几行信息
vim /web/html/index.html
h1http://lq2419.blog.51cto.com//h1
?php
phpinfo(); #添加php相关的信息
?
mv /web/html/index.html /web/html/index.php添加完成现在去我们的物理机上测试下看下效果。一切OK搞定。现在我们去安装xcache加速。安装xcachetar xf xcache-3.0.1.tar.bz2
cd xcache-3.0.1/usr/local/php/bin/phpize
./configure --enable-xcache --with-php-config/usr/local/php/bin/php-config
make make install
现在去整合php和xcache。
mkdir /etc/php.d
cp xcache.ini /etc/php.d
vim /etc/php.d/xcache.ini #编辑该文件添加如下一行信息如果php.ini文件中有多条zend_extension指令行要确保此新增的行排在第一位
extension /usr/local/php/lib/php/extensions/no-debug-zts-20100525/xcache.so
启用php-fpm服务
service php-fpm restart在物理机上在测试下。xcache添加完毕。到此LNMP制作完毕就是那么简单。你成功了么SSL认证貌似童话故事到现在了还差个人物嘞。好吧现在我们去添加CA认证。首先生成自签证书。在生成自签证书前为了我们待会方便先去修改配置文件vim /etc/pki/tls/openssl.conf #编辑该文件修改如下内容
[ req_distinguished_name ]
countryName_default CN
stateOrProvinceName_default Henan
localityName_default Zhengzhou
0.organizationName_default MageEdu
organizationalUnitName_default Tech
cd /etc/pki/CA
(umask 077;openssl genrsa -out private/cakey.pem 2048)
openssl req -new -x509 -key private/cakey.pem -out cacert.pem #有x509表示生成自签证书Country Name (2 letter code) [CN]:State or Province Name (full name) [Henan]:Locality Name (eg, city) [Zhengzhou]:Organization Name (eg, company) [MageEdu]:Organizational Unit Name (eg, section) [Tech]:Common Name (eg, your name or your servers hostname) []:lq2419.langdu.comEmail Address []:lq2419langdu.com
touch index.txt serial
echo 01 serial
mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
(umask 077;openssl genrsa -out nginx.key 1024)
openssl req -new -key nginx.key -out nginx.csr #没有x509表示生成证书请求Country Name (2 letter code) [CN]:State or Province Name (full name) [Henan]:Locality Name (eg, city) [Zhengzhou]:Organization Name (eg, company) [MageEdu]:Organizational Unit Name (eg, section) [Tech]:Common Name (eg, your name or your servers hostname) []:www.langdu.comEmail Address []:wwwmagedu.comPlease enter the following extra attributesto be sent with your certificate requestA challenge password []:An optional company name []:
openssl ca -in nginx.csr -out nginx.crt -days 3650 #生成证书
证书生成完成后编辑我们的nginx配置文件启用ssl认证功能。
vim /etc/nginx/nginx.conf #编辑该文件启用如下选项并添加部分内容server {listen 443;server_name localhost;ssl on;ssl_certificate /etc/nginx/ssl/nginx.crt; #证书所在路径ssl_certificate_key /etc/nginx/ssl/nginx.key; #密钥所在路径ssl_session_timeout 5m;ssl_protocols SSLv2 SSLv3 TLSv1;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {root /web/html; #修改根所在路径index index.php index.html index.htm;}location ~ \.php$ { #添加此段已支持phproot /web/html;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;include fastcgi_params;}}
保存退出。重新载入nginx服务。
service nginx reload现在再去我们的物理机上测试一下吧。好了现在ssl认证功能也已实现。到此。LNMP和CA认证均已完成。公主和王子终于可以在一起了从此过上了…… 转载于:https://blog.51cto.com/lq2419/1204480