Nginx

2015年01月16日

简单学习下nginx


###常用web服务器的介绍

apache:功能完善,历史悠久

缺点:处理每一个php比较费资源,导致如果高并发时会太耗费服务器资源无法处理更多请求。

nginx:省资源,省cpu,所以在高并发时能够处理更多的请求,高端能达到3万到5万的并发量。

###nginx的了解

Nginx(”engine x”)是俄罗斯人编写的一款高性能的HTTP和反向代理服务器。Nginx是Apache服务器不错的替代品,它能够支持高达50000个并发连接数的响应,而内存,cpu等系统资源消耗却非常低,运行非常稳定。

在国内,已经有新浪博客,新浪播客,网易新闻,六间房,56.com,discuz!等多家网站使用Nginx作为web服务器或反向代理服务器。

###nginx特点

  • 可以高并发连接,官方测试能够支撑5万并发连接,在实际生产环境中可以支撑2到4万并发连接。

  • 内存消耗少

    Nginx+php(FastCGI)服务器再3万并发连接下,开启的10个Nginx进程消耗150MB内存(15MB10=150MB)开启的64个php-cgi进程消耗1280MB内存(20MB64=1280MB)

  • 成本低廉

    购买F5 BIG-IP ,NetScaler等硬件负载均衡交换机需要10多万甚至几十万人民币。而Nginx为开源软件,可以免费试用,并且可用于商业用途。

  • 其他理由:

  1. 配置文件非常简单:通俗易懂,即使非专业管理员也能看懂。
  2. 支持 rewrite重写规则:能根据域名、URL的不同,将HTTP请求分到不同的后端服务器群组。
  3. 内置的健康检查功能:如果nginx proxy后端的某台服务器宕机了,不会影响前端访问。
  4. 节省带宽,支持gzip压缩。
  5. 稳定性高:用于反向代理,宕机的概率微乎其微。
  6. 支持热部署。在不间断服务的情况下,对软件版本升级。

###支持的操作系统

FreeBSD 3.x,4.x,5.x,6.x i386; FreeBSD 5.x,6.x amd64;

Linux 2.2,2.4,2.6 i386; Linux 2.6 amd64;

Solaris 8 i386; Solaris 9 i386 and sun4u; Solaris 10 i386;

MacOS X (10.4) PPC;

Windows XP,Windows Server 2003和Windows 7

###nginx 的安装,(window下面的安装)

  • 解压软件,并拷贝到指定的目录

  • 黑窗口进入到nginx命令所在的目录,执行start nginx命令即可

  • 可以查看是否启动成功,执行netstat -an命令查看80端口是否开启

  • 浏览器进入localhost看是否出现welcome to nginx

打完收工-.-真的好简单

###关于nginx的一些命令

start nginx//启动nginx服务。 
nginx -s stop // 停止nginx
nginx -s reload // 重新加载配置文件,无需重启 nginx服务器。
nginx -s quit // 退出nginx

###虚拟主机的配置

简单观察下,发现一个server就是一个虚拟主机则配置如下

server{
        listen       80;				#端口号
        server_name  www.lalala.com;	#域名
        location / {
            root    lalala; 			#网站根目录
            index index.html index.htm;	
        }
    }

这只是简单的虚拟主机,并不能解析php文件,并且别忘了配置完成后执行nginx -s reload重新加载配置文件

###配置nginx支持PHP

在nginx中,php不是作为一个模块出现在nginx里面。php是作为一个独立进程运行的。该进程的端口是9000端口。当nginx遇到php文件时,交给9000端口来处理。

  • 配置php加载扩展文件的位置
;设置mysql路径
 extension_dir = "F:\PHP\ext"
  • 配置时区
date.timezone = PRC
  • 配置让php 作为独立进程运行
;让php作为独立进程运行
cgi.fix_pathinfo=1
  • 打开nginx.conf的配置文件,把如下代码解除封印
location ~ \.php$ {
            root           lalala;			#网站根目录
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
  • 重启下nginx,也可以查看是否启动成功,执行netstat -an命令查看80端口与9000端口是否开启

  • phpinfo()函数测试下是否成功吧-.-

###配置nginx expires缓存功能

对于图片,css,js等元素更改机会较少,特别是图片,可以将图片设置在浏览器本地缓存365天,css,js缓存10天,这样可以提高下次打开用户页面加载速度,并节省大量带宽。此功能同apache的expires。这里通过location的功能,将需要缓存的扩展名列出来,然后指定缓存时间:

location  ~.*\.(gif|jpg|jpeg|png|bmp)$
{	
	root abc;
	expires 365d;
}

###配置压缩

gzip on;  
#开启gzip压缩功能
gzip_min_length 1k;
#设置允许压缩的页面最小字节数,页面字节数从header头的content-length中获取。默认值是0,不管页面多大都进行压缩。建议设置成大于1k。如果小于1k可能会越压越大。
gzip_buffers 4 16k;
#压缩缓冲区大小。表示申请4个单位为16k的内容作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。
gzip_http_version 1.0;
#压缩版本(默认1.1,前端为squid2.5时使用1.0)用于设置识别http协议版本,默认是1.1,目前大部分浏览器已经支持gzip解压,使用默认即可。
gzip_comp_level 6;
#压缩比率。用来指定gzip压缩比,1压缩比量小,处理速度快;9压缩比量大,传输速度快,但处理最慢,也必将消耗cpu资源。
gzip_types text/plain application/x-javascript text/css application/xml;
#用来指定压缩的类型,“text/html”类型总是会被压缩。
gzip_vary on;
#vary header支持。该选项可以让前端的缓存服务器缓存经过gzip压缩的页面,例如用squid缓存经过nginx压缩的数据。

注意:不要对视频和图片配置压缩,对视频和图片压缩比较费资源,而且压缩效果不好。主要压缩对象是文本类型文件。

###配置负载均衡

  • 使用基于端口的虚拟主机可以配置模拟多台服务器:
    server {
        listen 81;
        server_name www.abc.com;
        location / {
            root 81;
            index index.html index.htm;
        }
    }
    server {
        listen 82;
        server_name www.abc.com;
        location / {
            root 82;
            index index.html index.htm;
        }
    }
  • 在nginx目录下面新建81和82的两个目录,并在两个目录里面分别新建两个文件,该两个文件的内容不要一样

  • 建立一个连接池

upstream  nihao {
        server www.123.com:81;
        server www.123.com:82;
    }
  • 配置一个域名为www.123.com的虚拟主机
server {
        listen 80;
        server_name www.123.com;
        location /{
            proxy_pass http://nihao; #连接池名字
            proxy_set_header Host $host;
            proxy_set_header X-Peal-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
  • 配置好hosts文件就可以开心的轮询了- -

版权所有:Arrow的代码之路    粤ICP备17138539号-1