时隔一周再次更新文章,同样的风格不同的味道
四、Nginx纵深对比
Nginx 和 apache 的优缺点
1.nginx 相对于 apache 的优点:
轻量级,同样是 web 服务,比 apache 占用更少的内存及资源高并发, nginx 处理请求是异步非阻塞(如前端 ajax)的,而 apache 则是阻塞型的,在高并发下 nginx 能保持低资源,低消耗,高性能,高度模块化的设计。
2.apache 相对于 nginx 的优点:
Rewrite 重写 ,比 nginx 的 rewrite 模块多,基本想到的都可以找到并且少 bug ,nginx 的 bug 相对较多,apache(出身好起步高)。
3.Nginx 配置简洁, Apache 复杂
几种常用web服务器对比
对比项\服务器 | Apache | Nginx | Lighttpd |
---|---|---|---|
Proxy代理 | 非常好 | 非常好 | 一般 |
Rewriter | 好 | 非常好 | 一般 |
Fcgi | 不好 | 好 | 非常好 |
热部署 | 不支持 | 支持 | 不支持 |
系统压力 | 很大 | 很小 | 比较小 |
稳定性 | 好 | 非常好 | 不好 |
安全性 | 好 | 一般 | 一般 |
静态文件处理 | 一般 | 非常好 | 好 |
反向代理 | 一般 | 非常好 | 一般 |
@Author:lanyy699
五、Nginx实战安装
5-1、安装依赖
[root@lanyy ~]#yum install gcc-c++ -y
# nginx依赖包如下
[root@lanyy ~]#gcc openssl-devel pcre-devel zlib-devel
# 安装
[root@lanyy ~]#yum -y install gcc openssl-devel pcre-devel zlib-devel
5-2、解压文件
[root@lanyy ~]#tar -zxf nginx-1.8.1.tar.gz -C /opt/software/
5-3、configure配置
进入解压后的源码目录,然后执行 configure 命令进行编译配置到指定目录下
# 先创建目录
[root@lanyy ~]#mkdir -p /usr/soft/nginx
[root@lanyy ~]#./configure --prefix=/usr/soft/nginx
5-4、编译安装
make && make install
安装好后,会在 /usr/soft 下生成 nginx 目录(这是我编译前指定的),这个目录就是 nginx 的软件。
5-5、Nginx命令
启动后,访问虚拟机的 80 端口,可查看到Nginx初始界面,一旦 nginx 启动,就可以通过调用带有-s 参数的可执行文件来控制它。
使用语法:nginx -s 信号
信号可以是下列之一:
stop - 快速关机
quit - 优雅的关机
reload - 重新加载配置文件
reopen - 重新打开日志文件
例如,要停止 nginx 进程并等待工作进程完成当前请求的服务,可以执行以下命令:./nginx -s quit
@Author:lanyy699
六、Nginx配置详解
6-1、nginx默认配置详解
# 进程数,建议设置和 CPU 个数一样或 2 倍
worker_processes 2;
# 日志级别
error_log logs/error.log warning;(默认 error 级别)
# nginx 启动后的 pid 存放位置(nginx默认进程18621)
# pidlogs/nginx.pid;
events {
#配置每个进程的连接数,总的连接数= worker_processes * worker_connections,根据cpu和内存大小来配置,默认1024
worker_connections 10240;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
# 连接超时时间,单位秒
keepalive_timeout 65;
server {
listen 80;
server_name localhost
# 默认请求
location / {
root html; # 定义服务器的默认网站根目录位置
index index.php index.html index.htm; # 定义首页索引文件的名称
}
# 重定向去错误服务页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
6-2、Nginx负债均衡配置
nginx 支持以下负载均衡机制(或方法):
- a) 循环 - 对应用程序服务器的请求以循环方式分发,
- b) 最少连接数 - 将下一个请求分配给活动连接数最少的服务器,
- c) ip-hash - 哈希函数用于确定下一个请求(基于客户端的 IP 地址)应该选择哪个服务器。
6-2-0、默认负载平衡配置
使用 nginx 进行负载平衡的最简单配置可能如下所示:
http {
upstream lanyy{
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://lanyy;
}
}
}
在上面的示例中,在 srv1-srv3 上运行相同应用程序的 3 个实例。
如果没有专门配置负载均衡方法,则默认为循环法。所有请求都被代理到服务器组 shsxt,并且 nginx 应用 HTTP 负载平衡来分发请求。
6-2-1、轮询负载平衡
轮询【Round Robin】:请求在服务器上平均分配,与服务器权重有关,默认权重为1,即平均分配
upstream backend {
server backend1.example.com;
server backend2.example.com;
}
6-2-2、加权负载平衡
通过使用服务器权重,还可以进一步影响 nginx 负载均衡算法,谁的权重越大,分发到的请求就越多。(如下所示srv1占60%的权重,保证5次访问中3次出现srv1,并不是按照顺序出现)
upstream lanyy {
server srv1.example.com weight=3;
server srv2.example.com
server srv3.example.com;
}
6-2-3、最小连接负载平衡
在连接负载最少的情况下,nginx会尽量避免将过多的请求分发给繁忙的应用程序服务器,而是将新请求分发给不太繁忙的服务器,避免服务器过载。
upstream lanyy {
least_conn;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
6-2-4、会话持久性
上述的循环是最少连接数的负载平衡方法,每个后续客户端的请求都可能被分发到不同的服务器。不能保证相同的客户端总是定向到相同的服务器。
如果需要将客户端绑定到特定的应用程序服务器,换句话说,就是始终选择相同的服务器而言,就要使客户端的会话“粘滞”或“持久”,ip-hash 负载平衡机制就是有这种特性。使用 ip-hash,客户端的 IP 地址将用作散列键,以确定应该为客户端的请求选择服务器组中的哪台服器,此方法可确保来自同一客户端的请求将始终定向到同一台服务器,除非此服务器不可用。
upstream lanyy {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
6-3、Nginx访问控制机制
Nginx 还可以对 IP 的访问进行控制,allow 代表允许,deny 代表禁止.
location / {
allow 192.168.78.0/24;
deny 192.168.78.1;
allow 10.1.1.0/16;
allow 192.168.1.0/32;
deny all;
proxy_pass http://lanyy;
}
从上到下的顺序,匹配到了便跳出。如上的例子先禁止了 192.168.78.1,接下来允许了 3 个网段,其中包含了一个 ipv6,最后未匹配的 IP 全部禁止访问。
@Author:lanyy699
下一篇Nginx完结篇,欢迎伙伴订阅,主要科普一下虚拟主机,正反代理,Session记录机制。