当前位置:  操作系统/服务器>linux
本页文章导读:
    ▪有关nginx与apache的优缺点      本节内容: nginx与apache的优缺点 一、nginx相对于apache的优点: 轻量级,同样起web 服务,比apache服务器占用更少的内存及资源 抗并发,nginx在处理请求是异步非阻塞的,而apache 则是阻塞型.........
    ▪Nginx爆发超级漏洞 百度加速乐已率先防御      本节主要内容: Nginx爆发超级漏洞 百度加速乐率先防御   北京时间11月20日,Nginx官方更新邮件列表,对外通报Nginx 0.8.41 - 1.5.6 版本存在两类高危漏洞,经过百度加速乐安全研究团队确认,.........
    ▪nginx日志分割详解(三个实例)      本节内容: 几种切割nginx日志的方法 一、Nginx日志按天分割 使用kill -URS1的方式切割nginx日志的方式,是简单而正确的。 查看了下系统自带的logrotate来实现nginx的日志分割,查看其bash源码,.........

[1]有关nginx与apache的优缺点
    来源: 互联网  发布时间: 2013-12-24

本节内容:
nginx与apache的优缺点

一、nginx相对于apache的优点:
轻量级,同样起web 服务,比apache服务器占用更少的内存及资源
抗并发,nginx在处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
高度模块化的设计,编写模块相对简单
社区活跃,各种高性能模块出品迅速啊
apache 相对于nginx 的优点:
rewrite ,比nginx 的rewrite 强大
动态页面
模块超多,基本想到的都可以找到
少bug ,nginx 的bug 相对较多
超稳定

存在就是理由,一般来说,需要性能的web 服务,用nginx 。如果不需要性能只求稳定,那就apache 吧。后者的各种功能模块实现得比前者,例如ssl 的模块就比前者好,
可配置项多。这里要注意一点,epoll(freebsd 上是 kqueue )网络IO 模型是nginx 处理性能高的根本理由,但并不是所有的情况下都是epoll 大获全胜的,如果本身提供静
态服务的就只有寥寥几个文件,apache 的select 模型或许比epoll 更高性能。当然,这只是根据网络IO 模型的原理作的一个假设,真正的应用还是需要实测了再说的。

二、作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。在高连接并发的情况
下,Nginx是apache服务器不错的替代品: Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一. 能够支持高达 50,000 个并发连接数的响应, 感谢Nginx为我们
选择了 epoll and kqueue 作为开发模型.
Nginx作为负载均衡服务器: Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务, 也可以支持作为 HTTP代理 服务器对外进行服务. Nginx采用C进行编写, 不论
是系统资源开销还是CPU使用效率都比 Perlbal 要好很多.
作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器), Last.fm 描述了成功并且美妙的使用经
验.
Nginx 是一个安装非常的简单 , 配置文件非常简洁(还能够支持perl语法), Bugs 非常少的服务器: Nginx 启动特别容易, 并且几乎可以做到7*24不间断运行,即使运行数
个月也不需要重新启动. 你还能够不间断服务的情况下进行软件版本的升级 .

三、Nginx 配置简洁, Apache 复杂
Nginx 静态处理性能比 Apache 高 3倍以上
Apache 对 PHP 支持比较简单,Nginx 需要配合其他后端用
Apache 的组件比 Nginx 多
现在 Nginx 才是 Web 服务器的首选

四、最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程

五、nginx处理静态文件好,耗费内存少.但无疑apache仍然是目前的主流,有很多丰富的特性.所以还需要搭配着来.当然如果能确定nginx就适合需求,那么使用nginx会是更经济
的方式.
apache有先天不支持多核心處理負載雞肋的缺點,建議使用nginx做前端,後端用apache。大型網站建議用nginx自代的集群功能

六、从个人过往的使用情况来看,nginx的负载能力比apache高很多。最新的服务器也改用nginx了。而且nginx改完配置能-t测试一下配置有没有问题,apache重启的时候发现
配置出错了,会很崩溃,改的时候都会非常小心翼翼现在看有好多集群站,前端nginx抗并发,后端apache集群,配合的也不错。
 
七、nginx处理动态请求是鸡肋,一般动态请求要apache去做,nginx只适合静态和反向。

八、從我個人的經驗來看,nginx是很不錯的前端服務器,負載性能很好,在老奔上開nginx,用webbench模擬10000個靜態文件請求毫不吃力。apache對php等語言的支持很好
,此外apache有強大的支持網路,發展時間相對nginx更久,

九、Nginx优于apache的主要两点:1.Nginx本身就是一个反向代理服务器 2.Nginx支持7层负载均衡;其他的当然,Nginx可能会比apache支持更高的并发,但是根据NetCraft
的统计,2011年4月的统计数据,Apache依然占有62.71%,而Nginx是7.35%,因此总得来说,Aapche依然是大部分公司的首先,因为其成熟的技术和开发社区已经也是非常不
错的性能。

十、对web server的需求决定你的选择。大部分情况下nginx都优于APACHE,比如说静态文件处理、PHP-CGI的支持、反向代理功能、前端Cache、维持连接等等。在
Apache+PHP(prefork)模式下,如果PHP处理慢或者前端压力很大的情况下,很容易出现Apache进程数飙升,从而拒绝服务的现象。

十一、nginx lua模块:可直接用lua实现apache是最流行的。

十二、对于nginx,配置文件写的很简洁,正则配置让很多事情变得简单运行效率高,占用资源少,代理功能强大,很适合做前端响应服务器 。

十三、Apache在处理动态有优势,Nginx并发性比较好,CPU内存占用低,如果rewrite频繁,那还是Apache吧。


    
[2]Nginx爆发超级漏洞 百度加速乐已率先防御
    来源: 互联网  发布时间: 2013-12-24

本节主要内容:
Nginx爆发超级漏洞
百度加速乐率先防御
 
北京时间11月20日,Nginx官方更新邮件列表,对外通报Nginx 0.8.41 - 1.5.6 版本存在两类高危漏洞,经过百度加速乐安全研究团队确认,漏洞确实存在。
使用受影响版本Nginx的网站主要面临以下风险:
  (1)通过Nginx规则限制后台地址访问IP、数据库等敏感地址访问的网站如果使用受影响版本,可能会造成限制失效。
  (2)网站存在上传功能,攻击者可以上传存在恶意代码的图片、txt、html文件即可向网站植入后门。
  针对这一情况,加速乐已率先更新安全规则,可以完全防御针对本次漏洞的攻击。

Nginx官方邮件中文翻译信息:
Nginx 的安全限制可能会被某些请求给忽略,(CVE-2013-4547).
当我们通过例如下列方式进行 URL 访问限制的时候,如果攻击者使用一些没经过转义的空格字符(无效的 HTTP 协议,但从 Nginx 0.8.41 开始因为考虑兼容性的问题予以支持)那么这个限制可能无效:
 

代码示例:
location /protected/ {
  deny all;
}

当请求的是 "/foo /../protected/file" 这样的 URL (静态文件,但 foo 后面有一个空格结尾) 或如下的配置:
 

代码示例:
location ~ \.php$ {
  fastcgi_pass ...
  }

当我们请求 "/file \0.php" 时就会绕过限制。
该问题影响 nginx 0.8.41 - 1.5.6.
该问题已经在 Nginx 1.5.7 和 1.4.4 版本中修复。

补丁程序在:
http://nginx.org/download/patch.2013.space.txt

以下是临时解决办法:
 

代码示例:
if ($request_uri ~ " ") {
  return 444;
}

    
[3]nginx日志分割详解(三个实例)
    来源: 互联网  发布时间: 2013-12-24

本节内容:
几种切割nginx日志的方法

一、Nginx日志按天分割

使用kill -URS1的方式切割nginx日志的方式,是简单而正确的。
查看了下系统自带的logrotate来实现nginx的日志分割,查看其bash源码,发现也是发送USR1这个信号。

解释:
USR1这个用户自定义信号,ubuntu下大部分进程对这个信号的反应都是重新生成日志文件,并且不会对当前的进程产生任何其它的影响。

这里要介绍下的nginx日志切割的方法,其实现思路为:
1、使用bash的数组和for简化日志备份代码。
2、使用date函数做日志备份的后缀,达到按天分割的效果。
3、使用USR1信号让nginx产生新的日志。

例子,切割nginx日志的shell脚本。
由于备份的日志文件分布在不同的目录下,此脚本是优化后的版本,经久耐用,呵呵。
 

代码示例:

#!/bin/bash
# site: www.
#1.nginx日志存放路径
first_path="/var/log/nginx/first"
path_array=($first_path)

#2.日志标识前缀数组
first_prefix_sign="first"
prefix_array=($first_prefix_sign)

#3.日志成功错误标识后缀数组
bool_array=("access" "error")

#4.nginx日志切割备份后缀
postfix=`date -d '+0 days' +%Y%m%d`".log"

#5.备份当前的日志文件,重命名改为日期后缀
for path in ${path_array[*]}
do
 for prefix in ${prefix_array[*]}
 do
  for bool in ${bool_array[*]}
  do
   file=$path/$prefix.$bool.log
   backfile=$path/$prefix.$bool.$postfix
   echo $file
   echo $backfile
   if [ -e $file ]
   then
    mv $file  $backfile
   fi
  done
 done
done

#6.查找nginx进程号,让其产生新的日志文件
nginx_pid=`ps -aux |grep -E 'nginx: master process'|grep -v 'grep'|awk '{print $2}'`
#USR1:Reopen log files,刷新nginx日志文件
kill -USR1 $nginx_pid

简单实现:
 

代码示例:
[root@xxx sh]# vi nginx_access_log.sh
#!/bin/bash
log_path="/usr/local/nginx/logs/"
mv ${log_path}access.log ${log_path}access_$(date -d "yesterday" +%Y%m%d).log
nginx_pid=`ps aux |grep -E 'nginx: master process'|grep -v 'grep'|awk '{print $2}'`
kill -USR1 $nginx_pid

然后,在linux计划任务中添加每天执行一次的任务。

命令:crontab -e
添加:
1 0 * * * sh /*/nginx_access_log.sh
保存即可。

测试运行:
./nginx_access_log.sh

如果每天要其自动执行的话,重启下crond服务即可。
#service crond stop
然后,启动crond服务:
service crond start
即可正常使用了。

二、Nginx大日志文件切割方法

方式一:
每分钟分割一次NGINX访问日志。
1、nginx日志配置
 

代码示例:
access_log access_log /data/access_log_pipe main;

2、首先,创建一个命名管道
 

代码示例:
mkfifo /www/log/access_log_pipe

3、配置cronolog:
 

代码示例:
nohup cat /data/access_log_pipe | /usr/local/sbin/cronolog /data/log/domain.access_%Y%m%d%H%M.log &

4、启动Nginx
 

代码示例:
/usr/local/nginx/sbin/nginx

注意:
cronolog必须在nginx启动前启动。没有安装cronolog的话,需要先安装
 

代码示例:
wget http://cronolog.org/download/cronolog-1.6.2.tar.gz
tar zxvf cronolog-1.6.2.tar.gz
cd cronolog-1.6.2
./configure
 make
make install

方式二:
定时任务中每小时添加定时任务,执行一下脚本,可以实现小时日志分割
 

代码示例:
log_dir="/var/log/nginx"
date_dir=`date +%Y/%m/%d/%H`
/bin/mkdir -p ${log_dir}/${date_dir} > /dev/null 2>&1
/bin/mv ${log_dir}/access.log   ${log_dir}/${date_dir}/access.log
kill -USR1 `cat /opt/nginx/logs/nginx.pid`

方式三:
使用logrotate做nginx日志轮询,这也是很多nginx配置教程中力荐的日志切割方法。

logrotate实现日志轮询,只把任务配置放在/etc/logrotate.d/下,任务就会自动完成,而且无需安装,系统自带,推荐使用.
vi /etc/logrotate.d/nginx 
 

代码示例:
/usr/local/nginx/logs/www..log /usr/local/nginx/logs/nginx_error.log {
notifempty
daily
sharedscripts
postrotate
/bin/kill -USR1 `/bin/cat /usr/local/nginx/nginx.pid`
endscript
}

多个日志以空格分开,
notifempty 如果日志为空则不做轮询
daily 每天执行一次
postrotate 日志轮询后执行的脚本
这样,每天都会自动轮询,生成nginx.log.1-n 

小结:
测试时,新建线程组:线程数200,循环150,新建http请求,请求nginx上的图片,请求30000次,失败326次,后台形成5个文件,行数如下:
  

2868 access_201112182030.log
   7777 access_201112182031.log
   7626 access_201112182032.log
   7873 access_201112182033.log
   3530 access_201112182034.log
  29674 total

并没有因为切分文件而丢失日志。

三,每天自动分割Nginx日志文件
首先,创建日志分割脚本。
1、登录SSH,创建cut_logs.sh文件
vi /root/cut_logs.sh

2、粘贴下面代码到cut_logs.sh,并保存
 

代码示例:
#!/bin/bash
# The Nginx logs path
logs_path="/home/wwwlogs/"
mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
mv ${logs_path}www.juzihc.com.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/juzihc_$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)

3、添加cut_logs.sh执行权限
 

代码示例:
chmod +x /root/cut_logs.sh

4、设置cut_logs.sh启动时间

执行命令crontab -e进入编辑状态,添加以下代码,设置为每天0点01分启动:
01 00 * * * /root/cut_logs.sh
这样每天定时分割日志文件就设置成功了。
对于日志文件占太多空间的情况,还可以执行压缩tar,并设置删除多少天前的日志文件,这个大家有空的话,可以自行研究下。


    
最新技术文章:
▪linux系统中的列出敏感用户的脚本代码
▪a10 config backup for aXAPI
▪一键备份gitolite服务器的Shell脚本
▪nagios 分发文件实现代码
▪阿里云云服务器Linux系统更新yum源Shell脚本
▪一个监控LINUX目录和文件变化的Shell脚本分享
▪Linux下实现SSH免密码登录和实现秘钥的管理、...
▪Shell正则表达式之grep、sed、awk实操笔记
▪3个备份系统文件并邮件发送的Shell脚本分享
▪CentOS 6.3下给PHP添加mssql扩展模块教程
▪监控网站是否可以正常打开的Shell脚本分享
▪shell脚本编程之if语句学习笔记
▪shell脚本编程之循环语句学习笔记
▪shell脚本编程之case语句学习笔记
▪Shell脚本实现的阳历转农历代码分享
▪Shell脚本实现复制文件到多台服务器的代码分...
▪Shell脚本实现批量下载网络图片代码分享
▪Shell脚本实现检测文件是否被修改过代码分享
▪Shell脚本数组用法小结
▪Shell脚本批量重命名文件后缀的3种实现
▪C语言实现的ls命令源码分享
▪Linux下查找后门程序 CentOS 查后门程序的shell脚...
▪Shell 函数参数
▪linux shell 自定义函数方法(定义、返回值、变...
▪Shell实现判断进程是否存在并重新启动脚本分...
▪Shell脚本break和continue命令简明教程
▪Shell脚本函数定义和函数参数
▪让代码整洁、过程清晰的BASH Shell编程技巧
▪shell常用重定向实例讲解
▪awk中RS、ORS、FS、OFS的区别和联系小结
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3