LNMP基于PHP-FPM(nginx/1.8.1 PHP 5.6.35 PHP 5.3.27 php多版本)-1

Nginx介绍

nginx

  www服务软件 俄罗斯人开发 开源 性能很高 web产品 大小780k  c语言开发

  本身是一款静态www软件不能解析php jsp .do

 

最大特点

  静态小文件(1m),支持高并发,占用资源少 3w并发,10个进程,内存150M(unix、linux、windows都支持)

crtl -I 域名  返回的http信息可以看到使用的web服务器

 

其他特点

  1、配置简单、灵活、轻量

  2、高并发小文件,静态几万并发

  3、功能种类多,但是每个功能都不是特别强

  4、支持epoll模型,使得nginx支持高并发。apache 使用select模型()

    宿舍大妈案例,有朋友来宿舍找你

    select即大妈带你逐一挨个去每个房间找(即线性轮回)

    epoll即大妈找宿舍人员名单,房间号信息,告诉你房间号(回调callback

    所以大并发连接时select性能就下降

  5、nginx可以配合动态服务(fastcgi接口)

  6、利用nginx可以对ip限速,可以限制连接数

另外

  基于名字端口及ip的多虚拟主机站点

  支持rewrite及正则

  支持基于客户端ip地址和http基本认证的访问控制

  支持http响应速率限制

  支持同一ip地址的并发连接或请求数限制

 

一般网站并发依赖如下

  nginx 1-3w并发

  php  300-800

  db   300-800

 

nginx服务从大的方面的功能:

  a、web服务,邮件服务

  b、负载均衡(反向代理)

cweb cache(web缓存),相当于squid(CDN主要使用

 

 

nginx的应用场合

1、静态服务(图片视频是另一个lighttpd。并发:几万并发html js css flv jpg gif

  2、动态服务 nginx+fastcgi方式运行php,jsp,动态并发500-1500(apache+php lighttpd+fastcgi)

  3、反向代理,负载均衡。日pv2000w以下,并发1w以下都可以直接用nginx做代理 (其他代理haproxy软件,F5,A10)

  4、缓存服务,类似squid varnish ats

 

nginx支持虚拟主机,一个server标签就是一个虚拟机

  1、基于域名的虚拟主机   通过域名来区分虚拟主机    应用于外部网站

  2、基于端口的虚拟主机   通过端口来区分虚拟主机  内部网站  网站后台

  3、基于ip的虚拟主机    几乎不用,不支持ifconfig别名,配置文件可以

 

 

2017-05-30 
nginx-1.13.1 mainlineversion has been released. 
2017-04-12 
nginx-1.12.0 stableversion

 

NGINX安装1.8.1

 

1、安装PCRE (Perl Compatible Regular Expressions)

PCRE 中文perl兼容正则表达式,HTTP rewrite module requires the PCRE library

# yum install pcre  pcre-devel -y

 

2、安装OPENSSL   SSL modules require the OpenSSL library

# yuminstallopenssl-devel-y

 

开始安装nginx

a、添加用户

#useradd nginx -s /sbin/nologin -M

 

b、配置安装

tar -zxvf nginx-1.8.1.tar.gz

cd nginx-1.8.1

./configure --prefix=/usr/local/nginx-1.8.1--user=nginx --group=nginx \

--with-http_stub_status_module--with-http_ssl_module

make && make install

ln -s /usr/local/nginx-1.8.1//usr/local/nginx


c、启动

# /usr/local/nginx/sbin/nginx

 

d、查看进程

# ps -ef | grepnginx | grep -v grep

root      1713     1  023:47 ?       00:00:00 nginx: master process/usr/local/nginx/sbin/nginx

nginx     1714   1713  023:47 ?       00:00:00 nginx: worker process

 

e、查看nginx编译参数及版本

/usr/local/nginx/sbin/nginx -V

nginx version: nginx/1.8.1

built by gcc4.4.720120313 (Red Hat 4.4.7-16) (GCC)

built with OpenSSL 1.0.1e-fips 11 Feb 2013

TLS SNI support enabled

configure arguments:--prefix=/usr/local/nginx-1.8.1 --user=nginx--group=nginx --with-http_stub_status_module --with-http_ssl_module

 

 

配置3个虚拟主机实践

 

#mkdir -p /usr/local/nginx/html/{bbs,www,blog}    用于放置虚拟主机网页目录   

#echo"www.gtms.org" >/usr/local/nginx/html/www/index.html

#echo"bbs.gtms.org" >/usr/local/nginx/html/bbs/index.html

#echo"blog.gtms.org" >/usr/local/nginx/html/blog/index.html

#mkdir /usr/local/nginx/conf/extra    用于放置虚拟主机配置文件目录


在extra目录先建立站点配置文件 www.conf/bbs.conf/blog.conf,内容如下

root@node83 extra]# cat www.conf bbs.conf blog.conf

#www.conf

server

{

       listen 80;

       server_name www.gtms.org;

       location / {

                root html/www;

                index index.html;

                }

}

#bbs.conf

server

{

       listen 80;

       server_name bbs.gtms.org;

       location / {

                root html/bbs;

                index index.html;

                }

}

#blog.conf

server

{

       listen 80;

       server_name blog.gtms.org;

       location / {

                root html/blog;

                index index.html;

                }

}

 

#vi /usr/local/nginx/conf/nginx.conf

在http标签段加入以下内容

include extra/www.conf;

include extra/bbs.conf;

include extra/blog.conf;

 

#/usr/local/nginx/sbin/nginx -t 检查ok后# /usr/local/nginx/sbin/nginx -s reload

从另一台主机配置hosts文件进行测试
[root@node82 nginx]# curl 192.168.0.83  通过ip访问默认走第一个配置的主机
www.gtms.org
[root@node82 nginx]# curl
www.gtms.org
www.gtms.org
[root@node82 nginx]# curl bbs.gtms.org
bbs.gtms.org
[root@node82 nginx]# curl blog.gtms.org
blog.gtms.org

 


配置nginx状态页面(--with-http_stub_status_module)

 

#vi /usr/local/nginx/conf/nginx.conf

在http标签段加入以下内容

include status/www.conf;

 

在extra目录先建立站点配置文件 status.conf

#status

server {

       listen       80;

       server_name  status.gtms.org;

       location / {

       stub_status on;

       access_log off;

       }

       }

 

#/usr/local/nginx/sbin/nginx -t 检查ok后#/usr/local/nginx/sbin/nginx -s reload

 

从另一台主机配置hosts文件进行测试 

[root@node82 nginx]# curlstatus.gtms.org  #对后端发起的活动连接数,即正在处理的活动连接数

Active connections: 1

server accepts handled requests

 7711

Reading: 0 Writing: 1 Waiting: 0

nginx状态参数
server   nginx启动到现在共处理了 7个连接
accepts  nginx启动到现在共成功创建7次握手,和server相同,说明没丢失请求
handled requests  表示共处理了11次请求
Reading: Nginx 读取到客户端的Header信息数.
Writing: Nginx 返回给客户端的Header信息数.
Waiting: 开启keep-alive的情况下,这个值等于 active �C (reading + writing),意思就是Nginx已经处理完成,正在等候下一次请求指令的驻留连接.
所以,在访问效率高,请求很快被处理完毕的情况下,Waiting数比较多是正常的.如果reading +writing数较多,则说明并发访问量非常大,正在处理过程中.

 


NGINX日志

 

Nginx错误日志
ngx_core_module模块负责http://nginx.org/en/docs/ngx_core_module.html#error_log

Syntax: error_log file [level];

Default: error_log logs/error.logerror;

Context: main, http, mail, stream,server, location

error_log 级别分为 debug, info, notice, warn,error, crit,alert,emerg(不要配置低等级,带来很大磁盘IO,如果日志太多,可以清空再看

 

 

 

Nginx访问日志
ngx_http_log_module模块负责http://nginx.org/en/docs/http/ngx_http_log_module.html

Syntax:
access_log path [format [buffer=size] [gzip[=level]][flush=time] [if=condition]];
access_log off;   表示不记录访问日志
Default:
access_log logs/access.log combined;
Context:
(一般配置在vhost中)
http, server, location, if in location, limit_except

Example:
access_log logs/access_www.log main
gzip buffer=32k flush=5s;
For
gzip compression towork, nginx must be built with the zlib library.
也可以直接发到远程服务器

access_logsyslog:server=address[,parameter=value]  [format [if=condition]];

log_format 用来定义记录日志的格式(可以定义多种格式,取不同名字)
access_log  用来指定日志文件的路径及使用的何种日志格式记录

nginx默认注释掉的
#log_format  main  '$remote_addr -$remote_user [$time_local] "$request" '

   #                  '$status$body_bytes_sent "$http_referer" ' (http_referer从哪过来的)

   #                  '"$http_user_agent""$http_x_forwarded_for"';(反向代理记录客户端ip)

#access_log  logs/access.log  main;



 1.$remote_addr  与$http_x_forwarded_for 用以记录客户端的真实ip地址;

 2.$remote_user:用来记录客户端用户名称;

 3.$time_local : 用来记录访问时间与时区;

 4.$request :   用来记录请求的url与http协议;

 5.$status :   用来记录请求状态;成功是200,

 6.$body_bytes_sent :记录发送给客户端文件主体内容大小;

 7.$http_referer :  用来记录从哪个页面链接访问过来的;

 8.$http_user_agent :记录客户端浏览器的相关信息;

日志实例:192.168.0.82 - - [15/Dec/2016:02:04:24 +0800] "GET / HTTP/1.1"20018"-""curl/7.19.7(x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3libidn/1.18 libssh2/1.4.2""-"



Nginx访问日志轮询切割(没有自己的切割工具
简单的日志轮询脚本

vi cut_nginx_log.sh

#!/bin/sh

Dateformat=`date +%Y%m%d`

Basedir="/usr/local/nginx"

Nginxlogdir="$Basedir/logs"

Logname="access_www"

[ -d $Nginxlogdir] && cd$Nginxlogdir || exit 1

[ -f ${Logname}.log ] || exit 1

/bin/mv ${Logname}.log${Dateformat}_${Logname}.log

$Basedir/sbin/nginx -s reload

写入crontab

0000 * * *     /bin/sh /home/script/cut_nginx_log.sh >/dev/null2>&1

日志分析相关工具:

syslog,rsyslog,Awstats,flume,logstashscrash scribe kafka,storm。ELK=Elasticsearch+Logstash+Kibana

 

 

YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS