美文网首页nginx
yum安装nginx后添加nginx-upstream-fair

yum安装nginx后添加nginx-upstream-fair

作者: 岑吾 | 来源:发表于2020-12-19 15:03 被阅读0次

    yum安装的nginx是不带nginx-upstream-fair模块的,所以在负载均衡的策略中使用fair会报错。

    1. 安装nginx的依赖包

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

    2. 查看原nginx版本信息

    #/usr/sbin/nginx 默认yun安装的nginx执行行文路径
    #-V大写的v是详细的版本和配置信息
    
    /usr/sbin/nginx -V
    nginx version: nginx/1.18.0
    built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
    built with OpenSSL 1.0.2k-fips  26 Jan 2017
    TLS SNI support enabled
    configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
    

    3. 去下载nginx和fair

    将下载的nginx和fair模块解压到本地目录。这里直接放到/home目录下了

    [root@localhost home]# pwd
    /home
    [root@localhost home]# ll
    total 1028
    -rw-r--r--. 1 root root   10073 Dec 19 13:23 gnosek-nginx-upstream-fair-a18b409.tar.gz
    drwxr-xr-x. 9 1001 1001     186 Dec 19 13:29 nginx-1.18.0
    -rw-r--r--. 1 root root 1039530 Dec 19 13:21 nginx-1.18.0.tar.gz
    drwxrwxr-x. 2 root root      89 Apr  8  2012 nginx-upstream-fair
    

    4. 配置fair模块

    进入nginx源码目录,使用前面第2步查出来的配置信息configure arguments:,在后面添加--add-module=/home/nginx-upstream-fair。这里是你解压的nginx-upstream-fair路径

    ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-module=/home/nginx-upstream-fair
    

    5.编译

    直接使用make编译,不要加make install。后面手动去替换就好。

    如果出现错误: ngx_http_upstream_srv_conf_t’ has no member named ‘default_port

    /home/nginx-upstream-fair/ngx_http_upstream_fair_module.c: In function ‘ngx_http_upstream_init_fair_rr’:
    /home/nginx-upstream-fair/ngx_http_upstream_fair_module.c:543:28: error: ‘ngx_http_upstream_srv_conf_t’ has no member named ‘default_port’
         if (us->port == 0 && us->default_port == 0) {
                                ^
    /home/nginx-upstream-fair/ngx_http_upstream_fair_module.c:553:51: error: ‘ngx_http_upstream_srv_conf_t’ has no member named ‘default_port’
         u.port = (in_port_t) (us->port ? us->port : us->default_port);
    

    找到nginx的源码 src/http/ngx_http_upstream.h文件找到ngx_http_upstream_srv_conf_s结构添加in_port_t default_port;

    struct ngx_http_upstream_srv_conf_s {
        ngx_http_upstream_peer_t         peer;
        void                           **srv_conf;
    
        ngx_array_t                     *servers;  /* ngx_http_upstream_server_t */
    
        ngx_uint_t                       flags;
        ngx_str_t                        host;
        u_char                          *file_name;
        ngx_uint_t                       line;
        in_port_t                        port;
        in_port_t                        default_port;
        ngx_uint_t                       no_port;  /* unsigned no_port:1 */
    
    #if (NGX_HTTP_UPSTREAM_ZONE)
        ngx_shm_zone_t                  *shm_zone;
    #endif
    };
    

    修改保存后,再回到之前继续make

    6. 用新编译的nginx文件覆盖之前的

    编译好的文件会在nginx源码目录中的objs下。

    mv /usr/sbin/nginx /usr/sbin/nginx_bak  # 备份原来的
    cp /home/nginx-1.18.0/objs/nginx /usr/sbin/ginx
    systemctl start nginx
    

    本文参考: http://www.javamoney.cn/article/199

    相关文章

      网友评论

        本文标题:yum安装nginx后添加nginx-upstream-fair

        本文链接:https://www.haomeiwen.com/subject/gqccnktx.html