美文网首页
学习Nginx小结

学习Nginx小结

作者: mah93 | 来源:发表于2019-10-09 16:27 被阅读0次

    前言

    Nginx是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。 Igor 将源代码以类 BSD 许可证的形式发布。尽管还是测试版,但是,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。

    代理服务器

    Nginx提供邮件代理服务,主要包含以下功能:

    • 支持使用外部HTTP认证服务器重定向用户到IMAP/POP3后端,并支持IMAP认证方式和POP3认证方式。
    • 支持使用HTTP认证服务器认证用户后重定向连接到内部SMTP后端,并支持SMTP认证方式。
    • 支持邮件代理服务下的安全套接层安全协议SSL。
    • 支持纯文本通信协议的扩展协议STARTTLS。

    HTTP代理和反向代理

    ​ 代理服务和反向代理服务是Nginx服务器作为Web服务器的主要功能之一,尤其是反向代理服务,是应用十分广泛的功能。

    ​ 在提供反向代理服务方面,Nginx服务器转发前端请求性能稳定,并且后端转发与业务配置相互分离,配置相当灵活。在进行Nginx服务器配置的时候,配置后端转发请求完全不用关心网络环境如何,可以指定任意IP地址和端口号,或者其他类型的链接、请求等。

    Nginx作为反向代理的特点

    • 接收用户请求是异步的,即先将用户请求全部接收下来,再一次性发送后后端web服务器,极大的减轻后端web服务器的压力;
    • Nginx代理和后端web服务器间无需长连接;
    • 发送响应报文时,是边接收来自后端web服务器的数据,边发送给客户端的;
    • 调度灵活。Nginx工作在网络协议栈的第七层,能够对HTTP应用请求进行解析和分流,支持比较复杂的正则规则,具有更优化的负载均衡效果。
    • 网络依赖型低。Nginx对网络的依赖程度非常低,理论上讲,只要能够ping通就可以实施负载均衡,而且可以有效区分内网和外网流量。
    • 支持服务器检测。Nginx能够根据应用服务器处理页面返回的状态码、超时信息等检测服务器是否出现故障,并及时返回错误的请求重新提交到其它节点上。

    负载均衡

    ​ 客户端向Nginx发送请求,接着Nginx根据某种负载机制转发请求至目标服务器(这些服务器都运行着相同的应用),并把获得的内容返回给客户端,期中,代理请求可能根据配置被发往不同的服务器。

    nginx负载均衡.png

    安装Nginx

    由于服务器是ubuntu系统,这里仅展示在ubuntu系统下安装过程,其他操作系统可自行查找

    登录服务器之后执行,下载nginx安装包

    $ sudo wget http://nginx.org/download/nginx-1.2.2.tar.gz
    

    然后解压

    $ sudo  tar -xzvf nginx-1.2.2.tar.gz
    

    进入解压之后的文件夹

    $ cd nginx-1.2.2
    $ ./configure
    

    如果一切顺利的话,执行

    $ make
    $ make install
    

    完成安装,可以在/usr/local文件下找到nginx文件夹

    然后访问服务器即可看到

    welcome nginx

    字样

    Nginx安装常见问题(ubuntu)

    • 缺少pcre

      执行./configure之后,出现

      ./configure: error: the HTTP rewrite module requires the PCRE library. You can either disable the module by using --without-http_rewrite_module option, or install the PCRE library into the system, or build the PCRE library statically from the source with nginx by using --with-pcre=<path> option. 
      

      即提示缺少pcre library

      $ sudo apt-get undate
      $ sudo apt-get install libpcre3 libpcre3-dev
      
    • 缺少gcc-c++和libtool

      执行./configure之后,出现

      libtool: compile: unrecognized option `-DHAVE_CONFIG_H' 
      libtool: compile: Try `libtool --help' for more information. 
      make[1]: *** [pcrecpp.lo] Error 1 
      make[1]: Leaving directory `/usr/local/src//pcre-8.31' 
      make: *** [all] Error 2root@wolfdog-virtual-machine:~/work/pcre-8.12$ libtool -help -DHAVE_CONFIG_H 
      The program 'libtool' is currently not installed.  You can install it by typing: 
      sudo apt-get install libtool 
      

      即提示缺少libtool和gcc-c++

      $ sudo apt-get install libtool  
      $ sudo apt-get install gcc-c++ 
      
    • 缺少zlib库

      执行./configure之后,出现

      ./configure: error: the HTTP gzip module requires the zlib library. 
      You can either disable the module by using --without-http_gzip_module 
      option, or install the zlib library into the system, or build the zlib library 
      statically from the source with nginx by using --with-zlib=<path> option. 
      

      其提示缺少zlib库

      $ sudo apt-get install openssl libssl-dev libperl-dev 
      

    Nginx安装常见问题(centos)

    在centos系统下如遇到以上问题,运行以下命令:

    $ yum install gcc-c++
    $ yum install -y pcre pcre-devel  
    $ yum install -y zlib zlib-devel
    $ yum install -y openssl openssl-devel
    

    Nginx命令

    Nginx启动

    进入nginx安装目录,运行以下命令:

    $ ./sbin/nginx
    

    如果没有任何错误信息输出,则启动成功。也可以使用以下命令加载配置文件:

    $ ./nginx/sbin/nginx -c ./nginx/conf/nginx.conf
    

    启动成功之后可以使用:

    $ ps -ef|grep nginx
    

    来查看Nginx服务的进程状态。

    Nginx停止

    ​ 停止Nginx服务有两种方法:一种是快速停止,一种是平缓停止。快速停止是指立即停止当前Nginx服务正在处理的所有网络请求,马上丢弃连接,定制工作。平缓停止是指允许Nginx服务将当前正在处理的网络请求处理完成,并不再接受新的请求,之后关闭连接,停止工作。

    ​ 停止Nginx服务的操作比较多,可以发送信号:

    $ ./sbin/nginx -g TERM | INT | QUIT
    

    ​ 其中,TERM和INT信号用于快速停止,QUIT用于平缓停止。

    ​ 或者:

    $ kill TERM | INT | QUIT `/nginx/logs/nginx.pid`
    

    ​ 当然也可以使用kill命令向Nginx进程发送-9或者SIGKILL信号强制关闭Nginx服务:

    $ kill -9 | SIGKILL `/nginx/logs/nginx.pid`
    

    Nginx重启

    ​ 以下命令实现Nginx平滑重启:

    $ kill HUP `/nginx/logs/nginx.pid`
    

    Nginx配置文件

    `nginx.conf`
    user nobody                                     #指定用户群
    worker_processes                                #cpu核数/进程数
                                                    #工作衍生数/核数*2
    error_log                                       #错误日志存放地点
    pid                                             #控制系统中重要文件
    events {
      worker_connections                            #最大连接数
    }
    http {
      gzip                                          #压缩传输
      server {                                      #server块
        ...
        location {                                  #location块
          
        }
      }
    }
    
    • http块主要是配置代理、缓存和日志定义绝大多数功能和第三方模块配置。
    • server块配置虚拟主机。
    • location块对请求进行处理。

    Nginx配置虚拟主机

    虚拟主机指的是server块对外提供的虚拟主机

    1. 查看服务器的IP地址

    2. 绑定IP地址与虚拟主机

      $ ifconfig XXX:0 192.168.X.X netmask XXX.XXX.XXX.XXX up
      $ ifconfig XXX:1 192.168.X.X+1 netmask XXX.XXX.XXX.XXX up
      ...
      
    3. 虚拟主机的配置

      虚拟主机的配置可以在nginx.conf下配置,但是不推荐。可以新建一个配置文件,配置好之后在nginx.conf下引用该文件即可。

      $ touch xxx.conf
      ` 配置写在http中的server下 `
      server {
        listen: 192.168.X.X;                   #刚刚配置的虚拟主机IP,不指定端口的话默认80端口
        server_name;                           #名称
        access_log;                            #日志文件
        location / {
          index html.index;                    #访问的首页
          root html;                           #访问路径
        }  
      } 
      

    缓存配置

    对于网页请求的缓存配置在http下的server块中配置

    local ~.*\.(jpg){
      expires 2d;                           #设置图片2天过期
    }
    local ~.*\.(css|js){
      expires 1h;                           #设置css文件和js文件1小时过期
    }
    
    `压缩配置`
    #gzip on;                               #开启gzip压缩
    #gzip_min_length 1k;                    #小于1k不进行压缩
    #gzip_buffers 4 16k;                    #申请内存大小(4个16k)
    #gzip_http_version 1.1;                 #识别版本
    #gzip_vary on;                          #判断客户端浏览器是否支持gzip压缩
    

    日志文件

    • Nginx的日志文件在http块中配置
    #log_format                             #日志文件格式配置
    `在http配置`
    #remote_addr                            #客户端IP地址
    #remote_user                            #客户端用户名
    #request                                #请求地址
    #status                                 #请求状态
    #body_bytes_sent                        #向用户发送字节数
    #http_refer                             #原网页(从哪里访问)
    #http_user_agent                        #客户浏览器信息
    #http_x_forword_for                     #客户端IP地址
    `日志文件存储路径`
    #access_log xx/xx/xx                    #存放路径
    #access_off                             #关闭日志文件记录
    
    • 日志文件切割(手动切割)
    $ mv access.log 20160708.log                #移动
    # kill -USR | 进程号                     #切割日志
    # ps -ef | grep nginx                   #nginx进程号
    

    总体的流程是:先备份老的日志文件,之后再切割

    • 自动切割日志文件�
    $ crontab + 批处理                           定时每天操作
    `新建批处理文件`
    $ touch cutlog.sh
    $ vi cutlog.sh
    
    D=$(date+%Y%M%d)
    mv /user/local/nginx/logs/access.log {D}.log
    kill -USR | (cat /user/local/nginx/nginx.pid)
    
    `定时处理批处理`
    #crontab -e 23 59 *** /bin/bash /user/local/nginx/logs/cutlog.sh
    

    Nginx卸载

    由于服务器是ubuntu系统,这里仅展示在ubuntu系统下安装过程,其他操作系统可自行查找。

    仍然使用apt-get命令

    $ apt-get purge nginx
    $ apt-get autoremove
    

    相关文章

      网友评论

          本文标题:学习Nginx小结

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