前言

对于Nginx是什么,我觉得就是一个服务器,具有很多优点例如自由,开源,性能高的HTTP服务器以及反向代理服务器,他的主要功能是正向代理,反向代理,负载均衡,HTTP服务器。至于代理,就是一个增强服务功能的工具,与现实生活中的各种网上购票app,y以及代售点有点相似。

Nginx的反向代理功能

反向代理功能是Nginx的最常用功能之一,反向代理就是由代理服务器来接收Internet上的连接请求,并把它发送给内部网络的服务器,从内部网络上返回的信息结构返回到Internet上的客户端上,这时的代理服务器对外表现就是一个反向代理服务器。

至于为什么要使用代理,在实际的开发中,我们服务器的内网往往与外网是不同的,这时就需要一台代理服务器既可以访问外网又可以访问内网来做中转,这个代理服务器也就是反向代理服务器。Nginx作为反向代理服务器,简单的配置如下:

server {                     
        listen      80;           
        server_name  apiserver.com;    
        client_max_body_size 1024M;
                                 
        location / {             
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass  http://127.0.0.1:8080/;
            client_max_body_size 100m;
        }                        
    }

Nginx的负载均衡功能

负载均衡功能是Nginx的又一个常用的功能,这个功能就是当Nginx收到一个HTTP请求后,会根据它自己的负载均衡策略转发到不同的服务器上,所谓的均衡策略就是根据后端不同服务器不同的负责情况,选择负载小的优先选择。

安装和启动Nginx(下面都是linux下的操作,请先安装linux以及虚拟机)

首先切换为root用户

$su - root

安装Nginx

$ yum -y install nginx

确认是否安装成功

$ nginx -v

启动Nginx

$ systemctl start nginx

设置开机启动

$ systemctl enable nginx

查看Nginx启动状态

$ systemctl status nginx

配置Nginx作为反向代理

简单说一下配置的相关要点:
因为Nginx 默许客户端请求的俄最大单个文件的字节数为1MB,实际生产环境中1MB太小,所以这里将此限制改为5MB(client_max_body_size 5m) server_name 说明使用那个域名来访问 proxy_pass:反向代理的路径,如果是本机的API服务,IP就为本机的IP127.0.0.1

详细代码一般写在项目的conf目录里,下面就是文件nginx.conf的具体内容:

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;

    server {  
        listen      80;                                                        
        server_name  apiserver.com;                                              
        client_max_body_size 1024M;

        location / {
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass  http://127.0.0.1:8080/;
            client_max_body_size 5m;
        }
    } 
}

配置Nginx作为负载均衡

由于负载均衡需要多个后端服务,所以我们一般要在一个服务器上启动多个项目,并配置不同的端口,采用Nginx默认的轮询转发策略

轮询:按照请求的时间顺序分配到不同的后盾服务器上

在上述的nginx.conf中添加upstream

upstream  apiserver.com{
       server  127.0.0.1:8080;
       server   127.0.0.1:8082;
}

上面的apiserver是项目名称,可以更改的,但是对应的配置命名都要统一,改的时候不要遗漏

上面的 proxy_pass http://127.0.0.1:8080/; 改为 proxy_pass http://apisever.com/;

综上,无论是为了实现外网与内网的联系,还是在后序的业务开发中由于请求过大就要对API进行横向扩容时,都是需要Nginx的,他的作用在API服务部署时经常能派上用场。