漫漫长夜中茁壮成长的Nginx业已成为Web服务器中比较流行的软件,虽然现在Apache占大部分主流,但Nginx始终是个小趋势:原因就在于Nginx支持更大的并发量,比较适用高性能高并发的生产环境中;而Apache则比较适用于高稳定性的开发环境当中.两个Web服务器软件之间的关系只能说是各司其职,各为其主罢了.说到Web服务器,微软的IIS是大家最熟悉不过的,它可以通过向导搭建服务,这对于初学者来说比较容易接受,但在我看来,冷冰冰的命令行才是我的最爱(he he).今天我们来说说Nginx的配置文件吧.对于部署安装的话,大家可以去百度一下~~
Begin:
Nginx是模块化设计的软件,主配置文件中有很多关键字组成,每个关键字后都带 {} 中括号将参数包含起来,而参数就没有{}中括号。
软件我一般会安装在/usr/local/ 下,所以我的配置文件在/usr/local/nginx/conf/nginx.conf (默认的我就不显示出来了)
注意!:注意关键字插入的位置,注意空格位置。我在这里所说明的,只是对应关键字应该插入的位置以及关键字与参数的作用和关系,
只供参考使用,因为有些关键字和参数并不能共存,有些却是联系在一起的。
stream { //基于TCP/UDP的调度.以ssh为例,所需模块:stream;
upstream backed-ssh {
server 192.168.2.100:22;
server 192.168.2.200:22;
}
server {
listen 12345;
proxy_pass backed-ssh;
}
}
http {
worker_processes 1; //工作的线程数,此数越高,消耗的资源越大,处理的请求数越快,一般与CPU核心数量一致;
worker_connections 65536; //每个worker最大并发连接数,最大是65536;
client_header_buffer_size 1k; //默认请求包头信息的缓存,解决URL太长的问题;
client_body_buffer_size 1K; //此指令设置用于请求主体的缓冲区大小;
client_max_body_size 1k; //此指令设置用于请求主体的最大缓冲区大小;
large_client_header_buffers 4 1m; //大请求包头部信息的缓存个数与容量,将URL设置为4个1M大小,即使是很大的URL请求也不报401;
server_tokens off; //不显示版本号,保证服务器相对安全,防止黑客找到漏洞
net.ipv4.tcp_syncookies=1; //表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN
攻击,默认为0,表示关闭;
net.ipv4.tcp_fin_timeout = 1 //如果套接字由本端要求关闭,这个参数决定了它保持在 FIN-WAIT-2 状态的时间。对端可以出
错并永远不关闭连接,甚至意外当机。缺省值是 60 秒。2.2 内核的通常值是 180 秒,你可以
按这个设置,但要记住的是,即使你的机器是一个轻载的 WEB 服务器,也有因为大量的死套接
字而内存溢出的风险,FIN- WAIT-2 的危险性比 FIN-WAIT-1 要小,因为它最多只能吃掉
1.5K 内存,但是它们的生存期长些;
net.ipv4.tcp_syn_retries = 1 //在内核放弃建立连接之前发送SYN包的数量;
net.ipv4.tcp_synack_retries = 1 //为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓
三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量;
gzip on; //开启压缩,提高传输速度;
gzip_min_length 1000; //小文件不压缩,因为对于小文件来说没必要压缩,压缩完后反而会更大;
gzip_comp_level 4; //压缩比率;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; //对特定文件压缩,类型参考mime.types;
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; //限制并发量;
upstream webserver {
ip_hash; //可以让相同客户端访问相同web服务器,因为调度器调度后端的服务器有N台,有时要规定
哪个客户端要访问特定服务器;
server 套接字(ip:port) [weight=1..] [max_fails=1..] [fail_timeout=20..]; //这是添加一个后端服务器的基本语法格式;max_fails
表示最大失败访问次数.默认1,尝试连接一次;
fail_timeout表示访问失败停滞时间.一但访问失败后,
N秒后才恢复访问.(客户机在N秒内不访问它);
server 192.168.0.1:80 weight=1 max_fails=1 fail_timeout=20; //这是一个示例;
server 192.168.0.2:8080 weight=2; //这是另一个示例,但监听在8080,我们都知道Tomcat;
... //可以添加N个server;
}
server{
listen 80;
server_name localhost;
limit_req zone=one burst=5;
error_page 404 /404.html; //可自定义错误页面(404为例),将注释去掉,再换成自己想要的网页文件就可以 ;
location / {
root html;
index index.php index.html index.htm; //限制并发量;
if ($request_method !~ ^(GET|POST)$) { //只允许GET|POST方法请求数据,拒绝非法连接;
return 444;
}
}
location ~* \.(jpg|png)$ {
expires 30d; //期满时间,定义客户端对于以.jpg或.png结尾的文件只缓存30天;
}
location ~\.php$ {
root html;
fastcgi_pass 127.0.0.1:9000; //跳转到本机的服务器.调用PHP-fpm 实现动态解析;
fastcgi_index index.php;
}
location / {
proxy_pass webserver; //调度器调度的后端服务器的upstream组的名字;一旦客户来访问服务器,会直接调用
webserver组中的服务器,这时本机充当调度器的角色;
}
location /status {
stub_status on; //需要添加模块:http_stub_status_module: Web服务器状态,设置完成后,在浏览器
中输入 http://127.0.0.1/status 就可以看到服务器的状态信息;
}
if ($http_user_agent ~* firefox) {
rewrite ^/(.*) /xx/$1 break|last|redirect|permament; //地址重写,注意!if是一种条件;这段的意思是如果是用firefox
来访问的客户端就将其地址重写到网页根目录的xx目录下;
}
}
}
Make-Up:
http_ssl_module: Nginx的ssl模块,可以支持https协议,在数据传输中加密传输;
假设你已经搭建了Nginx并配置好了http_stub_status_module模块,在访问http://127.0.0.1/status时会看到以下参数:
Active connections:当前活动的连接数量;
Accepts:已经接受客户端的连接总数量。
Handled:已经处理客户端的连接总数量(一般与accepts一致,除非服务器限制了连接数量)。
Requests:客户端发送的请求数量。
Reading:当前服务器正在读取客户端请求头的数量。
Writing:当前服务器正在写响应信息的数量。
Waiting:当前多少客户端在等待服务器的响应。
END:
其实说这么多,对于Nginx我是认识的不多,但不难发现,只要有哪些不懂的,大家都可以上官网查一下;比如Nginx模块的作用是什么,调度器究竟是什么,都是在官网可以查看到的;好了,我要睡觉去了。。。。
原文地址:http://blog.51cto.com/chenjunye/2106581