以下均为本人理解,欢迎大佬指出错误,小白希望深入理解请到官网
查看TroubleShot,本文最后
为什么使用nginx
因为虽然之前的文章进行rabbitmq的集群搭建,但是在使用过程中,还是要进行负载均衡。尽可能的让每一个节点收到请求,这个三个节点的集群才有意义。
Niginx是什么?
Nginx (engine x) 是一个高性能的HTTP和[反向代理]web服务器,同时也提供了IMAP/POP3/SMTP[服务]。国内貌似都只是用来做反向代理和负载均衡。
Nginx安装
前提是linux的gcc编译环境正常
-
1.安装基础环境
apt-get install build-essential
apt-get install libtool
cd /usr/local/src
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.41.tar.gz
tar -zxvf pcre-8.41.tar.gz
cd pcre-8.41
./configure
make
make insta
如果你在自己的目录,然后把pcre-8.41下的文件拷贝/usr/local/src/,Nginx-1.17.1会去这里找pcre。
cd /usr/local/src
wget http://zlib.net/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make
make install
apt-get install openssl
apt-get install libssl-dev
以上都是一些基础环境,本人不知道是干嘛的,就像你使用软件你不会想操作系统是怎么使用硬件的。这些有兴趣,有能力,有时间再去研究吧!
- 2.下面开始安装Nginx了
cd /usr/local/src
wget http://nginx.org/download/nginx-1.17.1.tar.gz
tar -zxvf nginx-1.17.1.tar.gz
cd nginx-1.17.1
#编译我们要使用的模块,重点是最后的Stream模块,否则无法使用Stream关键字
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_gzip_static_module --http-client-body-temp-path=/usr/local/nginx/tmp/client/ --http-proxy-temp-path=/usr/local/nginx/tmp/proxy/ --http-fastcgi-temp-path=/usr/local/nginx/tmp/fcgi/ --with-poll_module --with-file-aio --with-http_realip_module --with-http_addition_module --with-http_addition_module --with-http_random_index_module --with-http_stub_status_module --http-uwsgi-temp-path=/usr/local/nginx/uwsgi_temp --http-scgi-temp-path=/usr/local/nginx/scgi_temp --with-pcre=/usr/local/src/pcre-8.41 --with-stream
make
make install
安装成功后,先学习下目录和命令
目录 | 作用 |
---|---|
/usr/local/nginx/conf | Nginx启动配置文件nginx.conf在这里 |
/usr/local/nginx/sbin | 启动脚本Nginx在这里 |
/usr/local/nginx/logs | 日志 |
/var/logs/nginx | 日志,不清楚为啥两个地方日志 |
命令 | 作用 |
---|---|
./nginx -V | 查看版本号及已编译模块 |
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf | 使用配置文件启动 |
./nginx -s reload | 重新加配置 |
kill -QUIT 2072 | 杀死进程,可以杀一个,两个nginx进程都退出 |
- 3.添加如下配置在/usr/local/nginx/conf/nginx.conf
stream {
#打开nginx的转发日志,可以看到请求从哪里来,被转发到那台机器上
log_format proxy '$remote_addr [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
'$session_time "$upstream_addr" '
'"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
access_log /var/log/nginx/tcp-access.log proxy ;
open_log_file_cache off;
include /etc/nginx/conf.d/*.stream;
#指定需要负载均衡的服务器地址
upstream rabbitmq {
server 47.102.115.83:5672 weight=5 max_fails=1 fail_timeout=30s;
server 47.102.115.83:5673 weight=5 max_fails=1 fail_timeout=30s;
server 47.102.115.83:5674 weight=5 max_fails=1 fail_timeout=30s;
}
# 创建一个虚拟主机来监听端口
server {
listen 5675;
proxy_connect_timeout 30s;
proxy_timeout 30s;
proxy_pass rabbitmq;
}
}
上面配置就做了三件事
1.创建一个虚拟主机监听端口
2.指定需要负载均衡的上游服务器
3.开启TCP日志,追踪请求转发
4.保留原有的http模块,不要删除,用来验证nginx默认配置
-
4.启动nginx
验证默认的配置
image.png
验证转发Rabbitmq
首先查看springboot连接日志
image.png
然后查看前面我们配置的tcp追踪日志
image.png
图中转发到了rabbitmq的5672,5673,5674三个节点的端口
Trouble Shot
一直连接不上rabbitmq,默认配置页面可以进入,查看日志
recv() failed (104: Connection reset by peer) while reading response header from upstream
缓存或者超时时间太小
网友评论