技术博客 技术博客
  • JAVA
  • 仓颉
  • 设计模式
  • 人工智能
  • Spring
  • Mybatis
  • Maven
  • Git
  • Kafka
  • RabbitMQ
  • RocketMQ
  • Redis
  • Zookeeper
  • Nginx
  • 数据库套件
  • MySQL
  • Elasticsearch
  • MongoDB
  • Hadoop
  • ClickHouse
  • Hbase
  • Hive
  • Flink
  • Flume
  • SQLite
  • linux
  • Docker
  • Jenkins
  • Kubernetes
  • 工具
  • 前端
  • AI
GitHub (opens new window)
  • JAVA
  • 仓颉
  • 设计模式
  • 人工智能
  • Spring
  • Mybatis
  • Maven
  • Git
  • Kafka
  • RabbitMQ
  • RocketMQ
  • Redis
  • Zookeeper
  • Nginx
  • 数据库套件
  • MySQL
  • Elasticsearch
  • MongoDB
  • Hadoop
  • ClickHouse
  • Hbase
  • Hive
  • Flink
  • Flume
  • SQLite
  • linux
  • Docker
  • Jenkins
  • Kubernetes
  • 工具
  • 前端
  • AI
GitHub (opens new window)
  • kafka

    • kafka-2.7.0 基本概念
    • Kafka-2.7.0 搭建及参数解析
    • kafka-2.7.0 spring boot 集成 kafka
    • kafka-2.7.0 kafka Connect
    • kafka-2.7.0 Kafka Streams 流处理
  • RabbitMQ

    • rabbitmq 简介
  • RocketMQ

    • RocketMQ 基础概念
    • RocketMQ 搭建
    • RocketMQ 整合spring boot
  • redis

    • Redis 介绍及安装
    • Redis 命令介绍
    • Redis 分布式锁介绍
    • Redis 事务介绍
    • Redis 的key失效通知介绍
    • Redis 配置文件解读
    • Redis 记一次宕机排查
    • Redis 高可用(一) 主从理论
    • Redis 高可用(二) 哨兵理论
    • Redis 高可用(三) 搭建
    • Redis 集群搭建
  • zookeeper

    • Zookeeper 介绍及安装
    • Zookeeper 做为锁使用
  • nginx

    • nginx-1.18.0 安装
      • 安装依赖
      • 安装Nginx
      • nginx TCP连接(只支持1.9或以上)
      • 实际使用
    • nginx 常见问题总结
    • nginx 高可用
  • 数据库套件

    • MyCat 1.6.7(一)MySQL高可用及分库分表
    • MyCat 1.6.7(二)高可用及权限
    • shardingsphere 4.x(一)Sharding-JDBC使用
    • shardingsphere 4.x(二)Sharding-Proxy使用
目录

nginx-1.18.0 安装

# 安装依赖

yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel
1

PCRE 作用是让 Nginx 支持 Rewrite 功能。
下载 PCRE 安装包

 wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
1

解压

 tar zxvf pcre-8.35.tar.gz
1

安装

./configure
make && make install
pcre-config --version
1
2
3

# 安装 Nginx

下载

wget http://nginx.org/download/nginx-1.18.0.tar.gz
1

解压

tar -xvf nginx-1.18.0.tar.gz
1

cd nginx-1.18.0 进入 nginx 模块 并安装

./configure --prefix=/home/nginx-1.18.0 --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-pcre=/home/pcre-8.35

// 安装地址
--prefix=/home/nginx-1.18.0
//  监控模块
--with-http_stub_status_module 
// https
--with-http_ssl_module
// http2 
--with-http_v2_module
// pcre地址
--with-pcre=/home/pcre-8.35
1
2
3
4
5
6
7
8
9
10
11
12

安装

make && make install
1

# nginx TCP 连接(只支持 1.9 或以上)

TCP 4 层协议负载均衡:使用长连接的方式,只要 clink 与 server 保持链接,下个请求 nginx 不会轮询到其他 server。
http 7 层协议协议:当你每请求一次 nginx,就会轮询到下一台 server 上。当然 http 是基于 TCP 的,TCP 的性质是需要经过 3 次握手,4 次分手操作。

3 次握手:

  1. 建立连接时,client 发送 SYN(SYN=J)到 server,并进入 SYN_SEND 状态,等待 server 确认。
  2. server 收到 SYN 包,必须确认 client 的 SYN(ACK=SYN+1),同时自己也发送一个 SYN 包(SYN=K),即 SYN+ACK 包,此时 server 状态为 V;
  3. client 收到 server 的 SYN+ACK 包,向 server 发送确认包 ACK(ACK=K+1),此包发送完毕,client 和 server 进入 ESTABLISHED 状态,完成三次握手。完成握手 clink 向 server 传送数据。

4 次分手:
由于 TCP 链接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后技能发送一个 FIN 来终止这个方向的链接。收到一个 FIN 只意味着这一方向上没有数据流动,一个 TCP 链接在收到一个 FIN 后任能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

  1. clientA 发送一个 FIN,用来关闭 clientA 到 serverA 的数据传送。
  2. serverA 收到这个 FIN,它发回一个 ACK,确认序号为收到的序号 + 1. 和 SYN 一样,一个 FIN 将占用一个序号。
  3. serverA 关闭与 clientA 的链接,发送一个 FIN 给 clientA。
  4. clientA 发回 ACK 报文确认,并将确认序号设置为收到的序号 + 1.

区分 tcp 和 http:
TCP 是传输层,而 http 是应用层,知道了 http 是要基于 TCP 连接基础上的,简单的说,TCP 就是单纯建立连接,不涉及任何我们需要请求的实际数据,简单的传输。http 是用来收发数据,即实际应用上来的。

下载 nginx_tcp_proxy_module

wget https://github.com/yaoweibin/nginx_tcp_proxy_module/tarball/master
tar -xvf yaoweibin-nginx_tcp_proxy_module-v0.4.5-40-gb8a3028.tar.gz
# 自己先要创建个 package
mv yaoweibin-nginx_tcp_proxy_module-b8a3028/ /home/nginx-1.18.0/package
1
2
3
4
cd /home/nginx-1.18.0
patch -p1 < /home/nginx-1.18.0/package/yaoweibin-nginx_tcp_proxy_module-b8a3028/tcp.patch
./configure --add-module=/home/nginx-1.18.0/package/yaoweibin-nginx_tcp_proxy_module-b8a3028
make && make install
1
2
3
4

-bash: patch: command not found 需要 yum -y install patch 安装即可
官网地址: https://github.com/yaoweibin/nginx_tcp_proxy_module

出现问题 1

http_request_parser.c:1096:1: note: here
http_request_parser.c:1112:5: error: this statement may fall through [-Werror=implicit-fallthrough=]
1
2

解决方式

vim /home/nginx-1.18.0/objs/Makefile
修改如下:
#CFLAGS =  -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g 
CFLAGS =  -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -g
1
2
3
4

出现问题 2

/home/nginx-1.18.0/package/yaoweibin-nginx_tcp_proxy_module-b8a3028/modules/ngx_tcp_ssl_module.c:407:9: error: too few arguments to function ‘ngx_ssl_session_cache’
  407 |     if (ngx_ssl_session_cache(&conf->ssl, &ngx_tcp_ssl_sess_id_ctx,
      |         ^~~~~~~~~~~~~~~~~~~~~
In file included from src/core/ngx_core.h:84,
                 from /home/nginx-1.18.0/package/yaoweibin-nginx_tcp_proxy_module-b8a3028/modules/ngx_tcp_ssl_module.c:3:
src/event/ngx_event_openssl.h:194:11: note: declared here
  194 | ngx_int_t ngx_ssl_session_cache(ngx_ssl_t *ssl, ngx_str_t *sess_ctx,
1
2
3
4
5
6
7

解决方式

vim /home/nginx-1.18.0/package/yaoweibin-nginx_tcp_proxy_module-b8a3028/modules/ngx_tcp_ssl_module.c
找到调用 ngx_ssl_session_cache 的地方,添加一个参数 conf->passwords,整体如下:

    if (ngx_ssl_session_cache(&conf->ssl, &ngx_tcp_ssl_sess_id_ctx,
                              conf->passwords,
                              conf->builtin_session_cache,
                              conf->shm_zone, conf->session_timeout)
        != NGX_OK)
    {
        return NGX_CONF_ERROR;
    }
1
2
3
4
5
6
7
8
9
10
11

重新

make && make install
1

# 实际使用

# 修改支持TCP协议
tcp{
    # 负载均衡
    upstream test{
        server 192.168.81.102:8080;
        server 192.168.81.102:8081;
    }

    server{
        listen 9999;
        server_name localhost;
        # 反向代理到 upstream
        proxy_pass test;
    }
}

# 允许的 http请求
http{

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
上次更新: 6/11/2025, 4:10:30 PM
Zookeeper 做为锁使用
nginx 常见问题总结

← Zookeeper 做为锁使用 nginx 常见问题总结→

Theme by Vdoing | Copyright © 2023-2025
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式