前言
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 | cd nginx-1.2.2 |
如果一切顺利的话,执行
1 | make |
完成安装,可以在/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
7libtool: 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 | $ yum install gcc-c++ |
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 | `nginx.conf` |
- http块主要是配置代理、缓存和日志定义绝大多数功能和第三方模块配置。
- server块配置虚拟主机。
- location块对请求进行处理。
Nginx配置虚拟主机
虚拟主机指的是server块对外提供的虚拟主机
查看服务器的IP地址
绑定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
...虚拟主机的配置
虚拟主机的配置可以在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;
server_name;
access_log;
location / {
index html.index;
root html;
}
}缓存配置
对于网页请求的缓存配置在http下的server块中配置
1 | local ~.*\.(jpg){ |
日志文件
- Nginx的日志文件在http块中配置
1 | #log_format #日志文件格式配置 |
- 日志文件切割(手动切割)
1 | mv access.log 20160708.log #移动 |
总体的流程是:先备份老的日志文件,之后再切割
- 自动切割日志文件
1 | $ crontab + 批处理 定时每天操作 |
Nginx卸载
由于服务器是ubuntu系统,这里仅展示在ubuntu系统下安装过程,其他操作系统可自行查找。
仍然使用apt-get命令
1 | $ apt-get purge nginx |