CentOS安装与配置LNMP

本文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 Welcome Page

五、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已经成功运行了。

PHP Info

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 日志文件路径来对一个日志文件进行分析,第一次启动时,会弹出一个对话框,询问日志文件的格式,如下图所示:

GoAccess

此时选择第三个,即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/

转载请注明出处

posted @ 2014-09-24 20:54  潮风工作室  阅读(710)  评论(0编辑  收藏  举报