nginx之TCP反向代理
2017-03-29 18:54
288 查看
nginx的tcp proxy负载调度有两种方式:
官方的ngx_stream_core_module
阿里开源的nginx_tcp_proxy_module
此处介绍nginx官方TCP proxy。
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。
配置项说明:
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;
}
}
官方的ngx_stream_core_module
阿里开源的nginx_tcp_proxy_module
此处介绍nginx官方TCP proxy。
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;
}
}
相关文章推荐
- 使用Nginx实现TCP反向代理
- nginx反向代理TCP,取RTMP流
- nginx 反向代理TCP mysql
- nginx学习笔记(3):TCP反向代理基本配置
- Nginx实现TCP反向代理
- 使用Nginx实现TCP反向代理
- 现在使用Nginx实现TCP反向代理
- nginx反向代理TCP,取RTMP流
- Nginx的tcp反向代理初探
- Nginx实现TCP反向代理
- Nginx服务器安装,高性能的HTTP、TCP、反向代理、负载均衡等服务和配置
- Nginx搭建反向代理服务器过程详解
- 反向代理服务器——nginx
- nginx 反向代理 ,配置 含自定义header 和php fastcgi
- Nginx反向代理Tomcat日志获取真实IP
- nginx配置多域名反向代理
- 使用nginx反向代理后,获取用户ip及原理解释
- Nginx 反向代理获取设备真实的IP地址
- nginx作Golang反向代理服务器
- nginx+tomcat 反向代理 负载均衡配置