nginx配置文件及反向代理、负载均衡、动静分离

nginx配置文件位置

/usr/local/nginx/conf/nginx.conf

nginx配置文件组成

(1)全局块

从配置文件开始到events块之间的内容,主要是设置一些影响nginx服务器整体运行的配置指令。
比如:
worker_processes 1;
worker_processes 值越大,可以支持的并发处理量越多,worker进程越多
error_log 代表nginx错误日志存放路径

(2)events块

events块涉及的指令主要影响nginx服务器与用户的网络连接
比如:
worker_connections 1024; 支持的最大连接数

(3)http块

http块又分为http全局块和server块
http全局块:
include main.types; 引入一个外部的的文件->/main.types中放着大量的的媒体类型
include vhosts/*.conf; 引入一个外部的的文件->引入vhosts文件下,以.conf结尾的配置文件

server块:
listent: 80;监听89端口
location块
root:/web/abc;将接受到的请求到指定目录下请求资源。
index:index.html ; 默认去上述的路径中去查找相对于的文件
server块是重点,主要是各种域名、项目的配置,可以做反向代理等操作

反向代理 案例

在server中,把server_name改成当前具体的IP地址,然后在location中增加一项proxy_pass,把具体要代理到的服务器ip及端口号写进去,等客户端向nginx服务器的80端口发起请求后,就可以直接代理到我们指定的反向代理服务器

// 把当前IP的80端口反向代理到当前IP的8080端口
server {
    
    
	listen	80;
	server_name  localhost;

	location / {
    
    
		proxy_pass http://127.0.0.1:8080;
	}
}

具体Nginx的location路径映射

#优先级关系(越精确,优先级越高)
(location =)  >  (location /xxx/zzz/vvv)  >   (location ^~)	>	(location ~,~*)	 > 	(location /)	

#1. = 匹配
location =/ {
    
    
	#精准匹配,主机名后面不能带任何的的字符串
}

#2. 通用匹配
location /xxx {
    
    
	#匹配所有以xxx开头的路径
}

#3. 正则匹配
location ~ /xxx {
    
    
	# 匹配所有以xxx开头的路径
}

#4. 匹配开头路径
location ^~ /xxx {
    
    
	# 匹配所有以xxx开头的路径
}
#5. ~* \.(gif|jpg|png)$ {
    
    
	# 匹配以gif或者jpg或者png结尾的路径
}

负载均衡 案例

在http全局块中增加upstream部分,把需要负载均衡的服务器全部加进去,可以加一些规则,比如优先级顺序等。
然后在在serve块中用proxy_pass指定该负载均衡的名称,具体如下,就可以是现在负载均衡。每次请求,都会平均的落到每个服务器上。
具体详细的可以参考以下别人总结的文章:
Nginx深入详解之upstream分配方式
具体我配合docker来做一个案例,用docker来搭建两个nginx服务器及一个tomcat服务器,分别映射不同的端口号,让其中一个nginx服务器来做负载均衡。

# 下载并运行一个nginx服务器,映射端口号8011到80端口
$ docker run -d -p 8011:80 --name some-nginx daocloud.io/library/nginx:latest
# 在运行一个nginx容器,映射端口号8012到80端口,4bb46517cac3 为刚才运行的nginx的容器的镜像id
$ docker run -d -p 8012:80 --name some-nginx1 4bb46517cac3  
# 下载并运行一个tomcat服务器,映射端口号8082到8080端口, todo 注意tomcat的默认路径下的默认文件存在请求js和css,会多次请求服务器,如果用默认的负载均衡方式会导致负载均衡出问题,最好在tomcat下增加一个index.html文件来做测试,这样每一次访问只会请求到一台服务器,可以很直观的看到效果
$ docker run -d -p 8082:8080 --name t8 daocloud.io/library/tomcat:8.5.15-jre8
# 本地把需要做负载均衡的config配置文件先做好
$ vi default.conf
# default.conf nginx配置文件
upstream myServer{
    
    
        server 10.0.2.15:8082;  # IP 换成自己的
        server 10.0.2.15:8012;	# IP 换成自己的
}
server {
    
    
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    location / {
    
    
#        root   /usr/share/nginx/html;
        proxy_pass http://myServer;
        index  index.html index.htm;
    }
}
# 把修改好的配置文件复制到docker的nginx容器(some-nginx)中
$ docker cp ./default.conf some-nginx:/etc/nginx/conf.d/default.conf
# 重启一下
$ docker restart some-nginx

此时服务器的配置已经做好,在浏览器中访问做负载均衡的服务器就可以验收结果了。

负载均衡策略

Nginx为我们默认提供了三种负载均衡的策略:
1.轮询: 将客户端发起的请求,平均分配给每一台服务器
2.权重: 会将客户端的请求,根据服务器的权重值不同,分配不同的数量
3.ip_hash: 基于发起请求的客户端的ip地址不同,他始终会将请求发送到指定的服务器上 就是说如果这个客户端的请求的ip地址不变,那么处理请求的服务器将一直是同一个

轮询

轮询的案例就是上边的那个案例,很简单,下边是简单的配置说明

# 需要轮询的Ip及端口号
upstream my_server{
    
    
    server ip:port;
    server ip:port;
}
server {
    
    
    listen       80;
    listen  [::]:80;
    server_name  localhost;

	location / {
    
    
        proxy_pass http://upstream名称/;
    }
}
权重

权重的实现方法,在upstream中对每一项服务器的后边增加weight。具体如下,配置下边这个后,我重启用docker搭建的负载均衡的nginx服务器,然后发起请求,会发现五次请求tomcat服务器后会有一次nginx服务器请求。

upstream myServer{
    
    
        server 10.0.2.15:8082 weight=10;  # IP 换成自己的
        server 10.0.2.15:8012 weight=2;  # IP 换成自己的
        #server 10.0.2.15:8011;
}
server {
    
    
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
    
    
        proxy_pass http://myServer;
        #root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}
ip_hash

ip_hash的实现,在upstream的第一行添加ip_hash后,会对ip进行锁定,每一个ip只会请求一个服务器,这个时候我在重启服务器,进行请求后,就会发现只能访问到nginx服务器。

upstream myServer{
    
    
        ip_hash;
        server 10.0.2.15:8082 weight=10;  # IP 换成自己的
        server 10.0.2.15:8012 weight=2;  # IP 换成自己的
        #server 10.0.2.15:8011;
}
server {
    
    
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
    
    
        proxy_pass http://myServer;
        #root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

动静分离

Nginx的并发能力公式:
worker_processes * worker_connections / 4|2 = Nginx最终的并发能力
动态资源需要/4,静态资源需要/2
Nginx通过动静分离来提升Nginx的并发能力,更快的给用户响应

动态资源代理

没什么好说的,基本上之前都是动态的

#配置如下
location / {
    
    
  proxy_pass 路径;
}
静态资源代理
# nginx 配置项
server {
    
    
    listen       80;
    listen  [::]:80;
    server_name  localhost;

	# 在 /web/data 下创建html文件夹,然后把一个index.html文件放到里边
    location /html {
    
    
        root  /web/data;
        index  index.html;
    }

	#  在 /web/data 下创建img文件夹,然后把一个123.html文件放到里边
    location /img {
    
    
        root /web/data;
        autoindex on;   #代表展示静态资源的全部内容,以列表的形式展开
    }
}
<!- index.html文件内容, 直接把图片也直接放到了内容中一起请求,看是否可以直接成功 -> 
<h1>test img</h1>
<img src="http://192.168.1.113:8013/img/123.jpg"/>

全都成功了,html静态页面也正常访问到,图片也可以正常访问到

在这里插入图片描述
我们在来看一下 “autoindex on ”的作用,如下
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_15915293/article/details/107945000