nginx从1.9.0开始支持TCP反向代理,之前只支持HTTP。这是我的系统示意图:

为何需要?

为什么需要反向代理?主要是:

  1. 负载均衡
  2. 方便管控

比如我现在要更新后端服务器,如果不用负载均衡的话,在更新过程中,用户会出现无法连接服务器的情况,而一旦用了负载均衡,用户此时的连接请求将会分配到别的没在更新的后端服务器去,尽可能地确保了服务的可用性;再考虑这么种情况,我有多个服务器后端,那么就需要打开多个不同的监听端口,我需要在系统防火墙里做多个配置,如果它们与客户端的连接使用了SSL/TLS,那么得给它们各自配置证书,现在用了反向代理的话这些都简化了,服务器只需要打开一个对外监听端口,证书也只需要给反向代理配置好即可,就是我说的方便管控,当然了,还能方便的管控流量,设置一些额外的访问策略什么的。

那么反向代理的缺点是什么?我想如果后端多了起来,连接多了起来之后,对nginx来说是一个很大的挑战,毕竟TCP和HTTP不一样,TCP通常是“长连接”,要一直维持着的。到时候如果nginx撑不下去,就考虑用硬件负载均衡吧(不过听说这玩意儿不便宜)。

安装nginx

安装nginx的旧方法当然是去官网下载tar包,解压缩,configure,make……我在《HappyAA服务器部署笔记1》中有详细描述,现在我们不妨改进一下——用yum安装,这样更省事。我用的CentOS7的默认yum容器貌似并没有nginx,需要自己加装一下,其实很简单,改一下配置即可。在/etc/yum.repo.d底下创建文件nginx.repo,内容为:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

然后:

#yum install nginx

nginx默认安装在/usr/sbin/nginx,检验下是否我们需要的nginx版本:

#/usr/sbin/nginx -v

我安装的是1.9.11,没问题!再看看--with-stream和--with-stream_ssl_module这两个参数是否存在:

#/usr/sbin/nginx -V

如果没有看到这两个参数,那就只好走老路来安装nginx了。

允许开机自动运行:

#systemctl enable nginx

启动:

#systemctl start nginx

对应着以前的service nginx start

查看nginx状态:

#systemctl status nginx

对应着以前的service nginx status

发现了没有,使用yum安装管理起来也简单了。

nginx配置

编辑/etc/nginx/nginx.conf

stream{
upstream backend{ 1)
hash $remote_addr consistent;
server 127.0.0.1:7397 max_fails=3 fail_timeout=10s; 2)
server 127.0.0.1:7398 max_fails=3 fail_timeout=10s;
} server{
listen 1268 ssl; 3)
ssl_certificate /home/guogangj/certs/cert1268.pem; 4)
ssl_certificate_key /home/guogangj/certs/key1268.pem; 5)
ssl_session_cache shared:SSL:10m; 6)
ssl_session_timeout 10m; 7)
ssl_ciphers HIGH:!aNULL:!MD5; 8)
ssl_prefer_server_ciphers on; 9)
proxy_connect_timeout 20s; 10)
proxy_timeout 5m; 11)
proxy_pass backend; 12)
}
}

配置说明:

1) 设置一个叫“backend”的后端配置

2) 我有两个后端服务器,其中之一监听在7397端口,nginx尝试连接之,(10秒钟为判定失败的时长,这个我暂时也不太明白)最多失败3次,超过则不再重试

3) nginx监听在1268端口,使用SSL安全连接

注意:有必要的话,调整firewalld或iptables来允许这个端口的外部访问,对firewalld来说,可以添加这样的策略

firewall-cmd --zone=public --add-port=1268/tcp --permanent
firewall-cmd --reload

查看一下firewalld的策略列表:

firewall-cmd --permanent --zone=public --list-all

4) 所使用的X.509证书文件(PEM格式),对证书不熟悉的请参考《那些证书相关的玩意儿》,对于使用TCP协议的服务器端,其实是可以用自签的证书的,(如何生成自签证书,刚提到的文章里也有说明)你客户端“认”它就是了,反正我们的目的就是防范中间人攻击,不像做网站,我们得让浏览器“认”证书才行

5) 证书私钥文件

6) 设置SSL Session Cache使用“shared”方式更有利于提高资源的利用率,“SSL”是给缓存起的名字,你可以改成别的(这个名字如何用我现在不太清楚),“10m”为缓存大小(1M的缓存大约可以存放4000个session)

7) SSL Session的失效时间,默认5分钟,我设为10分钟

8) 指定SSL加密算法,照写即可(我一看数学就头大,所以至今仍未明白RSA的数学原理)

9) 更偏向于使用服务器的加密算法(这个我不太明白什么意思)

10) 指定nginx连接后端服务器超时的时间,指定为20秒

11) 距离上一次成功访问(连接或读写)后端服务器的时间超过了5分钟就判定为超时,断开此连接

12) 将TCP连接及数据收发转向叫“backend”的后端(这句话很关键)

完成

好像没啥好说的了,客户端连接1268这个端口完事。哦,对了,改好配置了别忘记重启下nginx:

#systemctl restart nginx

简易nginx TCP反向代理设置的更多相关文章

  1. 通过Nginx TCP反向代理实现Apache Doris负载均衡

    概述 Nginx能够实现HTTP.HTTPS协议的负载均衡,也能够实现TCP协议的负载均衡.那么,问题来了,可不可以通过Nginx实现Apache Doris数据库的负载均衡呢?答案是:可以.接下来, ...

  2. nginx之TCP反向代理

    实现Nginx tcp负载均衡 Nginx在1.9.0版本开始支持tcp模式的负载均衡,在1.9.13版本开始支持udp协议的负载,udp主要用于DNS的域名解析,其配置方式和指令和http 代理类似 ...

  3. nginx启用TCP反向代理日志配置

    Nginx使用TCP反向代理日志配置不同于http 修改nginx配置文档/usr/local/nginx/conf/nginx.conf 设置日志格式 stream { log_format pro ...

  4. 【Nginx】使用Nginx做反向代理时,关于被代理服务器相应的超时设置

    > 参考的优秀文章 Module ngx_http_proxy_module > 设置等待被代理服务器的最大响应时间 使用Nginx做反向代理时,因被代理服务器因业务确实复杂,需时较久,往 ...

  5. Nginx的安装及反向代理设置

    因为项目的缘故,接触到了Nginx的安装和反向代理设置,和大家分享下. 一.Nginx的下载.安装cd /homewget http://nginx.org/download/nginx-1.0.5. ...

  6. Nginx、haproxy反向代理设置

    Nginx反向代理配置: #user nobody; worker_processes ; events { worker_connections ; } http { include mime.ty ...

  7. nginx反向代理设置自定义错误页面

    为nginx反向代理设置自定义错误页面 转:https://blog.csdn.net/u014433030/article/details/77507839 如果我们的nginx配置了反向代理,如下 ...

  8. (转)Nginx反向代理设置 从80端口转向其他端口

    from :http://www.cnblogs.com/wuyou/p/3455381.html Nginx反向代理设置 从80端口转向其他端口   反向代理(Reverse Proxy)方式是指以 ...

  9. Nginx作为反向代理时传递客户端IP的设置方法

    因为nginx的优越性,现在越来越多的用户在生产环境中使用nginx作为前端,不管nginx在前端是做负载均衡还是只做简单的反向代理,都需要把日志转发到后端real server,以方便我们检查程序的 ...

随机推荐

  1. 阿里巴巴直播内容风险防控中的AI力量

    直播作为近来新兴的互动形态和今年阿里巴巴双十一的一大亮点,其内容风险监控是一个全新的课题,技术的挑战非常大,管控难点主要包括业界缺乏成熟方案和标准.主播行为.直播内容不可控.峰值期间数千路高并发处理. ...

  2. 我为NET狂官方面试题-数据库篇答案

    题目:http://www.cnblogs.com/dunitian/p/6028838.html 汇总:http://www.cnblogs.com/dunitian/p/5977425.html ...

  3. TortoiseGit 文件比对工具使用 Beyond Compare 和 DiffMerge

    TortoiseGit 内置的文件比对工具是 TortoiseMerge,用于文件比对和解决冲突合并,TortoiseGit 还支持外部的比对工具使用,比如 Beyond Compare 和 Diff ...

  4. 简单搭建 nuget 内部服务器

    搭建 nuget 内部服务器,最好的方式是使用 ProGet,参考博文<用 ProGet 搭建内部的 NuGet 服务器>,好处非常多,但需要使用 SQL Server 数据库,如果不想使 ...

  5. H5项目开发分享——用Canvas合成文字

    以前曾用Canvas合成.裁剪.图片等<用H5中的Canvas等技术制作海报>.这次用Canvas来画文字. 下图中"老王考到驾照后"这几个字是画在Canvas上的,与 ...

  6. bzoj3932--可持久化线段树

    题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...

  7. 【夯实Nginx基础】Nginx工作原理和优化、漏洞

    本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI   ...

  8. JavaScript求两个数字之间所有数字的和

    这是在fcc上的中级算法中的第一题,拉出来的原因并不是因为有什么好说的,而是我刚看时以为是求两个数字的和, 很显然错了.我感觉自己的文字理解能力被严重鄙视了- -.故拉出来折腾折腾. 要求: 给你一个 ...

  9. jquery实现下拉框多选

    一.说明 本文是利用EasyUI实现下拉框多选功能,在ComboxTree其原有的基础上对样式进行了改进,样式表已上传demo,代码如下 二.代码 <!DOCTYPE html PUBLIC & ...

  10. Microsoft Visual Studio 2017 for Mac Preview 下载+安装+案例Demo

    目录: 0. 前言 1. 在线安装器 2. 安装VS 3. HelloWorld 4. ASP.NET MVC 5. 软件下载 6. 结尾 0. 前言: 工作原因,上下班背着我的雷神,一个月瘦了10斤 ...