关于Nginx(反向代理/负载均衡/动静分离)

一、Nginx是个什么东西?

我理解为,其实就是个反向代理服务器,客户端请求这个服务器,这个Nginx服务器接收到请求,
然后根据nginx.conf里面的配置文件,
将请求均匀的转发到对应的多个tomcat服务器(也就是所谓的负载均衡,用来减少服务器压力)。

二、什么是反向代理?反向代理可正向代理的区别是什么?

看这两张图就知道了:

在这里插入图片描述
在这里插入图片描述

我觉得区别就在于:
正向代理是客户端的行为(在客户端发送请求的时候,设置的正向代理,也就是代理的设置是在客户端完成的)
反向代理是客户端发送请求到反向代理服务器(比如Nginx服务器),由反向代理服务器完事代理转发请求。

三、nginx 文件结构

...              #全局块

events {         #events块
   ...
}

http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}

1、全局块:

配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,
日志存放路径,配置文件引入,允许生成worker process数等。

2、events块:

配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,
选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

3、http块:

可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。
如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

4、server块:

配置虚拟主机的相关参数,一个http中可以有多个server。

5、location块:

配置请求的路由,以及各种页面的处理情况。

四、一个最简单的反向代理/负载均衡/动静分离配置和解释:

//代表着当前有一个工作的子进程,可以自行修改,但是太多了无益因为会争夺cpu资源。一般最多设置成cpu数*核数

worker_processes  1;

//一般配置nginx的连接特性

events {
	    //这里是指一个子进程最大允许连接1024个连接
	    worker_connections  1024;
}

//这里是配置http服务器的主要段

http {
	//这里配置的是日志的显示格式
	    #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  logs/access.log  main;


	upstream webservers {                              #这玩意我理解为节点集群,在这里设置多个地址端口
	        server 172.18.144.23:4789 weight=10;       #weight:代表权重,数子越大访问的概率就越大
	        server 172.18.144.23:5789 weight=10;
    	}


	server {             #设置一个反向代理服务
        listen       80;                			#端口是80
        server_name  test.nginx.com;     			#服务名是test.nginx.com
        
        location / {								#默认请求
            root   /root;                           #定义服务器的默认网站根目录位置
            proxy_pass   http://webservers;         #这里就是设置反向代理的地方,指向upstream webservers节点组,实现负载均衡
        }

        location ~* \.(gif|jpg|jpeg|png|css|js|ico|svg)$ {     #静态资源请求
       		root /nginx/sunpy_res/static/;                     #静态资源的根路径
    	}      

		# 所有动态请求都转发给tomcat处理  
		  location ~ .(jsp|do)$ {  
		      proxy_pass   http://webservers;  
		  }  

		error_page 502 503 =200 /50x.html;  #产生502 、503的时候给用户的返回状态是200,内容是50x.html。
		location = /50x.html {
		    root /usr/share/nginx/html;
		}   

    }
}

五、location参数正则:

在这里插入图片描述

六、日志配置:

Nginx日志对于统计、系统服务排错很有用。
Nginx日志主要分为两种:access_log(访问日志)和error_log(错误日志)。
通过访问日志我们可以得到用户的IP地址、浏览器的信息,请求的处理时间等信息。
通过错误日志记录访问出错的信息,可以帮助我们定位错误的原因。

1、设置access_log

access_log 指令用来指定日志文件的存放路径(包含日志文件名)、格式和缓存大小。具体如下:

access_log path(存放路径) [format(自定义日志格式名称) [buffer=size | off]],比如:

access_log  logs/access.log  main;

开启访问日志:

先定义好格式:

log_format  luo  '$server_name $remote_addr - $remote_user [$time_local] "$request"'
'$status $uptream_status $body_bytes_sent "$http_referer"'
'"$http_user_agent" "$http_x_forwarded_for" '
'$ssl_protocol $ssl_cipher $upstream_addr $request_time $upstream_response_time';

在配置文件中http server或者location段中开启记录。

access_log  logs/access.log  luo;

2、error_log设置错误日志

错误日志主要记录客户端访问Nginx出错时的日志,格式不支持自定义。
通过错误日志,我们可以得到系统某个服务或server的性能瓶颈等。
因此,将日志好好利用,你可以得到很多有价值的信息。

错误日志由指令error_log来指定,具体格式:

error_log path(存放路径) level(日志等级)

path含义同access_log,level表示日志等级,具体如下:[ debug | info | notice | warn | error | crit ]

error_log  logs/error.log  info;

七、docker下安装部署一个nginx服务

我懒得写了,推荐大家看看这篇博客吧!这篇博客把docker安装配置启动挂载nginx服务讲得清清楚楚的

https://segmentfault.com/a/1190000015092063
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值