开发互联网项目基本上就不得不使用到nginx,这里自己对nginx做一个总结。

ngnix是俄罗斯开发的一个轻量级的web服务器,优点就是占用内存少,并发处理能力强,目前国内大部分互联网项目都是使用到ngnix。

核心功能:分发请求。分发请求是nginx最核心的功能,是实现ngnix反向代理、负载均衡功能的前提。

一般在项目中,使用ngnix实现两个功能

ngnix作为http服务器

加载远程服务器资源如图片服务器、静态页面时,浏览器不能直接访问这些静态资源,必须遵循http协议,
ngnix就可以作为http服务器遵循http协议实现这些远程服务器资源访问。

ngnix作为反向代理服务器

在正向代理中中间代理服务器对于客户机是可见的(一般需要客户机自己配置),客户机通过代理服务器访问远程服务器,因为代理服务器是暴露状态,网络相对来说不够安全。
反向代理则代理服务器对于客户机是不可见的,一般是跟远程服务器绑定,用户只需要发送请求,不知道是否有通过代理来访问远程服务器,网络相对安全。

ngnix实现负载均衡

负载均衡:将所有请求平均分发到每台服务器。
作用:通过作为反向代理服务器实现,在集群项目中需要用到,提高了项目的并发访问量和容错性,实现项目高可用高并发的需求。

ngnix执行过程

ngnix根目录结构
    conf:核心配置文件
    html:静态资源
    sbin:执行命令文件

在conf目录下,有一个ngnix.conf文件,这个文件就是ngnix的核心配置文件,里面配置了ngnix服务端口,定位范围资源的路径,在ngnix启动的时候,就会默认该配置文件,对于ngnix的反向代理和负载功能的配置也是通过配置这个文件来实现的。

ngnix实现反向代理和负载均衡配置示例

配置ngnix也就是配置conf目录下的ngnix。conf配置文件。
实现两个不同服务器反向代理

worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    upstream e3mall{
    server 192.168.66.66:9001;
    }

    upstream jd{
    server 192.168.66.66:9000;
    }
    server {
        listen       80;
        server_name  www.e3mall.cn;
        location / {
            #root   html;
            #index  index.html index.htm;
        proxy_pass http://e3mall;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    server {
        listen       80;
        server_name  www.jd.com;
        location / {
            #root   html-81;
            #index  index.html index.htm;
        proxy_pass http://jd;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    } 
}

在server在声明代理地址 proxy_pass http://e3mall;再通过upstream e3mall{ }配置好实际的ip地址。

实现负载均衡

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    upstream e3mall{
    server 192.168.66.66:9000 weight=2;
    server 192.168.66.66:9001 weight=1;
    server 192.168.66.66:9002 weight=1;
    }

    server {
        listen       80;
        server_name  www.e3mall.cn;
        location / {
            #root   html;
            #index  index.html index.htm;
        proxy_pass http://e3mall;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }   
}

先使用反向代理 proxy_pass http://e3mall ,在通过upstream e3mall{ }配置负载均衡的几个服务器IP地址,weight表示在分发请求的占比,越高表示分到的请求越多,默认可以不写,以轮询的方式分发请求。