Nginx是什么?
Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器.(from http://wiki.nginx.org/Chs)
Nginx一般来说, 在windows下是无法体现其性能和优点的, 但是在windows下学习nginx的配置是一个不错的方法.
nginx的官方网站: http://nginx.org/, 目前最新版是1.0.1
本文的例子下载地址:
运行方法:
- 修改hosts文件, 添加两个域名解析到本地
- 运行nginx.exe
- 在浏览器中输入localhost, 查看效果
- 输入icejoywoo.com, 查看效果
- 输入icejoywoo.org, 查看效果
首先认识一下hosts文件
windows xp下的路径
C:\WINDOWS\system32\drivers\etc\hosts
linux下的路径
/etc/hosts
用文本编辑器打开这个文件, 我在windows下使用的是notepad++, linux下可以使用emacs或vim
一般可以看到这样一句(linux下的这行会有些不同)
127.0 . 0.1 localhost
这个是用来解析localhost的, 一般来说, 域名解析的顺序是这样的.
- 在本地的hosts文件处解析
- DNS服务器解析
可以从顺序中看到hosts文件的优先级比DNS服务器高.
我们在hosts中添加两行
127.0
.
0.1
icejoywoo
.
org
127.0
.
0.1
icejoywoo
.
com
这样, 我们就可以在本地解析两个域名
完整的hosts文件如下
#
The IP address and the host name should be separated by at least one
#
space
.
#
#
Additionally
,
comments
(
such as these
)
may be inserted
on
individual
#
lines or following the machine name denoted by a '
#
' symbol
.
#
#
For
example:
#
#
102.54
.
94.97
rhino
.
acme
.
com
#
source server
#
38.25
.
63.10
x
.
acme
.
com
#
x client host
127.0
.
0.1
localhost
127.0
.
0.1
icejoywoo
.
org
127.0
.
0.1
icejoywoo
.
com
nginx.conf的配置如下
配置的效果是, 使用localhost或IP直接访问时候, 返回500, 服务器内部错误.
使用icejoywoo.org域名访问的是html/org目录
使用icejoywoo.com域名访问的是html/com目录
默认主页为index.html和index.htm
#
user nobody
;
worker_processes
1
;
#
error_log logs
/
error
.
log
;
#
error_log logs
/
error
.
log notice
;
#
error_log logs
/
error
.
log info
;
#
pid logs
/
nginx
.
pid
;
events {
worker_connections
1024
;
}
http {
include mime
.
types
;
default_type application
/
octet-stream
;
sendfile
on
;
#
keepalive_timeout
0
;
keepalive_timeout
65
;
#
gzip
on
;
server
{
listen
80
default
;
server_name _
;
return
500
;
}
server {
listen
80
;
server_name icejoywoo
.
com
;
location
/
{
root html
/
com
;
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 html
;
}
}
server {
listen
80
;
server_name icejoywoo
.
org
;
#
charset koi8-r
;
#
access_log logs
/
host
.
access
.
log main
;
location
/
{
root html
/
org
;
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 html
;
}
}
}
为什么Nginx的性能要比Apache高得多?这得益于Nginx使用了最新的epoll(Linux 2.6内核)和kqueue(freebsd)网络I/O模型,而Apache则使用的是传统的select模型。目前Linux下能够承受高并发访问的 Squid、Memcached都采用的是epoll网络I/O模型。
处理大量的连接的读写,Apache所采用的select网络I/O模型非常低效。下面用一个比喻来解析Apache采用的select模型和Nginx采用的epoll模型进行之间的区别:
假设你在大学读书,住的宿舍楼有很多间房间,你的朋友要来找你。select版宿管大妈就会带着你的朋友挨个房间去找,直到找到你为止。而epoll版 宿管大妈会先记下每位同学的房间号,你的朋友来时,只需告诉你的朋友你住在哪个房间即可,不用亲自带着你的朋友满大楼找人。如果来了10000个人,都要 找自己住这栋楼的同学时,select版和epoll版宿管大妈,谁的效率更高,不言自明。同理,在高并发服务器中,轮询I/O是最耗时间的操作之 一,select和epoll的性能谁的性能更高,同样十分明了。