学习Nginx小结

前言

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= 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= 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小结)