前言
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安装包
$ 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块对外提供的虚拟主机
查看服务器的IP地址
-
绑定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 ...
-
虚拟主机的配置
虚拟主机的配置可以在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