Nginx源码安装

作者: 心无君 | 来源:发表于2016-01-12 00:12 被阅读0次

    1.1 准备源码包

    1. pcre
    http://www.pcre.org/
    
    • zlib
      http://www.zlib.net/
      
    • openssl
      http://www.openssl.org/
      
    • echo-nginx-module
      https://github.com/openresty/echo-nginx-module/tags
      

    该模块主要用于方便开发人员调试,建议安装该模块,可便于调试

    * ngx_devel_kit
    

    https://github.com/simpl/ngx_devel_kit

    * set-misc-nginx-module
    

    https://github.com/openresty/set-misc-nginx-module
    该模块主要用于decode uri, 依赖ngx_devel_kit模块

    * luajit
    

    http://luajit.org/

    * lua-nginx-module
    

    https://github.com/chaoslawful/lua-nginx-module
    该模块用于支持lua语言,有高并发自定义需求建议安装。

    * nginx
    

    http://nginx.org/

    
    ### 1.2 源码安装
    1. 安装libunwind库
    

    下载:http://download.savannah.gnu.org/releases/libunwind
    解压:
    tar -zxvf libunwind-1.1.tar.gz
    安装:
    ./configure
    make CFLAGS=-fPIC
    sudo make CFLAGS=-fPIC install

    * 安装google-perftools
    

    下载:http://google-perftools.googlecode.com
    解压:
    tar -zxvf gperftools-2.1.tar.gz
    安装:
    ./configure
    make
    sudo make install
    配置环境:
    sudo echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
    sudo ldconfig

    * 安装luajit(Nginx暂时只支持到Lua5.1,不需要支持Lua开发可跳过此步骤)
    

    wget http://luajit.org/download/LuaJIT-2.0.4.tar.gz
    tar zxf LuaJIT-2.0.4.tar.gz
    cd LuaJIT-2.0.4
    make
    make install PREFIX=/data/software/luajit

    添加环境变量

    export LUAJIT_LIB=/data/software/luajit/lib
    export LUAJIT_INC=/data/software/luajit/include/luajit-2.0

    * 解压&&进入安装目录
    

    tar -zxvf nginx-1.8.0.tar.gz
    cd nginx-1.8.0

    * 取消debug模式
    **vim auto/cc/gcc**
    

    debug

    :178
    CFLAGS=”$CFLAGS -g”
    ==>

    debug

    CFLAGS=”$CFLAGS -g”

    * 将nginx默认日志格式改为datatime格式
    **vim src/http/modules/ngx_http_log_module.c**
    

    :222
    { ngx_string("time_local"), sizeof("28/Sep/1970:12:00:00 +0600") - 1,
    ngx_http_log_time }
    ==>
    { ngx_string("time_local"), sizeof("1970-09-28 12:00:00 +0600") - 1,
    ngx_http_log_time },
    :810
    return ngx_cpymem(buf, ngx_cached_http_log_time.data,
    ngx_cached_http_log_time.len);
    ==>
    return ngx_cpymem(buf, ngx_cached_err_log_time.data,
    ngx_cached_err_log_time.len);

    **vim src/core/ngx_times.c**
    

    :149
    (void) ngx_sprintf(p1, "%4d/%02d/%02d %02d:%02d:%02d",
    tm.ngx_tm_year, tm.ngx_tm_mon,
    tm.ngx_tm_mday, tm.ngx_tm_hour,
    tm.ngx_tm_min, tm.ngx_tm_sec);
    ==>
    (void) ngx_sprintf(p1, "%4d-%02d-%02d %02d:%02d:%02d",
    tm.ngx_tm_year, tm.ngx_tm_mon,
    tm.ngx_tm_mday, tm.ngx_tm_hour,
    tm.ngx_tm_min, tm.ngx_tm_sec);

    * 配置
    

    ./configure
    --prefix=/data/software/nginx
    --sbin-path=/data/software/nginx/sbin/nginx
    --conf-path=/data/software/nginx/etc/nginx.conf
    --pid-path=/data/software/nginx/tmp/nginx.pid
    --error-log-path=/data/software/nginx/log/error.log
    --http-log-path=/data/software/nginx/log/access.log
    --user=greentea
    --group=greentea
    --with-http_ssl_module
    --with-http_realip_module
    --with-http_stub_status_module
    --with-google_perftools_module
    --with-pcre=/data/software/src/pcre-8.34
    --with-zlib=/data/software/src/zlib-1.2.8
    --with-openssl=/data/software/src/openssl-1.0.1c
    --add-module=/data/software/src/echo-nginx-module-0.53
    --add-module=/data/software/src/ngx_devel_kit-0.2.19
    --add-module=/data/software/src/set-misc-nginx-module-0.25
    --add-module=/data/software/src/lua-nginx-module-0.10.0

    * 安装
    

    make -j 8
    make install

    * 准备配置文件
    拷贝nginx.conf至/data/software/nginx/etc下,提供参考如下:
    

    用户

    user greentea;

    工作进程,根据硬件调整,一般等于cpu核数

    worker_processes 8;

    错误日志 日志级别

    error_log log/error.log;

    pid放置的位置

    pid tmp/nginx.pid;

    google_perftools的线程目录

    google_perftools_profiles /data/greentea/tmp/tcmalloc/tcmalloc;

    指定进程可以打开的最大描述符,最好与ulimit -n 的值保持一致

    worker_rlimit_nofile 1048576;

    events {
    #使用epoll的I/O 模型
    use epoll;

      #工作进程的最大连接数量,根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行
      #每个进程允许的最多连接数, 理论上每台nginx服务器的最大连接数为worker_processes*worker_connections
      worker_connections  65536;
    

    }

    设定http服务器,利用它的反向代理功能提供负载均衡支持

    http {
    #设定mime类型,类型由mime.type文件定义
    include mime.types;

      default_type  application/octet-stream;
    
      charset  utf-8;
    
      log_format  main  '[$time_local] [$remote_addr] [$remote_user] [$http_x_forwarded_for] '
                       '[$request] [$status] [$request_time] [$body_bytes_sent] '
                       '[$http_referer] [$http_user_agent] [$bytes_sent] [$request_length]';
    
      #用了log_format指令设置了日志格式之后,需要用access_log指令指定日志文件的存放路径;
      access_log  log/access.log  main;
    
      #还原用户真实IP
      set_real_ip_from 127.0.0.1;
      set_real_ip_from 10.0.0.0/8;
      set_real_ip_from 172.16.0.0/12;
      set_real_ip_from 192.168.0.0/16;
      real_ip_header X-Forwarded-For;
      real_ip_recursive on;
    
      #客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,getconf PAGESIZE
      #client_header_buffer_size 4k;
    
      #如果把它设置为比较大的数值,例如256k,那么,无论使用firefox还是IE浏览器,来提交任意小于256k的图片,都很正常
      #如果注释该指令,使用默认的client_body_buffer_size设置,也就是操作系统页面大小的两倍,8k或者16k,问题就出现了。
      #无论使用firefox4.0还是IE8.0,提交一个比较大,200k左右的图片,都返回500 Internal Server Error错误
      client_body_buffer_size 512k;
    
      # 客户端最大上传文件大小
      client_max_body_size 1000m;
    
      #客户端保持连接超时时间
      keepalive_timeout 60;
      #客户端请求头读取超时时间
      #client_header_timeout 10;
      #客户端请求主体读取超时时间
      #client_body_timeout 10;
      #客户端响应超时时间
      #send_timeout 10;
    
      #sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件
      #对于普通应用,必须设为on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,
      #以平衡磁盘与网络IO处理速度,降低系统uptime
      sendfile        on;
      #此选项允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用
      #tcp_nopush     on;
      #
      #tcp_nodelay on;
    
      # http://www.cnblogs.com/rmbteam/archive/2011/10/26/2225010.html
      # 是否开启gzip数据压缩
      gzip  on; #决定是否开启gzip模块
      # 设置gzip申请内存的大小,其作用是按块大小的倍数申请内存空间
      # param1:int; param2:int(k) 后面单位是k
      gzip_buffers 16 8k;
      # 设置gzip压缩等级,等级越底压缩速度越快文件压缩比越小,反之速度越慢文件压缩比越大
      # param:1-9
      gzip_comp_level 6;
      # 当返回内容大于此值时才会使用gzip进行压缩,以K为单位,当值为0时,所有页面都进行压缩
      # param:int
      gzip_min_length 1000;
      # 用于识别http协议的版本,早期的浏览器不支持gzip压缩,用户会看到乱码,所以为了支持前期版本加了此选项,目前此项基本可以忽略
      # param: 1.0|1.1
      # gzip_http_version 1.0
      # Nginx做为反向代理的时候启用,
      gzip_proxied any;
      # 设置需要压缩的MIME类型,非设置值不进行压缩
      # param:text/html|application/x-javascript|text/css|application/xml
      gzip_types text/plain text/css text/javascript application/x-javascript application/xml application/javascript;
      gzip_vary on;
      gzip_disable "msie6";
    
      #后端服务器连接的超时时间_发起握手等候响应超时时间
      proxy_connect_timeout 90;
      #连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的时间)
      proxy_read_timeout 180;
      #后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
      proxy_send_timeout 180;
      #设置从被代理服务器读取的第一部分应答的缓冲区大小,通常情况下这部分应答中包含一个小的应答头
      #默认情况下这个值的大小为指令proxy_buffers中指定的一个缓冲区的大小,不过可以将其设置为更小
      proxy_buffer_size 256k;
      #设置用于读取应答(来自被代理服务器)的缓冲区数目和大小
      #默认情况也为分页大小,根据操作系统的不同可能是4k或者8k
      proxy_buffers 4 256k;
      ##
      #proxy_busy_buffers_size 256k;
      ##设置在写入proxy_temp_path时数据的大小,预防一个工作进程在传递文件时阻塞太长
      #proxy_temp_file_write_size 256k;
      ##proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
      #proxy_temp_path /data0/proxy_temp_dir;
      ##设置内存缓存空间大小为200MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为30GB
      #proxy_cache_path /data0/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
      #表示使nginx阻止HTTP应答代码为400或者更高的应答
      #proxy_intercept_errors on;
      #nginx等待后端返回
      proxy_ignore_client_abort on;
    
      #这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,
      #inactive是指经过多长时间文件没被请求后删除缓存
      #open_file_cache max=65535 inactive=60s;
      #这个是指多长时间检查一次缓存的有效信息
      #open_file_cache_valid 80s;
      #open_file_cache指令中的inactive参数时间内文件的最少使用次数
      #如果超过这个数字,文件描述符一直是在缓存中打开的
      #如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除
      #open_file_cache_min_uses 1;
    
      #负载均衡组定义
      #down:暂时不参与负载均衡
      #backup:预留的备份机器,只有其它机器挂了才访问  
      #max_fails:允许的请求失败次数  
      #fail_timeout:服务请求失败后,暂停服务时间
      #upstream myservers {
      #   ip_hash;
      #   server 192.168.12.133:80;
      #   server 192.168.12.133:80 down;
      #   server 192.168.12.133:80 max_fails=3     fail_timeout=20ms;
      #}
    
      #fastcgi优化配置
      fastcgi_connect_timeout 300;
      fastcgi_send_timeout 300;
      fastcgi_read_timeout 300;
      fastcgi_buffer_size 512k;
      fastcgi_buffers 8 512k;
      fastcgi_busy_buffers_size 1024;
      fastcgi_temp_file_write_size 1024;
    
      #include /data/software/nginx/etc/city.d/citys.geo.conf;
    
      include /data/software/nginx/etc/vhost.d/*.conf;
    

    }

    * 启动
    

    /data/software/nginx/sbin/nginx

    
    ### 1.3 常见问题
    
    1. 常用命令
    

    启动:

      /data/software/nginx/sbin/nginx
    

    停止:

      /data/software/nginx/sbin/nginx -s stop
    

    重新加载:

      /data/software/nginx/sbin/nginx -s reload
    

    测试配置文件是否正确:

      /data/software/nginx/sbin/nginx -t
      /data/software/nginx/sbin/nginx -t /data/software/nginx/etc/nginx.conf
    
    2. 添加开机启动
    

    在/etc/init.d/中建立软连接

    sudo ln -s /data/software/nginx/nginx /etc/init.d/nginx

    更新rc

    sudo update-rc.d -f nginx remove
    sudo update-rc.d -f nginx defaults

    3.  openssl编译错误
    错误信息
    

    /usr/bin/ranlib ../../libcrypto.a || echo Never mind.
    make[4]: Leaving directory /data/software/src/openssl-1.0.1c/crypto/cmac' if [ -n "" ]; then \ (cd ..; make libcrypto.so.1.0.0); \ fi make[3]: Leaving directory/data/software/src/openssl-1.0.1c/crypto'
    make[2]: Leaving directory /data/software/src/openssl-1.0.1c' make[1]: *** [/data/software/src/openssl-1.0.1c/.openssl/include/openssl/ssl.h] 错误 2 make[1]: Leaving directory/data/software/src/nginx-1.8.0'
    make: *** [build] 错误 2

    **vim auto/lib/openssl/conf**
    

    :31
    CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include"
    CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h"
    CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
    CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"
    ==>
    CORE_INCS="$CORE_INCS $OPENSSL/include"
    CORE_DEPS="$CORE_DEPS $OPENSSL/include/openssl/ssl.h"
    CORE_LIBS="$CORE_LIBS $OPENSSL/libssl.a"
    CORE_LIBS="$CORE_LIBS $OPENSSL/libcrypto.a"

    相关文章

      网友评论

        本文标题:Nginx源码安装

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