nginx之TCP反向代理

nginx从1.9.0版本以后支持面向TCP的反向代理。莫约是2015年初发布的。

注:如今最新版nginx为1.11.12

  nginx从1.9.0后引入模块ngx_stream_core_module,模块是没有编译的,需要用到编译需添加--with-stream配置参数,stream负载均衡官方配置样例

配置编译的时候需要加上

先切换到nginx解压后目录内

# ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-stream

# make

# cp ./objs/nginx /usr/local/nginx/sbin/

# make upgrade

以下配置文件示例为反向代理MySQL。

user  nginx;
#user root;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$http_referer" ‘
                      ‘"$http_user_agent" "$http_x_forwarded_for"‘;

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

stream{
	upstream mysql{
		server 192.168.1.106:3306 weight=1;
		server 192.168.1.108:3306 weight=1;
	}
        
	server{
		listen 3307;
		proxy_pass mysql;
	}

}

stream 与 http 是一个层级的,在main内定义,放在配置文件最后。其中可包含server字段。

配置项说明:

listen address:port [ssl] [udp] [proxy_protocol] [backlog=number] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

It is possible to specify just only the port.   #我这撇脚的英语。。

地址也可以是一个主机名,若IPv6要用方括号指定 [::1] 。

ssl参数允许指定所有连接在该端口上接受SSL模式下工作。

udp参数配置一个监听套接字用于处理数据报(1.9.13引入)。

proxy_protocol参数(1.11.4)允许指定在该端口上所有连接都要使用PROXY protocol.。

backlog参数 它限制了等待连接的队列的最大长度(1.9.2)。

bind 指定一个单独的bind()相应一个给定地址:端口。

更多参照官网关于模块ngx_stream_core_module的叙述

ngx_stream_core_module自1.11.2模块支持变量。

$binary_remote_addr

二进制格式的客户端地址

$bytes_received

从客户端接收的字节数(1.11.4)

$bytes_sent

发送到客户端的字节数

$connection

连接序列号

$hostname

主机名

$msec

当前时间在秒和毫秒分辨率

$nginx_version

nginx版本

$pid

工作进程的PID

$protocol

协议用于与客户沟通: TCP或 UDP(1.11.4)

$proxy_protocol_addr

客户端地址从代理协议头,否则或空字符串(1.11.4)

代理协议之前必须通过设置启用 proxy_protocol参数听指令。

$proxy_protocol_port

客户端端口从代理协议头,否则或空字符串(1.11.4)

代理协议之前必须通过设置启用 proxy_protocol参数听指令。

$remote_addr

客户端地址

$remote_port

客户端端口

$server_addr

接受连接过来的服务器的地址

计算这个变量的值通常需要一个系统调用。为了避免一个系统调用,听指令必须指定地址和使用 bind参数。

$server_port

接受了一个连接端口的服务器

$session_time

会话持续时间在秒和毫秒分辨率(1.11.4);

$status

会话状态(1.11.4),可以是下列之一:

200

会议成功完成

400

客户端数据不能被解析,例如,代理协议头

403

访问被禁止的,例如,当访问是有限的某些客户端地址

500

内部服务器错误

502

糟糕的网关,例如,如果一个上游服务器无法选中或者联系到。

503

服务不可用,例如,当访问是有限的连接数

$time_iso8601

当地时间的ISO 8601标准格式

编写完成后测试语法格式,OK后重载服务

# ./sbin/nginx -t

# ./sbin/nginx -s reload

———————————————官方Example Configuration—————————————————worker_processes auto;

error_log /var/log/nginx/error.log info;

events {
   worker_connections  1024;
}

stream {
   upstream backend {
       hash $remote_addr consistent;

server backend1.example.com:12345 weight=5;
       server 127.0.0.1:12345            max_fails=3 fail_timeout=30s;
       server unix:/tmp/backend3;
   }

upstream dns {
      server 192.168.0.1:53535;
      server dns.example.com:53;
   }

server {
       listen 12345;
       proxy_connect_timeout 1s;
       proxy_timeout 3s;
       proxy_pass backend;
   }

server {
       listen 127.0.0.1:53 udp;
       proxy_responses 1;
       proxy_timeout 20s;
       proxy_pass dns;
   }

server {
       listen [::1]:12345;
       proxy_pass unix:/tmp/stream.socket;
   }
}

时间: 2024-08-06 07:36:09

nginx之TCP反向代理的相关文章

Nginx实现TCP反向代理

默认Nginx只支持http的反向代理,要想nginx支持tcp的反向代理,还需要在编译时增加tcp代理模块支持,即nginx_tcp_proxy_module 下面操作步骤只让nginx支持tcp_proxy,没有加入prce.gzip.ssl等功能,如需要,可自行在编译时加上相关参数. wget https://github.com/yaoweibin/nginx_tcp_proxy_module/archive/master.zip unzip master cd nginx-1.6.2

用nginx TCP反向代理作mail邮件代理

用nginx TCP反向代理作mail邮件代理 用nginx TCP反向代理作mail邮件代理 1. 背景 2. Nginx安装(包括nginx_upstream_check_module) 3. Nginx配置 4. 总结 1. 背景 新版本nginx有TCP反向代理功能,nginx的mail proxy配置认证又太麻烦,于是就想用TCP反向功能作mail代理. 2. Nginx安装(包括nginx_upstream_check_module) cd /tmptar zxf pcre-8.35

nginx以upstream分组的方式实现tcp反向代理

nginx以upstream分组的方式实现tcp反向代理 nginx在1.9版本开始支持tcp模式的负载均衡,在1.9.13版本开始支持udp协议的负载均衡,udp主要用于DNS的域名解析,其配置方式和指令和http代理类似,其基于ngx_steam_proxy_module模块实现tcp负载,另外基于ngx_stream_upstream_module实现后端服务器的分组转发.权重分配.状态监测.调度算法等高级功能官方文档的example: worker_processes auto; err

nginx+tomcat实现反向代理的负载均衡

nginx+tomcat实现反向代理的负载均衡 安装java环境 server12: [[email protected] ~]# sh jdk-6u32-linux-x64.bin [[email protected] ~]# mv jdk1.6.0_32/ /usr/local/ [[email protected] ~]# cd /usr/local/ [[email protected] local]# mv jdk1.6.0_32/ java [[email protected] lo

Centos7下Nginx+Tomcat配置反向代理,使用memcached解决session一致性问题

一.session一致性问题 使用集群方案解决网站高并发问题时,就会部署多台应用服务器.当用户第一次通过客户端(如:浏览器)访问服务器时,服务器会创建对应的session, 使用Nginx反向代理,假如用户A第一次访问站点,被反向代理到服务器一处理,服务器一创建对应sessionA记录信息,用户A再次访问站点时,被反向代理到服务二处理, 而服务器二没有记录用户A的session信息,就会新创建sessionB,导致用户A之前操作丢失. 我们可以通过让多个服务器统一到同一个地方新建session和

Nginx安装和反向代理配置

Nginx安装和反向代理配置 Nginx安装需要一些准备工作. 安装gcc等 yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel 还需要安装pcre,PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 Perl兼容的正则表达式库. yum -y install pcre 下载Nginx源码包,这里选择是1.7.8版本.并且解压缩,并且编译 wge

nginx是一个反向代理的软件

nginx只是一个反向代理的软件,和语言无关,理论上支持任何Web平台,当然http://Asp.net也不例外,http://51aspx.com就是http://Asp.net开发的,前端暴漏的是nginx Nginx和后端无关,他是HTTP传输过程中的一个中间层,负责将请求转发到他身后的应用服务器.对于客户端和最终的服务端,都是感知不到Nginx的存在的

Nginx高可用反向代理搭建

Nginx高可用反向代理搭建 Nginx简介 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日.其将源代码以类BSD许可证的形式发布,因它的稳定性.丰富的功能集.示例配置文件和低系统资源的消耗而闻名. Nginx 可以在大多数 Unix like O

Nginx 如何设置反向代理

网络结构如上图.可能你只有一个公网的Ip地址. 但是您的内网有个网站需要映射至外网.而又不想添加其它的非80端口.则你可以直接使用nginx来做反向代理即可.首先,配置nginx.conf文件. http { include mime.types; default_type application/octet-stream; client_max_body_size 8m; #############################################################