本文PDF文档下载:http://www.coderblog.cn/doc/Install_and_config_LNMP_under_CentOS.pdf
本文EPUB文档下载:http://www.coderblog.cn/doc/Install_and_config_LNMP_under_CentOS.epub
原文链接:http://www.coderblog.cn/article/36/
CentOS安装与配置LNMP(1):Nginx安装与常用命令
Nginx是一个轻量级的HTTP服务器,与庞大的Apache相比有以下优势,在性能上,它战用很少的系统资源,能支持更多的并发连接,达到更高的访问效率;在功能上,Nginx是优秀的代理服务器和负载均衡服务器;在安装配置上,Nginx安装简单、配置灵活。而CentOS又是最常用的网站服务器的Linux系统,本文将介绍购买VPS主机或者云主机后,如何在纯净系统下安装与配置Nginx。
一、安装环境
- 操作系统:CentOS
- 安装软件:Nginx 1.6.0
- 安装方式: yum
- 安装说明:以下操作如无特别说明,请在root用户或者具有root权限的用户下执行
二、安装
一般CentOS系统的yum软件源中,都没有含有Nginx软件,故我们需要导入额外的yum软件源。
rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
yum install nginx
安装后的文件列表
- 自启动脚本文件:
/etc/init.d/nginx
- 主程序文件:
/usr/sbin/nginx
- 配置文件目录:
/etc/nginx/
- 主配置文件:
/etc/nginx/nginx.conf
- 各站点的配置文件
/etc/nginx/conf.d/*.conf
- 日志文件目录:
/var/log/nginx/
- 访问日志:
/var/log/nginx/access.log
- 错误日志:
/var/log/nginx/error.log
三、程序启动
/etc/init.d/nginx start
Or
/etc/init.d/nginx restart
如果你看到以下结果,表示Nginx程序已经成功启动了
Starting nginx: [ OK ]
四、查看网站
一般网站服务器都没有提供图形化的界面,故我们需要通过远程在查看服务器上的网站,首先,获得网站服务器的IP。
ifconfig
然后我们就可以在浏览器里,输入http://服务器的IP/来查看我们的网站,如果你看到以下的结果,那么恭喜了,你的网站已经能够正常访问了
五、Nginx的常用命令
- 查看Nginx版本:
nginx -v
- 测试配置文件是否正确:
nginx -t
- 测试特定配置文件是否正确:
nginx -t -c *filepath*
- 启动/停止/重新启动
/etc/init.d/nginx start
/etc/init.d/nginx stop
/etc/init.d/nginx restart
- 修改配置文件后,不启动重新载入配置:
nginx -s reload
六、故障排除
如果你的网站无法正常访问,请按以下步骤检查:
1、查看80端口是否已被Nginx使用
netstat -tlunp
Or netstat -tlunp|grep :80
如果有以下内容,则Nginx程序已正常监听80端口
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 573/nginx
2、查看网站在本地是否能够访问
curl http://localhost/
如果返回Nginx欢迎页的HTML代码则正常
3、80端口被系统阻止外部访问
方法一:停用iptables服务
iptables stop
chkconfig iptables off
方法二:开通80端口的外部访问
/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
/etc/init.d/iptables save
4、查看错误日志文件
more /var/log/nginx/error.log
CentOS安装与配置LNMP(2):Nginx优化
在简单地安装完Nginx后,需要对其进行配置,如配置网站的文件路径,多网站共享同一端口,与PHP的结合,还有对其进行优化。
一、主配置文件
nginx的主配置文件路径:/etc/nginx/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
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 /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
-
user nginx;
运行nginx程序的用户 -
worker_processes 1;
worker进程的个数,建议修改为和CPU的核数一样的数量,如4核CPU,则修改为4 -
error_log /var/log/nginx/error.log warn;
错误日志的文件路径与记录的日志类型 -
pid /var/run/nginx.pid;
存放Nginx进程号的文件,以后可通过此文件向Nginx发送信息,如 kill -HUP `cat /var/run/nginx.pid` -
worker_connections 1024;
worker支持的并发量,需要支持高并发量的服务器,可修改此值为65536,此修改必须与linux的内核配合才能发挥作用; -
include /etc/nginx/mime.types;
设定mime类型,类型由mime.type文件定义 - 定义日志格式,格式名称命令为main:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
各字段意义如下:
$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
$remote_user:用来记录客户端用户名称;
$time_local: 用来记录访问时间与时区;
$request: 用来记录请求的url与http协议;
$status: 用来记录请求状态;成功是200,
$body_bytes_sent :记录发送给客户端文件主体内容大小;
$http_referer:用来记录从那个页面链接访问过来的;
$http_user_agent:记录客户端浏览器的相关信息;
-
access_log /var/log/nginx/access.log main;
日志文件路径,main为刚才定义的日志格式名称 -
sendfile on;
sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。 -
keepalive_timeout 65;
keepalive的超时时间 -
include /etc/nginx/conf.d/*.conf;
此句是包含/etc/nginx/conf.d/目录下的.conf文件作为配置文件的内容
二、主配置文件的一些额外设置
1、打开gzip
一般服务器的配置都比较强大,而网络带宽都比较小,利用gzip功能,在发送网页内将网页内容进行压缩,客户端浏览器在收到文件名,再进行解压缩,这样可以节省大量的网络带宽。 在主配置文件中加入以下选项:
gzip on; #打开gzip
gzip_min_length 1k; #内容大小小于1KB的将不压缩,因为可能越压越大
gzip_buffers 4 16k; #gzip缓存设置系统获取4个16KB单位的缓存用于存储gzip的压缩结果数据流
#gzip_http_version 1.0;
gzip_comp_level 2; #压缩级别
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php; #需要进行压缩的MIME TYPE
gzip_vary off;
gzip_disable "MSIE [1-6]\."; #对于IE6以下的浏览器,不进行压缩
2、提高文件上传的大小
Nginx默认的可上传文件在大小只有1M,这远远不能满足我们的需求,因此可加入以下选项以提高上传文件大小。
client_max_body_size 10m;
三、网站配置文件路径
Nginx的各网站配置文件存放在/etc/nginx/conf.d/
目录下,每个.conf文件代表每一个独立的网站,我们来看一个经典的conf文件的结构,即/etc/nginx/conf.d/default.conf
文件:
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/log/host.access.log main;
location / {
root /usr/share/nginx/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 /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# 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 /scripts$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;
#}
}
我们独个解读一下
- 所有配置必须包括在
server{}
中 -
listen 80 ;
监听80端口 -
server_name localhost;
通过网址名称与其它网站区分开,此处应该修改为你的申请的域名网址,多个网址请用空格分开,如:server_name www.coderblog.cn coderblog.cn;
,另外,这里的网址也可以是正则表达式的形式,如server_name (www\.)?coderblog.cn;
-
charset koi8-r;
文件编码,一般设置为charset utf-8;
access_log /var/log/nginx/log/host.access.log main;
访问日志的文件路径与需要记录的日志类型,main为nginx.conf定义的日志格式- 网站文件的存放路径,以及默认的文档名称,如,你访问
http://www.coderblog.cn/
,实际是访问http://www.coderblog.cn/index.htm
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 404 /404.html;
当文件没有找到时,重定位到/404.html文件- 当发生 500 502 503 504错误时,重定位到/50x.html文件
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
- 配置某些文件禁止访问
location ~ /\.ht {
deny all;
}
四、修改配置后可能发生的错误
修改配置文件后,可用nginx -t
测试配置文件的正确性,以及需要用nginx -s reload
重新载入配置文件。
1、修改文件路径后,访问时发生403 Forbidden错误
可能原因1:缺少默认文档文件,如root目录下缺少index.html index.htm以及任何一个默认文档文件,你那么你直接访问网站域名的时候,将发生403 Forbidden错误; 解决方法:添加至少一个默认文档到root目录下
可能原因2:nginx用户在root目录下没有读权限,例如将root目录设置为/home/homeway,而该目录的权限为drwx------
,即除了homeway用户外,其它用户没有读写权限。 解决方法:将root目录权限修改为777,即任何人可读可写可执行,执行命令 chmod 777 /home/homeway -R
即可
五、多网站共用80端口
Nginx实现多网站共用80端口其实很简单,只要设置server_name属性即可;如:我有两个网站forum.coderblog.cn与blog.coderblog.cn,那么,我只需要在/etc/nginx/conf.d/下新增两个文件 /etc/nginx/conf.d/forum.coderblog.cn.conf
listen 80;
server_name forum.coderblog.cn;
/etc/nginx/conf.d/blog.coderblog.cn.conf
listen 80;
server_name blog.coderblog.cn;
好了,本文就先讲到这里,下一篇将讲NGINX与PHP结合。
CentOS安装与配置LNMP(3):Nginx与PHP结合
PHP可以说是目前最流行的网站首选语言,之前两篇文章已经讲了如果在CentOS环境下搭建与优化Nginx环境,本篇文章将讲述PHP在CentOS下的安装,并结合Spawn-fcgi与Nginx进行组合使用。
一、PHP在CentOS下的安装
截至目前为止,PHP最新版本为5.6.0,但实际生产环境中,PHP 5.3.3已经能够满足大部分程序的需求,运行比较稳定且扩展模块比较多,故推荐安装PHP 5.3.3版本。
- 操作系统:CentOS
- 安装软件:PHP 5.3.3
- 安装方式: yum
- 安装说明:以下操作如无特别说明,请在root用户或者具有root权限的用户下执行
二、安装
rpm -Uvh http://repo.webtatic.com/yum/el6/latest.rpm
yum install php php-mysql php-gd php-gd php-mcrypt php-xml php-xcache php-mbstring
安装后的文件列表
- 配置文件
/etc/php.ini
- 程序文件
/usr/bin/php-cgi
,使用php-cgi -b port
的形式即可让其监听某一端口,但一般不推荐以此种方式运行
三、使用spawn-fcgi管理php进程
spawn-fcgi是lightpd中的一个组件,可单独使用,请使用以下命令进行安装
wget http://www.lighttpd.net/download/lighttpd-1.4.18.tar.bz2
tar -xvjf lighttpd-1.4.18.tar.bz2
cd lighttpd-1.4.18
./configure
make
make install
常用命令:
spawn-fcgi -C 5 -u nginx -g nginx -f /usr/bin/php-cgi -a 127.0.0.1 -p 9000
参数解释:
-
-C 5
启动5个PHP进程进行处理 -
-u nginx -g nginx
以用户nginx及用户组nginx运行php -
-f /usr/bin/php-cgi
指定php-cgi的文件路径 -
-a 127.0.0.1 -p 9000
监听的IP与端口
运行之后,使用netstat -tlunp
可看到如下信息
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 13320/php-cgi
此时如果使用kill -9 pid
的形式,spawn-fcgi会认为该进程崩溃了,马上又会启动另外一个进程,故需要多次执行kill命令,次数与-C 5
指定的进程数相关,故结束进程时推荐使用pkill php-cgi
的形式,一次性杀死所有的php-cgi进程。
四、配置Nginx的配置文件
要使php与nginx进行结合,需要在网站配置文件里,增加对.php结尾的文件进行处理的语句,例子如下:
location ~\.php$ {
root /home/homeway/coder;
index index.html index.htm;
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REDIRECT_STATUS 200;
include fastcgi_params;
}
主要配置解释:
-
location ~\.php$
匹配所有以.php结尾的文件,以便对其进行处理 -
fastcgi_index index.php;
首页文件 -
fastcgi_pass 127.0.0.1:9000;
将该文件传递给监听该端口的程序进行处理,也就是我们的php-cgi程序 -
include fastcgi_params;
此参数配置文件里需要进行两处修改
在/etc/nginx/fastcgi_params
文件里增加以下信息(如果已有则跳过)
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
fastcgi_param PATH_INFO "";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
五、测试运行
在网站的root路径下新增test.php文件,内容如下:
<?php
echo phpinfo();
?>
对该文件进行访问,如果出现了PHP的相关信息,则表示PHP已经成功运行了。
CentOS安装与配置LNMP(4):MySQL数据库
MySQL数据库是最流行的关系型数据库之一,其功能与性能,足以满足大部分中小企业的需求,故在数据库选择中,首先MySQL数据库。本文将讲述MySQL数据库在CentOS下的安装,虽然与Nginx没有必然的联系,但作为整个Nginx系列文章的补充,希望能够形成完整的CentOS下网站运行环境搭建的教程。
一、安装环境
- 操作系统:CentOS
- 安装软件:MySQL 5.1.73
- 安装方式: yum
- 安装说明:以下操作如无特别说明,请在root用户或者具有root权限的用户下执行
二、安装
yum install mysql mysql-server
安装后的文件列表
-
/etc/my.cnf
配置文件 -
/usr/bin/mysql
文字界面的客户端程序 -
/etc/init.d/mysqld
MySQL服务启动脚本 -
/usr/bin/mysqladmin
对MySQL进行管理配置的程序
三、常用命令
启动MySQL服务
/etc/init.d/mysqld start
或者 service mysqld start
设置为开机启动
chkconfig mysqld on
修改密码
初次安装后,初始密码为空,为了网站的安全性,需要对密码进行修改,修改命令如下、
mysqladmin -uroot -p password coderblog
此时会要求你输入原来的密码,但因为初始密码为空,直接按回车即可。
命令解释如下:
-
-u root -p
使用root用户登录,则需要输入密码 -
password coderblog
将密码修改为coderblog
登录
mysql -u用户 -p密码
备份还原数据库
mysqldump -u用户 -p密码 数据库名 > 文件路径
如:
mysqldump -uroot -pcoder coder > /home/homeway/coder.sql
还原数据库
进入mysql命令界面还原法:
mysql -uroot -pcoder
> create database coder;
> source /home/homeway/coder.sql;
> exit
直接还原法: mysql -u用户 -p密码 数据库名 -e 'source 文件路径'
-e
为执行命令,执行后直接结束程序
mysql -uroot -pcoder coder -e 'source /home/homeway/coder.sql'
简单的优化配置
在/etc/my.cnf
中新增如下内容
default-character-set=utf8
key_buffer_size = 256M
max_allowed_packet = 4M
thread_stack = 256K
table_cache = 128K
sort_buffer_size = 6M
read_buffer_size = 4M
join_buffer_size = 8M
myisam_sort_buffer_size = 64M
table_cache = 512
thread_cache_size = 64
query_cache_size = 64M
tmp_table_size = 256M
max_connections = 2048
wait_timeout = 60
thread_concurrency = 8
CentOS安装与配置LNMP(5):使用GoAccess分析Nginx日志并发送邮件报告
GoAccess是一款性能非常出色的日志分析软件,非常适合来分析Nginx产生的日志,并且可以形成HTML报告,通过Crontab定时任务,每天分析主机上的日志并发送报告到运维人员的邮箱,这样便可以对网站的运行情况了然于胸。
一、安装软件
- 日志分析软件 GoAccess :
yum install goaccess
- 邮件发送软件 Mutt :
yum install mutt
- SMTP软件 msmtp :
yum install msmtp
二、日常使用
使用命令goaccess -f 日志文件路径
来对一个日志文件进行分析,第一次启动时,会弹出一个对话框,询问日志文件的格式,如下图所示:
此时选择第三个,即NCSA Commbined Log Format
,使用空格键进行选择,然后回车确定,然后GoAccess就会以迅雷不及掩耳之势分析完整个日志文件。
不想每次都对日志文件的格式进行选择的话,可以新建一个配置文件,比如~/.garc
,内容如下:
color_scheme 1
date_format %d/%b/%Y
log_format %h %^[%d:%^] "%r" %s %b "%R" "%u"
然后,启动程序时,指定配置文件的路径即可:
goaccess -p ~/.garc -f 日志文件路径
三、测试邮件发送功能
1、设置邮件发送帐户
编辑msmtp的配置文件~/.msmtprc
defaults
account gmail
tls on
auth on
host smtp.gmail.com
port 587
user 邮箱名称
from 邮箱名称
password 邮箱密码
tls_starttls on
tls_trust_file /etc/pki/tls/certs/ca-bundle.crt
account default: gmail
上面的例子是以GMail为例,大家可结合自己使用的邮箱进行设置,其中account gmail
中的gmail
为帐户标识,最后一行account default: gmail
指定默认帐户为gmail
,mutt发送邮件时使用默认帐户进行发送。
也可以使用其它邮箱,不同的邮箱有些选项不太一样,如使用QQ邮箱,则需要关闭tls_starttls,下面列一个QQ邮箱的例子:
defaults
account qq
tls on
auth on
host smtp.qq.com
port 465
user homeway88
from homeway88@qq.com
password 密码
tls_starttls off
tls_trust_file /etc/pki/tls/certs/ca-bundle.crt
account default: qq
2、配置mutt使用msmtp来发送邮件而不是sendmail
默认mutt使用sendmail来发送邮件,如果你的主机没有架设邮局功能的话,发送的邮件只是发送到本机的帐户邮箱,而我们一般要使用外部smtp服务来将邮件发送到internet邮箱。
编辑Mutt的配置文件/etc/Muttrc.Local
,增加以下内容即可,注意发件人邮箱必须和上面指定的msmtp的发件人邮箱一致。
set sendmail = "/usr/bin/msmtp"
set from="发件人邮箱"
set sendmail="/usr/local/msmtp/bin/msmtp"
set use_from=yes
set realname="发件人"
3、使用mutt发送测试邮件
mutt的常用发送邮件命令为
echo "邮件内容"| mutt -s "邮件标题" -a 附件文件路径 -c 收件人邮箱
四、定时生成日志报告并发送邮件
分解任务
- 定时 Crontab
- 生成日志报告 GoAccess
- 发送邮件 mutt
定时任务的格式为:
分 时 日 月 星期 命令
假设我们要每天晚上23:59分生成日志报告,则使用crontab -e
,然后添加以下内容即可
59 23 * * * sh /home/homeway/report/nginx.sh
然后新建/home/homeway/report/nginx.sh
,输入以下内容
DATE=$(date +%Y%m%d)
mkdir /home/homeway/report/$DATE
cd /home/homeway/report/$DATE
cp /home/homeway/log/access.log .
echo "" > /home/homeway/log/access.log
cat *.log > all.log
goaccess -f /home/report/$DATE/all.log -a -p ~/.garc > report.html
echo "$DATE Report" | mutt -s "$DATE Report" -a /home/homeway/report/$DATE/report.html -c homeway88@qq.com
命令解释如下:
-
DATE=$(date +%Y%m%d)
获取当前日期,格式为年月日,如20140101 - 然后新建该日期的归档文件夹
mkdir /home/homeway/report/$DATE
,并把日志文件拷贝到该文件夹下和清空原来的日志文件,使用cat *.log > all.log
是因为通常主机上都有多个文件,故需要把多个日志文件合并成一个。 -
goaccess -f /home/report/$DATE/all.log -a -p ~/.garc > report.html
分析日志并将结果输出到report.html文件 -
echo "$DATE Report" | mutt -s "$DATE Report" -a /home/homeway/report/$DATE/report.html -c homeway88@qq.com
,将该报告文件作为附件发送到homeway88@qq.com
邮箱。
五、结束语
至此,本系列的文章便告一段落啦,一边写文章一边改善博客,虽然花了很多时间,但是自己也很有收获,可以对所学的技巧作一个梳理,以免时间长了就忘了;也希望可对后来者起到一些帮助。
由于本人精力有限,文章难免有错漏和不足之处,希望各位读者不吝赐教。
文章:CentOS安装与配置LNMP
作者:HomeWay88
发表在: 程旭猿博客 http://www.coderblog.cn/
原文链接:http://www.coderblog.cn/article/36/
转载请注明出处