https://blog.csdn.net/qq_42030417/article/details/83185809
https://www.cnblogs.com/ysocean/p/9392908.html#_label1
https://www.jianshu.com/p/1593954d5faf
正向代理VS反向代理
正向代理
eg: 大家都知道,现在国内是访问不了 Google的,那么怎么才能访问 Google呢?我们又想,美国人不是能访问 Google吗(这不废话,Google就是美国的),如果我们电脑的对外公网 IP 地址能变成美国的 IP 地址,那不就可以访问 Google了。你很聪明,VPN 就是这样产生的。我们在访问 Google 时,先连上 VPN 服务器将我们的 IP 地址变成美国的 IP 地址,然后就可以顺利的访问了。这里的 VPN 就是做正向代理的。
正向代理服务器位于客户端和服务器之间,为了向服务器获取数据,客户端要向代理服务器发送一个请求,并指定目标服务器,代理服务器将目标服务器返回的数据转交给客户端。这里客户端是要进行一些正向代理的设置的。
反向代理
正向代理VS反向代理
反向代理和正向代理的区别就是:正向代理代理客户端,反向代理代理服务器。
负载均衡
将服务器接收到的请求按照规则分发的过程
nginx支持的负载均衡调度算法方式如下:
-
weight轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。
-
ip_hash:每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。
-
fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块
-
url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在nginx作为静态服务器的情况下提高缓存效率。同样要注意nginx默认不支持这种调度算法,要使用的话需要安装nginx的hash软件包
配置文件说明
文件整体结构
从图中我们可以看出主要包含以下几大部分内容:
main:用于进行nginx全局信息的配置
events:用于nginx工作模式的配置
http:用于进行http协议信息的一些配置
server:用于进行服务器访问信息的配置
location:用于进行访问路由的配置
upstream:用于进行负载均衡的配置
全局块
# user nobody; # 指定Nginx Worker进程运行以及用户组。默认由nobody账户运行。
# 指令格式:user user [group];
worker_processes 1; # 指定了Nginx要开启的进程数。每个Nginx进程平均耗费10M~12M内存。建议指定和CPU的数量一致即可。Nginx服务器实现并发处理服务的关键。
# 指令格式:worker_processes number | auto;
# number: Nginx 进程最多可以产生的worker process 数。
# auto: Nginx 进程将自动检测
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; #定义全局错误日志文件。日志输出级别有debug,info,notice,warn,error,erit可供选.
# 指定格式:error_log file | stderr;
# file : 日志输出到某个文件file
# stderr : 日志输出到标准错误输出 (日志输出级别)。
#pid logs/nginx.pid; # 用来指定进程pid的存储文件位置。如果不指定,则默认置于路径 logs/nginx.pid
# worker_rlimit_nofile 65535; # 用来绑定worker进程和CPU,Linux内核2.4 以上可用
# 指定进程可以打开的最多文件描述数目,理论值应该是最多打开文件数(ulimit -n )与nginx进程数相除,但是Nginx分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。
# 现在在Linux2.6 内核下开启文件打开数为65535,worker_rlimit_nofile 就相应应该填写65535.这是因为Nginx调度时请求到进程并不是那么均衡,所以假如填写10240,总并发量达到3-4万时就有进程超过10240了,这就会返回502。
Events模块
events {
use epoll;
# use是事件模块指令,用来指定Nginx的工作模式。
# Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll 。
# 其中select 和poll 都是标准的工作模式,kqueue和epoll是高效的工作模式,
# 不同的是epoll用在Linux平台上,而kqueue用在BSD系统中。对于Linux系统,epoll工作模式是首选。
worker_connections 1024; 设定Nginx的工作模式及连接数上限
}
http模块
http {
include mime.types;
# 该指令主要用于将其他的Nginx配置或第三方模块的配置引用到当前的主配文件中,减少主配置文件的复杂度.
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# 用于指定Nginx日志的输出日志
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
# on是表示开启高效文件传输模式,默认是关闭状态(off),将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
# 设置客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接;
#gzip on; # 压缩配置
Server模块
# another virtual host using mix of IP-, name-, and port-based configuration
server {
listen 8000; # 指定虚拟主机的服务端口
listen somename:8080;
server_name somename alias another.alias; # 指定IP地址或域名,多个域名之间用空格分开
charset GB2312; # 网页的默认编码格式
access_log logs/xxx; # 虚拟主机的访问日志存放路径
}
location 模块
基本配置
location / {
# URL地址匹配是进行Nginx配置中最灵活的部分。
# location支持正则表达式匹配,也支持条件判断匹配,用户可以通过location指令实现Nginx对动、静态网页进行过滤
root html; # 指定虚拟主机的网页根目录,这个目录可以是相对路径,也可以是绝对路径。
index index.html index.htm; #设定访问的默认首页地址
}
反向代理配置
location / {
proxy_pass http://localhost:8888;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header Host $http_host;
}
upstream模块
当使用负载均衡指定proxy时
upstream name {
ip_hash; # 指定请求调度算法
server 192.168.1.100:8000; # 分发服务器的列表配置
server 192.168.1.100:8001 down; # down:# 表示该主机暂停服务
server 192.168.1.100:8002 max_fails=3; # 表示失败最大次数,超过失败最大次数暂停服务
server 192.168.1.100:8003 fail_timeout=20s;
server 192.168.1.100:8004 max_fails=3 fail_timeout=20s; # 表示如果请求受理失败,暂停指定的时间之后重新发起请求
}