本文PDF文档下载:http://www.coderblog.cn/doc/Install_and_config_LNMP_under_CentOS.pdfjavascript
本文EPUB文档下载:http://www.coderblog.cn/doc/Install_and_config_LNMP_under_CentOS.epubphp
原文连接:http://www.coderblog.cn/article/36/css
Nginx是一个轻量级的HTTP服务器,与庞大的Apache相比有如下优点,在性能上,它战用不多的系统资源,能支持更多的并发链接,达到更高的访问效率;在功能上,Nginx是优秀的代理服务器和负载均衡服务器;在安装配置上,Nginx安装简单、配置灵活。而CentOS又是最经常使用的网站服务器的Linux系统,本文将介绍购买VPS主机或者云主机后,如何在纯净系统下安装与配置Nginx。html
通常CentOS系统的yum软件源中,都没有含有Nginx软件,故咱们须要导入额外的yum软件源。java
rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
mysql
yum install nginx
linux
安装后的文件列表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
web
Or正则表达式
/etc/init.d/nginx restart
若是你看到如下结果,表示Nginx程序已经成功启动了
Starting nginx: [ OK ]
通常网站服务器都没有提供图形化的界面,故咱们须要经过远程在查看服务器上的网站,首先,得到网站服务器的IP。
ifconfig
而后咱们就能够在浏览器里,输入http://服务器的IP/来查看咱们的网站,若是你看到如下的结果,那么恭喜了,你的网站已经可以正常访问了
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
若是你的网站没法正常访问,请按如下步骤检查:
netstat -tlunp
Or netstat -tlunp|grep :80
若是有如下内容,则Nginx程序已正常监听80端口
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 573/nginx
curl http://localhost/
若是返回Nginx欢迎页的HTML代码则正常
方法一:停用iptables服务
iptables stop
chkconfig iptables off
方法二:开通80端口的外部访问
/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
/etc/init.d/iptables save
more /var/log/nginx/error.log
在简单地安装完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,则修改成4error_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文件定义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文件做为配置文件的内容通常服务器的配置都比较强大,而网络带宽都比较小,利用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如下的浏览器,不进行压缩
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文件
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:缺乏默认文档文件,如root目录下缺乏index.html index.htm以及任何一个默认文档文件,你那么你直接访问网站域名的时候,将发生403 Forbidden错误; 解决方法:添加至少一个默认文档到root目录下
可能缘由2:nginx用户在root目录下没有读权限,例如将root目录设置为/home/homeway,而该目录的权限为drwx------
,即除了homeway用户外,其它用户没有读写权限。 解决方法:将root目录权限修改成777,即任何人可读可写可执行,执行命令 chmod 777 /home/homeway -R
便可
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结合。
PHP能够说是目前最流行的网站首选语言,以前两篇文章已经讲了若是在CentOS环境下搭建与优化Nginx环境,本篇文章将讲述PHP在CentOS下的安装,并结合Spawn-fcgi与Nginx进行组合使用。
截至目前为止,PHP最新版本为5.6.0,但实际生产环境中,PHP 5.3.3已经可以知足大部分程序的需求,运行比较稳定且扩展模块比较多,故推荐安装PHP 5.3.3版本。
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是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进程。
要使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已经成功运行了。
MySQL数据库是最流行的关系型数据库之一,其功能与性能,足以知足大部分中小企业的需求,故在数据库选择中,首先MySQL数据库。本文将讲述MySQL数据库在CentOS下的安装,虽然与Nginx没有必然的联系,但做为整个Nginx系列文章的补充,但愿可以造成完整的CentOS下网站运行环境搭建的教程。
yum install mysql mysql-server
安装后的文件列表
/etc/my.cnf
配置文件/usr/bin/mysql
文字界面的客户端程序/etc/init.d/mysqld
MySQL服务启动脚本/usr/bin/mysqladmin
对MySQL进行管理配置的程序/etc/init.d/mysqld start
或者 service mysqld start
chkconfig mysqld on
初次安装后,初始密码为空,为了网站的安全性,须要对密码进行修改,修改命令以下、
mysqladmin -uroot -p password coderblog
此时会要求你输入原来的密码,但由于初始密码为空,直接按回车便可。
命令解释以下:
-u root -p
使用root用户登陆,则须要输入密码password coderblog
将密码修改成coderblogmysql -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
GoAccess是一款性能很是出色的日志分析软件,很是适合来分析Nginx产生的日志,而且能够造成HTML报告,经过Crontab定时任务,天天分析主机上的日志并发送报告到运维人员的邮箱,这样即可以对网站的运行状况了然于胸。
yum install goaccess
yum install mutt
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 日志文件路径
编辑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
默认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="发件人"
mutt的经常使用发送邮件命令为
echo "邮件内容"| mutt -s "邮件标题" -a 附件文件路径 -c 收件人邮箱
分解任务
定时任务的格式为:
分 时 日 月 星期 命令
假设咱们要天天晚上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)
获取当前日期,格式为年月日,如20140101mkdir /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/
转载请注明出处