说说我用Ngnix来做些什么

文章类别 in tool

小明和小王因为分布式系统架构的事情,结果…中,提到了小明因为并发量太大用Nginx代理转发服务器,然后有小伙伴在我的公众号后台留言问我关于Nginx的东西,所以就索性写一篇关于我使用到Nginx的内容吧。

Nginx可以做什么呢?

1.Nginx可以做HTTP服务器,可以利用它来做一些静态资源的访问服务器,例如我们系统用到的图片,可以用Nginx服务器来专门访问我们的图片系统。

例如,有一个电商的网站,当有商品在系统中上架时,可以将上架的商品图片存放到我们的图片服务器,当我们需要这个商品的详情的时候,就可以通过Nginx去访问相应的图片。nginx比apache占用的cpu资源少,在高并发的情况下能保持低资源低消耗高性能。

2.Nginx可以做虚拟主机,可以在同一台服务器上运行多个网站,而且呢,这些不同网站是不会互相干扰的,在区分不同的网站我们可以通过不同的IP,不同的端口和不同的域名三种方式区分,但是一般使用的最多的就是使用域名来区分。例如通过www.a.com来访问a网站,通过www.b.com来访问b网站,并且a.com和b.com是基于同一个ip地址的。

虚拟主机的配置可以在nginx的conf文件中进行配置,在配置文件中每个server节点就代表一个虚拟主机。例如我想要配置www.a.com来访问a网站,通过www.b.com来访问b网站就可以这样子:

 server {
        listen       80;
        server_name  www.a.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   a/html; //指向a.com的网站
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }



 server {
	        listen       80;
	        server_name  www.b.com;
	
	        #charset koi8-r;
	
	        #access_log  logs/host.access.log  main;
	
	        location / {
	            root   b/html; //指向b.com的网站
	            index  index.html index.htm;
	        }
	
	        error_page   500 502 503 504  /50x.html;
	        location = /50x.html {
	            root   html;
	        }
	
	    }

配置好文件我们保存然后将Nginx reload一下之后,我们这时候访问www.a.com时Nginx就会去请求a网站给我们,同样访问www.b.com就会去请求b的网站,他们之间互不影响,且又绑定在同一个ip上。这种对于一些多个小的网站,绑定在同一个ip上是很好的实现方式。

3.Nginx可以进行负载均衡的反向代理,反向代理就是当你的网站因为并发量太大,部署在了多个服务器上,那么当用户去访问你的网站的时候,不知道去访问哪个服务器,这时候Nginx就是来帮忙进行反向代理请求的,也就是用户访问Nginx,然后Nginx帮用户去请求某一个Nginx认为该访问的服务器。

负载均衡反向代理的使用也是通过Nginx的文件进行配置的:

在conf中通过upstream来配置要代理的服务器:

	upstream tomcatserver1{
		server 192.168.88.61;
		server 192.168.88.62;
	}

其中还可以定义这些服务器的负载权重,是否参与负载等,可以在ip地址后面添加定义:

down 表示单前的server暂时不参与负载

weight 默认为1,weight越大,负载的权重就越大

backup 其它所有的非backup机器down或者忙的时候,就会请求backup机器。所以这台机器压力会是最轻的。

max_fails 允许请求失败的次数默认为1.当超过最大次时,返回proxy_next_upstream 模块定义的错误

fail_timeout: max_fails次失败后,暂停的时间。

比如 server 192.168.88.61 weight=2; 就代表192.168.88.61这个服务器会被访问的权重更多。

在server中配置域名和端口号,然后用proxy_pass去访问我们刚刚定义的upstream:

	server {
    listen       80;
    server_name  wistbean.server1.com;

   
    location / {
       proxy_pass http://tomcatserver1;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

}

 Nginx在Linux上安装

1.首先需要安装Nginx的依赖环境:

yum install -y openssl openssl-devel > OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。 > nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。

yum install -y zlib zlib-devel > 多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip

yum install -y pcre pcre-devel > nginx的http模块使用pcre来解析正则表达式

yum install gcc-c++ > 安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境

2.下载Nginx:http://nginx.org/en/download.html ,例如下载1.8.1版本可以 wget http://nginx.org/download/nginx-1.8.1.tar.gz

3.解压Nginx tar -zxvf nginx-1.8.0.tar.gz

4.参数配置

	./configure \
	--prefix=/usr/local/nginx \
	--pid-path=/var/run/nginx/nginx.pid \
	--lock-path=/var/lock/nginx.lock \
	--error-log-path=/var/log/nginx/error.log \
	--http-log-path=/var/log/nginx/access.log \
	--with-http_gzip_static_module \
	--http-client-body-temp-path=/var/temp/nginx/client \
	--http-proxy-temp-path=/var/temp/nginx/proxy \
	--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
	--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
	--http-scgi-temp-path=/var/temp/nginx/scgi

将以上复制到Linux执行一遍。然后需要到/var/temp/中创建nginx目录。

mkdir nginx

5.编译安装 make make install

6.启动

进入nginx的sbin目录: cd /usr/local/nginx/sbin ./nginx 开始启动了…

7.关闭 ./nginx -s stop

8.重新加载配置文件 ./nginx -s reload