Nginx

安装

# 安装Nginx所需要的依赖
yum install pcre-devel zlib zlib-devel openssl openssl-devel

# 解压Nginx

# 到nginx目录
./configure 
make install

cd /usr/local/nginx

# 启动nginx
cd sbin
./nginx

# 关闭
./nginx -s quit / stop

quit 停止外面请求,然后将nginx里面的请求处理完在关闭
stop 直接退出什么都不管

配置文件

nginx.conf

# 全局块设置
# 哪些用户可以操作nginx  参数一  用户   参数二 用户组
user nobody;
# 工作进程个数,越多越好。但是推荐设置成与服务器核心数一致或二倍
worker_processes 4;

# 错误日志存放位置
error_log logs/error.log warn;
# 进程号,不用改
pid /run/nginx.pid;

# event块设置
events {
	# 设置多路io复用,提高效率
    use epoll;
    # 设置每一个工作进程的最大链接数 
    worker_connections 1024;
}

# http块
http {
	# 引入浏览器解析的类型
    include mime.types;
    default_type mime.types.default;
	# 日志格式
	log_format main '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';
                    
	# 访问成功的时候记录日志的位置
    access_log logs/access.log main;

	# 启用文件的零拷贝传输。
    sendfile on;
    #  禁用 TCP 的发送缓冲,默认情况下开启以提高性能。
    tcp_nopush on;
    # 禁用 TCP 的 Nagle 算法,默认情况下开启以降低延迟。
    tcp_nodelay on;

    # 客户端与 Nginx 之间保持活动连接的超时时间。
    keepalive_timeout 65;

	# 启用 Gzip 压缩
    gzip on;
    # 等级越高越好,但是消耗cup性能
    gzip_comp_level 2;
    gzip_min_length 1000;
    # 压缩类型
    gzip_types text/plain text/css application/javascript application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    # include /etc/nginx/conf.d/*.conf;  include 引入其他配置文件
    include demo.conf;
}

demo.conf

server {
	# 服务监听端口
	listen 80;
	server_name *.*;

	location / {
		return 200 '{"message": "Success"}';
	}
	
	# 开启浏览器缓存
	location /static {
    	expires 7d;  # 设置文件的过期时间为 7 天
	}
	
	
	location ~* \.(js|css)$ {
   		expires 30d;  # 设置 JavaScript 和 CSS 文件的过期时间为 30 天
	}
}

代理

正向代理

反向代理

server {
	listen 80;
	server_name *.*;
	
	location {
		# 反向代理
		proxy_pass http://ip:port;
	}
}

负载均衡

轮询

upstream 集群名 {
	server ip:port;
	server ip:port;
	server ip:port;
}
server {
	listen 80;
	server_name *.*;
	
	location {
		# 负载均衡 默认就是轮询
		proxy_pass http://集群名;
	}
}

轮询 + 权重

upstream 集群名 {
	# weight = x 值越高表示当前服务器被选中的概率越大
	server ip:port weight=10;
	server ip:port;
	server ip:port;
}
server {
	listen 80;
	server_name *.*;
	
	location {
		# 负载均衡
		proxy_pass http://集群名;
	}
}

ip_hash

upstream 集群名 {
	# 根据访问的ip计算出访问哪个一个服务器,保证只要ip没变一直都是访问同一个服务器
	ip_hash;
	server ip:port;
	server ip:port;
	server ip:port;
}
server {
	listen 80;
	server_name *.*;
	
	location {
		# 负载均衡
		proxy_pass http://集群名;
	}
}

注意:下面两种需要额外的依赖

url_hash

upstream 集群名 {
	# 根据访问的ip计算出访问哪个一个服务器,保证只要ip没变一直都是访问同一个服务器
	url_hash;
	server ip:port;
	server ip:port;
	server ip:port;
}
server {
	listen 80;
	server_name *.*;
	
	location {
		# 负载均衡
		proxy_pass http://集群名;
	}
}

fair

upstream 集群名 {
	# 判断当前哪一个服务器响应时间最短就选择哪一个
	fair;
	server ip:port;
	server ip:port;
	server ip:port;
}
server {
	listen 80;
	server_name *.*;
	
	location {
		# 负载均衡
		proxy_pass http://集群名;
	}
}

安装拓展模块

# 到nginx解压包下
./configure  --prefix=/etc/nginx --add-module=fair模块路径

make
# 到objs目录下
mv /usr/local/nginx/sbin/nginx  nginx.bak
cp nginx /usr/local/nginx/sbin/

跨域

 location / {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Methods' '*';
            add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
            ...
}

限流

漏桶

控制访问的速率

http {
    # 配置请求速率限制  请求不能超过10m 每秒10个请求
    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;

    server {
        ...
        location / {
            # 应用请求速率限制  burst表示设置一个大小为1的缓冲区,将超过的访问频次方法到缓冲区中 nodelay 如果缓冲区超过了直接返回503 没有设置就等待排队
            limit_req mylimit burst=5 nodelay;
        }
    }
}

令牌桶

处理突发的请求数量

http {

    limit_conn_zone $binary_remote_addr zone=perip:10m;
    limit_conn_zone $binary_remote_addr zone=perserver:10m;

    server {
        ...
        location / {

            # 应用连接数限制  限制单个ip最多能链接10个连接
            limit_conn perip 10 nodelay;
            # 能处理的并发连接总数
            limit_conn perserver 100 nodelay;

            ...
        }
    }
}

部署一个Vue项目

image.png image.png image.png