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
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
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 次握手:
- 建立连接时,client 发送 SYN(SYN=J)到 server,并进入 SYN_SEND 状态,等待 server 确认。
- server 收到 SYN 包,必须确认 client 的 SYN(ACK=SYN+1),同时自己也发送一个 SYN 包(SYN=K),即 SYN+ACK 包,此时 server 状态为 V;
- client 收到 server 的 SYN+ACK 包,向 server 发送确认包 ACK(ACK=K+1),此包发送完毕,client 和 server 进入 ESTABLISHED 状态,完成三次握手。完成握手 clink 向 server 传送数据。
4 次分手:
由于 TCP 链接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后技能发送一个 FIN 来终止这个方向的链接。收到一个 FIN 只意味着这一方向上没有数据流动,一个 TCP 链接在收到一个 FIN 后任能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
- clientA 发送一个 FIN,用来关闭 clientA 到 serverA 的数据传送。
- serverA 收到这个 FIN,它发回一个 ACK,确认序号为收到的序号 + 1. 和 SYN 一样,一个 FIN 将占用一个序号。
- serverA 关闭与 clientA 的链接,发送一个 FIN 给 clientA。
- 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
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
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
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
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
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
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
上次更新: 4/1/2025, 5:03:02 PM