YJ的博客
个人生活、工作的随笔

本站部分文章、资源来自互联网,版权归原作者及网站所有,如侵犯了您的权利,请及时致信告知我

粤ICP备15050546号-1

网站地图

CentOS7 编译安装Nginx并添加tcp模块实现负载

系统:CentOS7
环境:新装minimal

一、基础环境配置
这里不详细叙述,很简单的东西

二、依赖库配置、编译和安装Nginx
1、先创建一个名为nginx并且没有登陆权限的用户和名为nginx的用户组

groupadd -r nginx && useradd -r -g nginx -s /bin/false -M nginx

2、yum安装nginx必须的依赖库

yum -y install openssl openssl-devel libxml2-devel libxslt-devel perl-devel perl-ExtUtils-Embed

3、yum安装tcp_proxy_module可能用到的依赖库
这里有些依赖以前是安装过的,但没关系,存在的就不会再重装

yum -y install gcc gcc-c++  ncurses-devel libxml2-devel \
openssl-devel curl-devel libjpeg-devel libpng-devel autoconf pcre-devel \
libtool-libs freetype-devel gd zlib-devel  zip unzip \
wget crontabs iptables file bison cmake patch mlocate \
flex diffutils automake make  readline-devel  \
glibc-devel glibc-static glib2-devel  bzip2-devel \
gettext-devel libcap-devel logrotate ntp \
libmcrypt-devel patch

4、官网下载nginx1.6.3的tar包并解压到服务器上
编译安装的nginx不同于yum装,有些功能或者模块包在nginx里面默认是没有的,例如pcre和zlib模块,这里也下载下来,后面需要用到

#下载并解压nginx1.6.3的包到服务器上并进入nginx目录
wget -c http://nginx.org/download/nginx-1.6.3.tar.gz && tar -zxf nginx-1.6.3.tar.gz && cd nginx-1.6.3
#下载pcre的tar包并解压,以便支持nginx的Rewrite功能
wget -c http://git.typecodes.com/libs/php/pcre-8.36.tar.gz && tar -zxf pcre-8.36.tar.gz
#下载zlib的tar包并解压,以便支持nginx的Gzip压缩功能
wget -c http://git.typecodes.com/libs/nginx/zlib-1.2.8.tar.gz && tar -zxf zlib-1.2.8.tar.gz

另外顺便新建好nginx1.6.3安装时所需要用到的目录

#这里准备的目录我是按照yum装的来配置的,自己可以根据实际来创建
mkdir -p /var/lib/nginx/tmp/{client_body,proxy,fastcgi,uwsgi,scgi}
#这里要注意权限,否则后面启动服务的时候就会失败,这里也是按照yum装的权限来修改的
cd /var/lib/
chown -R nginx:nginx /var/lib/nginx/
chmod -R 700 nginx/
cd /var/lib/nginx/tmp/
chown -R nginx:root *

5、配置nginx_tcp_proxy_module以便支持nginx的tcp反向代理功能
上面已经把所有依赖安装好,下面直接把tcp模块加入到nginx中

#下载tcp模块压缩包并移动到/opt目录下
wget --no-check-certificate https://github.com/yaoweibin/nginx_tcp_proxy_module/archive/master.zip && mv master.zip /opt/
#解压tcp模块
cd /opt/ && unzip master.zip
#进入nginx1.6.3目录并使用patch命令加载tcp模块到nginx中
cd ~/nginx-1.6.3 && patch -p1 < /opt/nginx_tcp_proxy_module-master/tcp.patch

6、编译安装nginx1.6.3,并配置启动服务

cd ~/nginx-1.6.3/
#下面开始编译安装
./configure \
--prefix=/usr/share/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--http-client-body-temp-path=/var/lib/nginx/tmp/client_body \
--http-proxy-temp-path=/var/lib/nginx/tmp/proxy \
--http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi \
--http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi \
--http-scgi-temp-path=/var/lib/nginx/tmp/scgi \
--pid-path=/run/nginx.pid \
--lock-path=/run/lock/subsys/nginx \
--user=nginx \
--group=nginx \
--with-file-aio \
--with-http_ssl_module \
--with-http_spdy_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_xslt_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_stub_status_module \
--with-http_perl_module \
--with-mail \
--with-mail_ssl_module \
--with-pcre=pcre-8.36 \
--with-debug \
--with-zlib=zlib-1.2.8 \
--with-ld-opt="-Wl,-E" \
--add-module=/opt/nginx_tcp_proxy_module-master

等待一段时间,nginx在进行配置
配置完毕后就可以编译安装了

make && make install

7、配置开机启动服务

vi /usr/lib/systemd/system/nginx.service
#添加以下内容
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillMode=process
KillSignal=SIGQUIT
TimeoutStopSec=5
PrivateTmp=true
[Install]
WantedBy=multi-user.target
systemctl enable nginx
systemctl start nginx
systemctl stop nginx
systemctl restart nginx

8、使用nginx实现tcp反向代理
这里我直接贴出我的

vim /etc/nginx/nginx.conf
#下面就是tcp反代,同样可以使用include 方式来用文件夹替代,但注意不能同上面的http的include相同,会报错的
tcp {
    timeout 1d;
    proxy_read_timeout 1d;
    proxy_send_timeout 1d;
    proxy_connect_timeout 300;

upstream ims {
    server 192.168.10.38:4001 weight=40;
    server 192.168.10.35:4001 weight=10;
    server 192.168.10.42:4001 weight=10;
    check interval=3000 rise=2 fall=5 timeout=1000;
} 
server {
    listen 4001;
    proxy_pass ims;
    so_keepalive on; 
    tcp_nodelay on;
}
}

说明:
check interval 健康检查,单位是毫秒
rise 检查几次正常后,将reslserver加入以负载列表中
fall 检查几次失败后,摘除realserver
timeout 检查超时时间,单位许毫秒

其他剩余的几个参数,都只是为了保持tcp连接的,可以参考http里面的配置去添加

2016-08-05
203 views
暂无评论

发表评论