当前位置:首页 > 技术文章 > 正文内容

Nginx TCP代理转发和负载均衡

arlanguage4个月前 (12-24)技术文章32

众所周知,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;
}

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/429.html

分享给朋友:

“Nginx TCP代理转发和负载均衡” 的相关文章

基于Docker一键LNMP(Nginx+MySQL+PHP7/5+Redis)安装程序

一键部署LNMP环境的目的,该环境特点:完全开源支持多版本PHP切换(PHP5.4、PHP5.6、PHP7.2...)支持绑定任意多个域名支持HTTPS和HTTP/2PHP源代码位于host中MySQL data位于host中所有配置文件可在host中直接修改所有日志文件可在host中直接查看内置完...

面试常问知识点:Nginx设置代理的一个注意点

前几天,重启了下Nginx代理服务,发现报错了,以下是本次的思考。1:先解决问题查看Nginx错误日志:40 SSL_do_handshake() failed (SSL: error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handsha...

nginx出现大量499响应码怎么办?

一、问题现象监控发现Nginx服务日志中出现较多的499状态码,499状态码在Nginx中代表的是客户端在服务端返回之前主动断开了连接,由于客户端设置的超时时间为2s,故到达2s未收到服务端响应客户端主动断开了连接造成了499响应码。二、可能的故障点服务器的问题,例如CPU使用率高,队列堵塞,导致无...

Nginx如何配置正向代理:一步步教你轻松上手

Nginx作为一个高性能的HTTP和反向代理服务器,广泛应用于各类网站和服务中。然而,很多人可能不知道,Nginx同样可以配置为正向代理。今天我们就来详细讲解一下如何配置Nginx作为正向代理,让你的网络访问更加灵活便捷。什么是正向代理?正向代理是指客户端通过代理服务器访问目标服务器的过程。简单来说...

Nginx安全相关配置常用教程 nginx安全策略

1. 限制请求速度设置 Nginx、Nginx Plus 的连接请求在一个真实用户请求的合理范围内。比如,如果你觉得一个正常用户每两秒可以请求一次登录页面,你就可以设置 Nginx 每两秒钟接收一个客户端 IP 的请求(大约等同于每分钟30个请求)。limit_req_zone $binary_re...

Nginx的安装及配置详解 nginx1.12安装

Nginx是一个强大的免费开源的HTTP服务器和反向代理服务器。在Web开发项目中,nginx常用作为静态文件服务器处理静态文件,并负责将动态请求转发至应用服务器(Django, Flask, etc)。熟悉Nginx的配置对Web开发和运维人员来说至关重要。本文整理了Nginx的配置大全,可以作为...