文章目录
代理
代理分为正向代理和反向代理。
正向代理
例如vpn,用户通过vpn代理,访问国外网站。正向代理服务器位于客户端和服务端之间,客户端为了向服务端获取数据,客户端先向代理服务器发送请求,并指定服务端地址,服务端地址返回数据给代理服务器,代理服务器将服务端返回的数据返回给客户端,我们需要在客户端配置代理信息。所以正向代理代理的是客户端。
反向代理
客户端对于反向代理是无感知的,客户端不需要配置任何东西,直接访问代理的地址,代理地址向服务器获取数据后直接返回给前端。反向代理代理的是服务端。
正向代理与反向代理的主要区别在于代理对象不同,正向代理代理的是客户端,反向代理代理的是服务端。
nginx反向代理
nginx常用命令
启动nginx: nginx
linux中后台启动nginx:nohup nginx & #这个命令要配合&使用
以特定目录下的配置文件启动:nginx -c /特定目录/nginx.conf
重新加载配置:nginx -s reload 执行这个命令后,master进程会等待worker进程处理完当前请求,然后根据最新配置重新创建新的worker进程,完成Nginx配置的热更新。
立即停止服务: nginx -s stop
从容停止服务: nginx -s quit 执行该命令后,Nginx在完成当前工作任务后再停止。
检查配置文件是否正确 : nginx -t
检查特定目录的配置文件是否正确: nginx -t -c /特定目录/nginx.conf
查看版本信息: nginx -v
配置文件
在nginx.conf中配置
server {
listen 80;
server_name www.hubcc.com;
location /{
proxy_pass http://127.0.0.1:8080;
index index.html index.htm index.jsp;
}
}
如上配置,启动nginx后,我们访问www.hubcc.com,nginx会跳转到http://127.0.0.1:8080路径上。
如果我们在location中配置名称。如下
server {
listen 80;
server_name www.hubcc.com;
location /webapi{
proxy_pass http://127.0.0.1:8080;
index index.html index.htm index.jsp;
}
}
那么我们需要访问www.hubcc.com/webapi才会访问到http://127.0.0.1:8080路径上。
nginx常用配置项
events:工作模式及连接数上限 例如
#epoll是多路复用IO(I/O Multiplexing)中的一种方式,
#仅用于linux2.6以上内核,可以大大提高nginx的性能
use epoll;
#单个后台worker process进程的最大并发链接数
worker_connections 1024;
listen:配置监听端口。例如:
listen *:80 | *:8080 #监听所有80端口和8080端口
listen IP_address:port #监听指定的地址和端口号
listen IP_address #监听指定ip地址所有端口
listen port #监听该端口的所有IP连接
server_name:虚拟主机的名称,也就是我们访问的主机名称,我们可以配置多个名称,用空格隔开。例如:
server_name www.baishengxi.com
location:用于匹配的url,语法如下:
location [ = | ~ | ~* | ^~] url {
}
1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 uri 包含正则表达式,并且区分大小写。
3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。
注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识。
proxy_pass:被代理的服务器地址。例如:
proxy_pass ocalhost:8080
index:设置默认首页。例如:
#多个页面用空格分割
index index.html index.jsp;
nginx负载均衡
nginx通过upstream模块定义的后端服务器中选取一台服务器接收用户的请求。upstream配置完成后要代理到指定服务器
#其他页面反向代理到tomcat容器
location ~ .*$ {
index index.jsp index.html;
proxy_pass http://aaa;
}
6种负载均衡策略:
1、轮询(默认方式)
此策略适合服务器配置相当,无状态且短平快的服务使用。
#动态服务器组
upstream aaa{
server localhost:8080;
server localhost:8081;
server localhost:8082;
server localhost:8083;
}
2、weight权重方式
此策略比较适合服务器的硬件配置差别比较大的情况,此策略可以与least_conn和ip_hash结合使用。
#动态服务器组
upstream aaa{
server localhost:8080 weight=2;
server localhost:8081;
server localhost:8082 backup;
server localhost:8083 max_fails=3 fail_timeout=20s;
}
3、ip_hash
指定负载均衡器按照基于客户端IP的分配方式
保证每个用户始终访问的都是一个ip,可以确保session回话,解决session不能跨服务器问题,此策略适合有状态服务,比如session。
#动态服务器组
upstream aaa{
ip_hash; #保证每个访客固定访问一个后端服务器
server localhost:8080 weight=2;
server localhost:8081;
server localhost:8082;
server localhost:8083 max_fails=3 fail_timeout=20s;
}
4、least_conn
把请求转发给连接数较少的后端服务器,此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况
#动态服务器组
upstream aaa{
least_conn; #把请求转发给连接数较少的后端服务器
server localhost:8080 weight=2; #tomcat 7.0
server localhost:8081; #tomcat 8.0
server localhost:8082 backup; #tomcat 8.5
server localhost:8083 max_fails=3 fail_timeout=20s; #tomcat 9.0
}
5、第三方策略
1、fair:按照响应时间来分配
#动态服务器组
upstream aaa{
server localhost:8080;
server localhost:8081;
server localhost:8082;
server localhost:8083;
fair; #实现响应时间短的优先分配
}
2、url_hash:按照访问url的hash来分配请求
#动态服务器组
upstream aaa{
hash $request_uri; #实现每个url定向到同一个后端服务器
server localhost:8080;
server localhost:8081;
server localhost:8082;
server localhost:8083;
}