网站首页 > 博客文章 正文
众所周知,nginx是一个高性能http和反向代理的web服务器,其实也可以用于代理转发TCP连接
从1.9.x版本开始,nginx增加了一个stream模块可以用于转发TCP连接
一、配置TCP转发的方法
1.首先找到nginx的配置文件nginx.conf
cd /etc/nginx/ #进入配置文件路径当前目录
vim nginx.conf
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
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;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
# Settings for a TLS enabled server.
#
# server {
# listen 443 ssl http2 default_server;
# listen [::]:443 ssl http2 default_server;
# server_name _;
# root /usr/share/nginx/html;
#
# ssl_certificate "/etc/pki/nginx/server.crt";
# ssl_certificate_key "/etc/pki/nginx/private/server.key";
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers PROFILE=SYSTEM;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# location / {
# }
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
2.nginx.conf添加stream模块,写入TCP代理转发的参数
#注意stream模块和http模块是同级,不要将stream添加到http模块里
stream{
upstream test{
server 192.168.0.1:8000(ip地址:端口号)
}
server{
listen 8000;
proxy_pass test;
}
}
二、nginx tcp代理转发的负载均衡
原理和nginx http代理转发思路一样,也是5种模式
轮询(默认)
每个请求按时间顺序分配给配置的server地址,如果其中一个server地址无法连通,会自动剔除
upstream test{
server 192.168.0.1:8090;
server 192.168.0.2:8090;
}
server{
listen 8090;
proxy_connect_timeout 1s;
proxy_pass test;
}
权重(weight)
给server地址配置weight权重值,weight和分配的访问比率成正比,一般用于所配置的server性能不均的情况
upstream test{
server 192.168.0.1:8090 weight=9; #10次请求9次转发到该地址
server 192.168.0.2:8090 weight=1;
}
server {
listen 8090;
proxy_pass test ;
}
ip_hash
每次请求按照请求访问方的IP的hash结果分配,每个用户分固定访问其中一个server地址
upstream test{
ip_hash;
server 192.168.0.1:8090;
server 192.168.0.2:8090;
}
server{
listen 8090;
proxy_pass test;
}
fair(第三方)需要安装第三方模块
按照server的地址的响应时间来分配,响应时间短的优先分配
upstream{
fair;
server 192.168.0.1:8090;
server 192.168.0.2:8090;
}
server{
listen 8090;
proxy_pass test;
}
url_hash
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
注意:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
upstream test{
hash $request_uri;
hash_method crc32;
server 192.168.0.1:8090;
server 192.168.0.2:8090;
}
server{
listen 8090;
proxy_pass test;
}
自定义负载
upstream test{
server 192.168.0.1:8090 down;
server 192.168.0.2:8090;
server 192.168.0.3:8090 backup;
}
server{
liisten 8090;
proxy_connect_timeout 1s; #一定要设置连接时间,否则不生效
proxy_timeout 1s; #proxy_connect_timeout和proxy_timeout 实测设置一个就可以生效
proxy_pass test;
}
- 上一篇: http Stream 流
- 下一篇: nginx四层代理
猜你喜欢
- 2024-12-19 nginx配置tcp代理
- 2024-12-19 Prometheus快速监控Nginx
- 2024-12-19 Nginx搭建RTMP推拉流服务器
- 2024-12-19 nginx入门——nginx访问日志(六)
- 2024-12-19 nginx配置http和tcp服务负载均衡
- 2024-12-19 解决php因为输出内容太短无法流式(Stream)输出问题
- 2024-12-19 利用Nginx正向代理实现局域网电脑访问外网
- 2024-12-19 使用 Nginx 实现推流搭建自己的流媒体服务器
- 2024-12-19 Nginx模块开发:从源码剖析整个Nginx框架
- 2024-12-19 Linux下如何用nginx+ffmpeg搭建流媒体服务器
你 发表评论:
欢迎- 367℃用AI Agent治理微服务的复杂性问题|QCon
- 358℃初次使用IntelliJ IDEA新建Maven项目
- 357℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 351℃Maven技术方案最全手册(mavena)
- 348℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 346℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 345℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 342℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)