一、安装编译工具及库文件
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
二、首先要安装 PCRE
PCRE 作用是让 Nginx 支持 Rewrite 功能。
下载 PCRE 安装包
wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
解压
tar zxvf pcre-8.35.tar.gz
安装
./configure
make && make install
pcre-config --version
三、安装 Nginx
下载
wget http://nginx.org/download/nginx-1.18.0.tar.gz
解压
tar -xvf nginx-1.18.0.tar.gz
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
安装
make && make install
四 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
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
-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=]
解决方式
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
出现问题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,
解决方式
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;
}
重新
make && make install
实际使用
# 修改支持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{
}
网友评论