thumbnail
Nginx在Windows和Linux下的常用配置

前言

Nginx高性能HTTP和反向代理服务器,占内存少并发强,支持高达50000个并发连接数


一、负载配置

经过反向代理服务器,将请求平摊分发到多个服务器

负载均衡策略:

1.轮询(默认)

请求按照时间顺序逐一分配到不同后端服务器,如果宕机,能自动剔除

2.权重(weight)

weight 权重,默认为1,越高被分配的客户端越多

server ip:8080 weight=1
server ip:8081 weight=2

3.IP HASH

请求按照访问 ip 的 hash 结果分配,每个访客就可固定访问一个后端服务器

ip_hash
server ip:8080
server ip:8081

配置实例:

在 http 块中加入

http {
	...
	upstream server01 {
		server ip:8080 weight=1;
		server ip:8081 weight=2;
	}

	server {
		listen          80;
		server_name     ip;
		access_log      logs/domain1.access.log main;
		location / {
			proxy_pass	http://server01;
			root  html;
			index	index.html index.htm;
		}
	}
}

二、动静分离

静态资源和动态资源分开部署,可通过 location 指定转发,expires 设置缓存过期时间,无修改返回 304,有修改返回 200

静态访问

静态资源目录

/data/imgs/1.png
/data/html/a.html
server {
	location /html/ {
		root	/data/;
		index	index.html index.htm;
	}
	location /imgs/ {
		root	/data/;
		autoindex	on;
	}
}

高可用

keepalived:要安装,要有虚拟IP,检测一个 Nginx 服务器宕机则会切换到另一个 Nginx 服务器

1.修改 etc 目录中的 keepalived.conf 完成高可用配置,主从配置

2.添加脚本,检测 Nginx 是否 keepalived

3.启动 Nginx 和 keepalived(systemctl start keepalived.service)


三、配置记录

1.运行原理

一个 master 和多个 worker

优点:

1.利于 Nginx 热部署操作

2.每个 worker 是独立进程,一个出问题,其他继续争抢,保证服务不会中断

3.linux 系统支持IO多路复用,worker 数量等同于CPU数量最优

worker 工作

客户端发送请求到 master,多个 worker 开始争抢得到任务再访问后端

worker 占用连接数,2个或4个

如果有4个worker的话,支持最大并发数

静态访问:worker_connections * worker_processes / 2

反向代理:worker_connections * worker_processes / 4

常用命令

版本 ./nginx -v

启动 ./nginx

关闭 ./nginx -s stop

重载 ./nginx -s reload


2.配置实例

全局块:影响服务器整体运行的配置指令部分

worker_processes 1; # 可支持并发数量

events块:配置服务器与用户网络连接部分

worker_connections 1024;	# 支持最大连接数

http与server块

location [ = | ~ | ~* | ^~ ] /uri/ { ... }

=:用于不含正则表达式的 uri 前,严格匹配

~:用户表示 uri 包含正则表达式,区分大小写

~*:用于表示 uri 包含正则表达式,不区分大小写

^~:用于不含正则的 uri 前,服务器找到表示 uri 和请求字符串匹配度最高的 location 后

HTTPS 与 WSS

# https
server {
    listen 443 ssl;
    server_name _;
    ssl_certificate /usr/local/cert/xxx.pem;
    ssl_certificate_key /usr/local/cert/xxx.key;
    ssl_session_timeout 30m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    
    location / {
		proxy_pass http://127.0.0.1:3002;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		# 非默认端口需要添加$server_port
		proxy_set_header Host $host:$server_port; 
		proxy_set_header X-Real-IP $remote_addr; 
		proxy_redirect off;
    }
}
# wss
server {
    listen 444 ssl;
    server_name _;
    ssl_certificate /usr/local/cert/xxx.pem;
    ssl_certificate_key /usr/local/cert/xxx.key;
    ssl_session_timeout 30m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    
    location / {
	    proxy_pass http://127.0.01:3003;
	    # 代理到上面的地址去
	    proxy_http_version 1.1;
	    proxy_set_header Upgrade $http_upgrade;
	    proxy_set_header Connection "Upgrade";
    }
}

Vue

server {
    listen 80;
    server_name _;
    index index.html index.htm;
    root  /www/wwwroot/project;
    
    location /api {
        proxy_pass http://ip:port/project-name;
    }
    
    location / {
        try_files $uri $uri/ @router;
        index  index.html index.htm;
    }
    
    location @router {
        rewrite ^.*$ /index.html last;
    }
    # 防止的路由在nginx中刷新出现404,需要rewrite到index.html中,然后交给路由在处理请求资源
}
上一篇
下一篇