Nginx代理服务
Nginx代理服务
- Nginx代理服务
- Nginx负载均衡
- 反向代理
- 反向代理的用途
- Nginx配置攻略
- Nginx动静分离
- 使用 Nginx 实现四层代理配置
- 基本介绍
- 使用 Nginx 实现四层代理配置
Nginx负载均衡
负载均衡(Load Balance)是由多台服务器以对称的方式组成一个服务器集群,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。经过某种负载分管技术,将外部发送来的中央请求均匀分配到对称结构中的某一台服务器上。
反向代理
反向代理(Reverse Proxy):与正向代理正好相反,反向代理中的代理服务器,代理的是服务器那端。代理服务器接收客户端请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给客户端,此时代理服务器对外表现为一个反向代理服务器的角色。
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。
一句话总结:反向代理,就是代理服务器代理了目标服务器,去和客户端进行交互。
反向代理的用途
隐藏服务器真实 IP
负载均衡
通过缓存加速访问资源
提供安全保障
Nginx配置攻略
vim /usr/local/nginx/conf/nginx.conf
编辑配置文件。
在 http 节点下,添加 upstream 节点。使用 upstream name{} 语法定义一组服务器。
然后在 server 节点的 80 端口下添加下图中的内容。默认情况下,Nginx 是按加权轮询的方式将请求分发到各个服务器,当权重 weight 不指定时,各服务器 weight 相同。关于 Nginx 启动用户的问题请根据自身实际环境进行配置。
upstream mysvr {
server 192.168.10.121:3333;
server 192.168.10.122:3333;
}
server {
....
location ~*^.+$ {
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
}
}
1、热备:如果你有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。服务器处理请求的顺序:AAAAAA突然A挂啦,BBBBBBBBBBBBBB…
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #热备
}
2、轮询:nginx默认就是轮询其权重都默认为1,服务器处理请求的顺序:ABABABABAB…
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333;
}
3、加权轮询:跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。下面服务器的请求顺序为:ABBABBABBABBABB…
upstream mysvr {
server 127.0.0.1:7878 weight=1;
server 192.168.10.121:3333 weight=2;
}
4、ip_hash:nginx会让相同的客户端ip请求相同的服务器。
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333;
ip_hash;
}
5、关于nginx负载均衡配置的几个状态参数讲解。
down,表示当前的server暂时不参与负载均衡。
backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。
upstream mysvr {
server 127.0.0.1:7878 weight=2 max_fails=2 fail_timeout=2;
server 192.168.10.121:3333 weight=1 max_fails=2 fail_timeout=1;
}
Nginx动静分离
Nginx动静分离简单来说就是把动态和静态请求分开,不能理解成知识单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求和静态请求分开,可以理解成使用Nginx处理静态请求,Tomcat处理动态请求。
动静分离目的:
为了加快网站的解析速度,可以把动态页面和静态页面交给不同的服务器来解析,来加快解析速度,提高请求的访问效率,降低原来单个服务器的压力,下面是动静分离的原理图。
动静分离从目前实现方式大致分为两种:
方式一:纯粹的把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案。
方式二:动态和静态文件混合在一起发布,通过nginx分开。通过配置location指定不同的后缀名实现不同的请求转发。
#配置Nginx处理静态图片请求
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
#root /usr/share/nginx/html/img;
proxy_pass http://192.168.99.116;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
expires 10d;
}
使用 Nginx 实现四层代理配置
基本介绍
我们在配置 Nginx 代理时,一般配置的都是基于 http 或是 https 协议的代理,也就是应用层。但是有些时候,我们并不想配置这种基于应用层的代理。比如说:我们要代理到数据库上,但是数据库是不支持应用层代理的。
所以,我们并不能像平常那样来配置,不过呢,在 Nginx 1.9.0 版本后,Nginx 便可以通过配置 --with-stream
模块的方式,来实现基于四层的反向代理。比如,我们便可以通过端口代理到端口的方式来访问到数据库。可以通过四层代理,来代理到任何使用到四层协议的服务上,而不仅仅是数据库。
使用 Nginx 实现四层代理配置
yum添加stream
#安装nginx的官方存储库来获取新版本的nginx。
yum install -y http://nginx.org/packages/centos/7/noarch/RPMS/nginx-releasecentos-7-0.el7.ngx.noarch.rpm
yum install -y nginx
systemctl status nginx
#安装nginx stream模块相关的依赖项
yum install gcc pcre-devel zlib-devel openssl-devel
#安装nginx stream模块
yum install nginx-mod-stream
#检查nginx的配置文件是否包含stream模块
nginx -V | grep stream
stream {
upstream test_mysql {
hash $remote_addr consistent; # 通过配置一致性 hash 来防止调度异常
server 192.168.1.1:3306 weight=5 max_fails=3 fail_timeout=30s;
}
server {
listen 10086 so_keepalive=on; # 开启 TCP 存活探测
proxy_connect_timeout 10s; # 连接超时时间
proxy_timeout 300s; # 端口保持时间
proxy_pass test_mysql;
}
}