0%

学习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

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

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

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

然后解压

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

进入解压之后的文件夹

1
2
$ cd nginx-1.2.2
$ ./configure

如果一切顺利的话,执行

1
2
$ make
$ make install

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

然后访问服务器即可看到

welcome nginx

字样

Nginx安装常见问题(ubuntu)

  • 缺少pcre

    执行./configure之后,出现

    1
    ./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

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

    执行./configure之后,出现

    1
    2
    3
    4
    5
    6
    7
    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++

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

    执行./configure之后,出现

    1
    2
    3
    4
    ./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库

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

    Nginx安装常见问题(centos)

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

1
2
3
4
$ 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安装目录,运行以下命令:

1
$ ./sbin/nginx

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

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

启动成功之后可以使用:

1
$ ps -ef|grep nginx

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

Nginx停止

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

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

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

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

​ 或者:

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

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

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

Nginx重启

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

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

Nginx配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
`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地址与虚拟主机

    1
    2
    3
    $ 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下引用该文件即可。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ 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块中配置

1
2
3
4
5
6
7
8
9
10
11
12
13
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; #申请内存大小(416k)
#gzip_http_version 1.1; #识别版本
#gzip_vary on; #判断客户端浏览器是否支持gzip压缩

日志文件

  • Nginx的日志文件在http块中配置
1
2
3
4
5
6
7
8
9
10
11
12
13
#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 #关闭日志文件记录
  • 日志文件切割(手动切割)
1
2
3
$ mv access.log 20160708.log				#移动
# kill -USR | 进程号 #切割日志
# ps -ef | grep nginx #nginx进程号

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

  • 自动切割日志文件
1
2
3
4
5
6
7
8
9
10
11
$ 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命令

1
2
$ apt-get purge nginx
$ apt-get autoremove