Nginx 配置 - 学习笔记

  • 目录结果
  • 虚拟主机配置
  • Windos下的绝对路径
  • 反向代理 + 负载均衡
  • 负载均衡策略
  • 轮训(默认)
  • 权重
  • ip_hash
  • 网关
  • 参考资料


目录结果

D:\nginx-1.16.1\html
|   50x.html
|   index.html
|   
+---a
|       index.html
|       
+---b
|       index.html
|       
+---c
|       index.html
|       
\---d
        index.html

虚拟主机配置

nginx作为web服务器跑起来
只设置了 server 块下的 listenserver_namelocation 其它都没动
server可以配多个。

worker_processes  1; # 处理并发的数量,越大处理的并且量越大

events {
    worker_connections  1024;# 支持最大连接数
}

http {
    include       mime.types;
    default_type  application/octet-stream;
	proxy_intercept_errors on;	# 开启自定义错误页面
	
    sendfile        on;
    keepalive_timeout  65;
	
	# 定义一个 web 服务
	server {
		# 监听端口
        listen       80;		
		
		# 服务的域名或IP,多个用空格分隔
        server_name  localhost 127.0.0.1;	

		# 映射到根路径 /
        location / {
			# web服务根路径对应的目录
			root   html; 
			# 绝对路径
			# root   E:\\demo\\page;
			
			# 文件夹下默认页面,多个用空格分隔,优先级从左高右低
            index  index.html index.htm; 
        }
		
		# 自定义错误页面。 500 502 503 504 错误重定向到 /50x.html
        error_page   500 502 503 504  /50x.html; 
        # 定义了一个名为 /50x.html 的位置(location)
        location = /50x.html {
        	# 该位置的根目录在 html
            root   html;
        }
        # 自定义错误页面
		error_page 404 ;
    }
	
}

因为上面的配置所以访问 localhost 127.0.0.1 皆可。

zbrush 2022_zbrush 2022

Windos下的绝对路径

server {
        listen       8000;
        server_name  127.0.0.1 localhost;

        location / {
            root   E:\\demo\\page;			# 绝对路径
            index  index.html index.htm;
        }

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

反向代理 + 负载均衡

负载均衡使用默认的轮训策略
先定义3个web服务作集群。开放端口 8080 - 8082 ,最后定义反向代理服务开放80端口

worker_processes  1; # 处理并发的数量,越大处理的并且量越大

events {
    worker_connections  1024;# 支持最大连接数
}

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

    sendfile        on;
    keepalive_timeout  65;
	
	# 服务器 1 端口 8080
	server {
        listen       8080;
        server_name  localhost;

        location / {
			root   html/a/;
			index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
	# 服务器 2 端口 8081
	server {
        listen       8081;
        server_name  localhost;

        location / {
			root   html/b/;
			index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
	# 服务器 3 端口 8082
	server {
        listen       8082;
        server_name  localhost;

        location / {
			root   html/c/;
			index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
	
	# 用于负载均衡的集群(默认轮训,从上到下每台一次)。 集群名称:myserver 
	upstream myserver {
		server 127.0.0.1:8080;
		server 127.0.0.1:8081;
		server 127.0.0.1:8082;
	}
	
    server {
        listen       80;			# 监听端口
        server_name  localhost;		# 服务的域名或IP,多个用空格分隔

        location / {
			proxy_pass http://myserver; # 代理指定上面定义的集群 myserver
        }
		
		# 定义50x 错误页面
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
		
		# 定义40x 错误页面
		error_page	400 401 402 403 404  /40x.html;
		location = /40x.html {
			root   html;
        }
    }
}

负载均衡策略

  • max_fails
  • fail_timeout

轮训(默认)

按顺序来,每人一次。

权重

upstream backend {
    server backend1.example.com weight=5;
    server 127.0.0.1:8080       max_fails=3 fail_timeout=30s;
    server unix:/tmp/backend3;

    server backup1.example.com  backup;
}
  • weight
    权重大的,能者多劳
    上面总共3个服务器在跑。(backup是后补,只有其它服务器都奔溃了,会才启用它)
    第一个权重5,另外两个没写则默认1 。权重总数是7,那就在7次访问中:
    backend1.example.com 被访问5
    127.0.0.1:8080 被访问1
    unix:/tmp/backend3 被访问1
  • max_fails = 3
  • fail_timeout = 30
    127.0.0.1:8080节点30秒内出现3次访问失败,判定节点不可用。此后10秒内请求不会向其转发到请求,10秒后重新检测其是否可用。

ip_hash

同一个ip始终被分配到同一台服器上

upstream backend {
	ip_hash;
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
    server 127.0.0.1:8082;
}

网关

定义用户服务8081

server {
        listen       8081;
        server_name  localhost;

		location / {
			root gateway/user;
			index index.html index.htm;
		}
    }

定义产品服务8082

server {
        listen       8082;
        server_name  localhost;

		location / {
			root gateway/product;
			index index.html index.htm;
		}
    }

定义网关80 通过路径 /api-user/api-product 访问

server {
        listen       80;
        server_name  localhost;
		# 路由到用户
		location /api-user {
			proxy_pass http://localhost:8081/;
		}
		# 路由到产品
		location /api-product {
			proxy_pass http://localhost:8082/;
		}
    }