标签为‘Nginx’的文章

nginx目前所有版本存在的高危漏洞

这个漏洞是国内的安全组织80sec发现的,经过测试老纪博客也存在这个问题,这个漏洞适合现在所有nginx+php服务器,有使用的朋友赶快进行修改
漏洞介绍及补救方式
漏洞介绍:nginx是一款高性能的web服务器,使用非常广泛,其不仅经常被用作反向代理,也可以非常好的支持PHP的运行。80sec发现其中存在一个较为严重的安全问题,默认情况下可能导致服务器错误的将任何类型的文件以PHP的方式进行解析,这将导致严重的安全问题,使得恶意的攻击者可能攻陷支持php的nginx服务器。
漏洞分析:nginx默认以cgi的方式支持php的运行,譬如在配置文件当中可以以

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;
}

的方式支持对php的解析,location对请求进行选择的时候会使用URI环境变量进行选择,其中传递到后端Fastcgi的关键变量SCRIPT_FILENAME由nginx生成的$fastcgi_script_name决定,而通过分析可以看到$fastcgi_script_name是直接由URI环境变量控制的,这里就是产生问题的点。而为了较好的支持PATH_INFO的提取,在PHP的配置选项里存在cgi.fix_pathinfo选项,其目的是为了从SCRIPT_FILENAME里取出真正的脚本名。
那么假设存在一个http://www.80sec.com/80sec.jpg,我们以如下的方式去访问http://www.80sec.com/80sec.jpg/80sec.php将会得到一个URI /80sec.jpg/80sec.php,
经过location指令,该请求将会交给后端的fastcgi处理,nginx为其设置环境变量SCRIPT_FILENAME,内容为 /scripts/80sec.jpg/80sec.php
而在其他的webserver如lighttpd当中,我们发现其中的SCRIPT_FILENAME被正确的设置为
/scripts/80sec.jpg
所以不存在此问题。
后端的fastcgi在接受到该选项时,会根据fix_pathinfo配置决定是否对SCRIPT_FILENAME进行额外的处理,一般情况下如果不对fix_pathinfo进行设置将影响使用PATH_INFO进行路由选择的应用,所以该选项一般配置开启。Php通过该选项之后将查找其中真正的脚本文件名字,查找的方式也是查看文件是否存在,这个时候将分离出SCRIPT_FILENAME和PATH_INFO分别为/scripts/80sec.jpg和80sec.php
最后,以/scripts/80sec.jpg作为此次请求需要执行的脚本,攻击者就可以实现让nginx以php来解析任何类型的文件了。
POC: 访问一个nginx来支持php的站点,在一个任何资源的文件如robots.txt后面加上/80sec.php,这个时候你可以看到如下的区别:
访问http://www.80sec.com/robots.txt

HTTP/1.1 200 OK
Server: nginx/0.6.32
Date: Thu, 20 May 2010 10:05:30 GMT
Content-Type: text/plain
Content-Length: 18
Last-Modified: Thu, 20 May 2010 06:26:34 GMT
Connection: keep-alive
Keep-Alive: timeout=20
Accept-Ranges: bytes

访问访问http://www.80sec.com/robots.txt/80sec.php

HTTP/1.1 [...]

More »

Nginx加Comet:低延迟的服务器端推送

要做实时的网络程序,比如在线聊天等,现在的技术有两种,一种是拉(pull)、一种是推(push),哪种方式好我相信接触网络的朋友们都知道,服务器端推送服务这种方式能够满足完全的实时交互,不需要客户端做太多的东西。NGiNX_HTTP_Push_Module这个nginx的插件就是为了这个目的来做的,它保持客户的长连接状态(当然了,不是每个客户一个线程,而是采用事件方式来处理,即保持了连接状态,又节约了资源,这就是nginx这个轻量级web服务器的可爱之处)并且维护一个事件队列,提供发布者和订阅者服务。
要使用它,需要编译ngnix,从http://pushmodule.slact.net/下载模块,使用

./configure –add-module=/path/to/plugin && make && make install

进行编译,并参考Readme和http://github.com/slact/nginx_http_push_module/blob/master/protocol.txt这两个文件来学习配置,下面是一个比较简单的发布、订阅模型

More »

nginx的几点优化

在calomel.org这个网站上看到关于nginx的几个优化,觉得比较有用,并且能够方便大家配置nginx,所以翻译过来。
1. nginx关于服务静态文件的配置
我们的目标是配置一个服务最快且cpu/io利用最有效的服务器,更重要的是一个安全的web服务器,下面的配置文件适用于最新版nginx。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#######################################################
### Calomel.org /etc/nginx.conf BEGIN
#######################################################
#
pid /var/run/nginx.pid;
user nginx nginx;
worker_processes 2;
 
events {
worker_connections 1024;
}
 
http {
## MIME types
include [...]

More »

短小、精悍、稳定、负载能力强的轻量级web服务器-nginx

曾经说了好多次nginx,都是说其配置什么的,但是对于window版的nginx来说还有其他重要用途,就是调试你的网络程序,比如老纪做的“老纪采集器”为了调试方便就用nginx在本机做web服务器,这样大文件的下载速度就快了,这样加快了调试速度,对于定位问题和程序排错是大有帮助的。想终止服务器就在任务管理器中结束进程即可。window版nginx大小700多K,没见过那个能负载上百万、上千万级的服务器这么小,呵呵,今天老纪就推荐他。
ngnix简介:Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器 。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的Rambler.ru 站点开发的,它已经在该站点运行超过四年多了。Igor 将源代码以类BSD许可证的形式发布。自Nginx 发布四年来,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。目前国内各大门户网站已经部署了Nginx,如新浪、网易、腾讯等;国内几个重要的视频分享网站也部署了Nginx,如六房间、酷6等。新近发现Nginx 技术在国内日趋火热,越来越多的网站开始部署Nginx。
配置可参考:Linode VPS的申请和设置及基于Nginx的WordPress详细配置
双击nginx图标即可运行程序

More »

nginx源代码分析-兴趣即其

nginx作为一个轻量级web服务器现在也来越受到关注,因其负载能力强、配置灵活、内存足印小无泄露、静态页面响应速度快而在很多大型网站上得到使用。
老纪去年接触过nginx,对其源代码也看了一二,给人的感觉就是条理清楚,干净,特别对于代码优化做的比较好,整个代码调用new的地方很少,相比lighttpd用的new就比较多,这也就是网上说的nginx的内存管理比lighttpd好的直接原因。
要想榨取一台机子的最后一滴血,除了从操作系统下手之外,web服务器也要知晓其内部工作机理,这样就能够对整体有所把握。所以对于这方面需求比较强的朋友大可以分析一下。老纪也准备加入这个行列,没有特别的目的,学习学习总是好的。以后老纪博客上会有相关文章出现,敬请关注

More »

jetty-nginx在linux上的配置

今天看到马云的一段话,咱别的不说,感觉还是不错的:钱和财富是两个概念,有钱绝不等于拥有财富。财富更是一种经历,一种体验,“如果没有能把钱提升转化成经历、体验来提升自己和他人的幸福感,你很可能只是拥有了很多符号和一堆花花绿绿的纸张,只有能并会花好钱的人才可能有创造更多的钱、更多的财富、更多幸福的机会”。呵呵,啥时候我能把钱和财富分开来看就说明我已经比较成功了.
闲话少说,不偏离主题,老纪的“久久婚恋网”要用到jetty这个用java编写的web服务器来运行网站,所以就了解了一下它的配置。结构就是以nginx作为前端来连接jetty服务器的。整个操作如下:

下载编译安装nginx
请参阅《Linode VPS的申请和设置及基于Nginx的WordPress详细配置》
下载jetty到当前目录

wget http://dist.codehaus.org/jetty/jetty-6.1.20/jetty-6.1.20.zip
unzip *.zip
#编辑/etc/profile,添加
JETTY_HOME=解压的jetty目录
export JETTY_HOME

至此,安装jetty完成,启动jetty

installdir/bin/jetty.sh start

jetty目录结构如下

* contexts 热部署目录
* etc jetty配置文件目录
* examples jetty示例
* extras jetty可选扩展
* lib 包含jetty所需的jar文件
* LICENSES 就是LICENSES
* modules 子模块
* patches 补丁patches
* pom.xml is jetty的maven2构建文件
* project-website jetty6网站
* README.txt readme.txt
* start.jar is jetty6主程序
* VERSION.txt
* webapps应用路径,发布的引用基本都放这里
* webapps-plus webapps中引用的一些扩展属性

在nginx.conf中配置虚拟主机

server {
listen 80;
server_name [...]

More »

开源Web服务器集锦

现在世界上绝大部分web服务器基本使用的都是开源的,开源的好处就是发现的问题能够迅速解决,促使其更好更完善。
虽然老纪对这方面的东西还不是太熟悉,但是已经摸索了一段时间,现在的任务是把他们都找出来,列出他们的优缺点,好让要使用它们的朋友有个参考
1. Apache
Apache是Apache Software Foundation的一款开源的Web服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。据说Google的Web服务器GWS也是一种修改版的Apache。
优点:

支持HTTP/1.1协议。Apache是最先使用HTTP/1.1协议的Web服务器之一,它完全兼容HTTP/1.1协议并与HTTP/1.0协议向后兼容。Apache已为新协议所提供的全部内容做好了必要的准备。
支持通用网关接口(CGI)。Apache用mod_cgi模块来支持CGI,它遵守CGI/1.1标准并且提供了扩充的特征,如定制环境变量和很难在其他Web服务器中找到的调试支持功能。
支持HTTP认证。Apache支持基于Web的基本认证,它还为支持基于消息摘要的认证做好了准备。Apache通过使用标准的口令文件DBM SQL调用,或通过对外部认证程序的调用来实现基本的认证。
集成的Perl语言。Perl已成为CGI脚本编程的基本标准。Apache肯定是使Perl成为这样流行的CGI编程语言的因素之一,现在Apache 比以往任何时候都更加支持Perl,通过使用它的mod_perl模块你可以将基于Perl的CGI脚本装入内存,并可以根据需要多次重复使用该脚本。这消除了经常与解释性语言联系在一起的启动开销。
集成的代理Proxy服务器。Apache可作为前向代理服务器也可作为后向代理服务器。
支持CGI脚本,如Perl, PHP等。
服务器的状态和可定制的日志。Apache在记录日志和监视服务器本身状态方面向你提供了很大的灵活性,可以通过Web浏览器来监视服务器的状态,也可根据自己的需要来定制日志。
允许根据客户主机名或IP地址限制访问。
支持虚拟主机。即通过在一个机器上使用不同的主机名来提供多个HTTP服务。Apache支持包括基于IP、名字和Port三种类型的虚拟主机服务。
支持用户Web目录。Apache允许主机上的用户使用特定的目录存放用户自己的主页。
支持多进程。当负载增加时,服务器会快速生成子进程来处理,从而提高系统的响应能力。
支持FastCGI。Apache使用mod_fcgi模块来实现FastCGI环境,并使FastCGI应用程序运行得更快。
支持Java Servlets。Apache的mod_jserv模块支持Java Servlets该项功能,可使Apache运行服务器的Java应用程序。
用户会话过程的跟踪能力。通过使用HTTP cookies,一个称为mod_usertrack的Apache模块可以在用户浏览Apache Web站点时对用户进行跟踪。
支持服务器包含命令SSI。Apache提供扩展的服务器包含命令该项功能,为Web站点开发人员提供了更大的灵活性。
支持安全Socket层(SSL)。
支持动态共享对象。Apache的模块可在运行时动态加载,这意味着这些模块可以被装入服务器进程空间,从而减少系统的内存开销。

缺点

占用内存大,每个请求生成一个Apache进程或者线程进行处理
并发能力差,其主要原因是Apache所采用的select网络I/O模型非常低效。具网上的一些评测4000并发/秒就就已经到头了
同样的系统承载量,Apache需要更高的硬件配置,这对节约成本上来说是有劣势的,呵呵

More »

Linode vps的社区文档中心

今天上Linode网站,看到一则新发的新闻,“Presenting the Linode Library”看了看内容是关于如何更easy的让用户找到问题答案的,因为Linode VPS都是基于Linux的,对于新手来说配置VPS不是一件很容易的事情,在网上能够找到一些答案,但大多数只涉及一些简单概念和安装,而Linode本身提供的这个社区文档中心的内容是从他们的IRC收集的有用的vps解决方案,看来对于使用Linode VPS的用户来说是个好消息,东西好但文档资料没有跟上的话,就会让很多人感到不适应的,就好像nginx,去年用的时候文档就很少,很高兴看看相关它的wiki内容越来越全了。

More »

Linode VPS的申请和设置及基于Nginx的WordPress详细配置

老纪博客的开篇之作是什么?想了想还是就写怎么申请Linode VPS,怎么配置简单的防火墙和怎么设置Nginx服务器及PHP Fast-CGI吧,因为没有这些,就没有老纪博客的存在,呵呵,开始啦。
本教程包括3个部分:

Linode VPS 申请及设置
Nginx服务器的编译及配置和PHP-FastCGI设置
配置wordpress,你自己的博客

More »