Nginx详解

Nginx联合创始人安德鲁·阿列克谢夫(Andrew Alexeev)曾说:Nginx是为对Apache性能不满意的人而构建的。随着Internet需求的变化,Web服务器的工作也在变化。Nginx的构建比以往任何时候都更有效率,更可扩展,更安全,更强大。

Nginx的产生

Nginx 同 Apache 一样都是一种 Web 服务器。基于 REST 架构风格,以统一资源描述符(Uniform Resources Identifier)URI 或者统一资源定位符(Uniform Resources Locator)URL 作为沟通依据,通过 HTTP 协议提供各种网络服务。然而,这些服务器在设计之初受到当时环境的局限,例如当时的用户规模,网络带宽,产品特点等局限并且各自的定位和发展都不尽相同。这也使得各个 Web 服务器有着各自鲜明的特点。Apache 的发展时期很长,而且是毫无争议的世界第一大服务器。它有着很多优点:稳定、开源、跨平台等等。它出现的时间太长了,它兴起的年代,互联网产业远远比不上现在。所以它被设计为一个重量级的。它不支持高并发的服务器。在 Apache 上运行数以万计的并发访问,会导致服务器消耗大量内存。操作系统对其进行进程或线程间的切换也消耗了大量的 CPU 资源,导致 HTTP 请求的平均响应速度降低。这些都决定了 Apache 不可能成为高性能 Web 服务器,轻量级高并发服务器 Nginx 就应运而生了。俄罗斯的工程师 Igor Sysoev,他在为 Rambler Media 工作期间,使用 C 语言开发了 Nginx。Nginx 作为 Web 服务器一直为 Rambler Media 提供出色而又稳定的服务。然后呢,Igor Sysoev 将 Nginx 代码开源,并且赋予自由软件许可证。

Nginx 基本概念

1.正向代理与反向代理

代理是在服务器和客户端之间假设的一层服务器,代理将接收客户端的请求并将它转发给服务器,然后将服务端的响应转发给客户端。

正向代理

正向代理(forward)意思是一个位于客户端和原始服务器 (origin server) 之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标 (原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。正向代理是为我们服务的,即为客户端服务的,客户端可以根据正向代理访问到它本身无法访问到的服务器资源。正向代理对我们是透明的,对服务端是非透明的,即服务端并不知道自己收到的是来自代理的访问还是来自真实客户端的访问。如下图:
在这里插入图片描述

反向代理

反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。反向代理是为服务端服务的,反向代理可以帮助服务器接收来自客户端的请求,帮助服务器做请求转发,负载均衡等。反向代理对服务端是透明的,对我们是非透明的,即我们并不知道自己访问的是代理服务器,而服务器知道反向代理在为他服务。如下图:
在这里插入图片描述

2.负载均衡

如果请求数过大,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器的情况改为请求分发到多个服务器上,就是负载均衡。

Upstream 指定后端服务器地址列表,在 server 中拦截响应请求,并将请求转发到 Upstream 中配置的服务器列表。


upstream balanceServer {
    server 192.168.228.131:8080;
    server 192.168.228.131:8081;
    server 192.168.228.131:8082;
}

server { 
    server_name  www.ldx.com;# 域名或ip
    listen 80; # 监听的端⼝
    location /api { # 访问路径配置
        proxy_pass http://balanceServer;
  }
}

上面的配置只是指定了 nginx 需要转发的服务端列表,并没有指定分配策略。默认情况下采用的是轮询策略,将所有客户端请求轮询分配给服务端。这种策略是可以正常工作的,但是如果其中某一台服务器压力太大,出现延迟,会影响所有分配在这台服务器下的用户。

Nginx支持的负载均衡调度算法方式如下:

weight轮询(默认,常用):接收到的请求按照权重分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,Nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。ip_hash(常用):每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。

fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是Nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块。url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在Nginx作为静态服务器的情况下提高缓存效率。同样要注意Nginx默认不支持这种调度算法,要使用的话需要安装Nginx的hash软件包。

3.动静分离

为了加快服务器的解析速度,可以把动态页面和静态页面交给不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。

4.安装Nginx

这⾥使⽤docker安装nginx

1.搜索nginx镜像

docker search nginx

2.拉取nginx镜像

docker pull nginx

3.创建容器,设置端⼝映射、⽬录映射

# 在/root⽬录下创建nginx⽬录⽤于存储nginx数据信息
mkdir ~/nginx
cd ~/nginx
mkdir conf
cd conf

vim nginx.conf
# 在~/nginx/conf/下创建nginx.conf⽂件,粘贴下⾯内容

user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
 worker_connections 1024; }
http {
 include /etc/nginx/mime.types;
 default_type application/octet-stream;
 log_format main '$remote_addr - $remote_user [$time_local] "$request" '
 '$status $body_bytes_sent "$http_referer" '
 '"$http_user_agent" "$http_x_forwarded_for"';
 access_log /var/log/nginx/access.log main;
 sendfile on;
 #tcp_nopush on;
 keepalive_timeout 65;
 #gzip on;
 include /etc/nginx/conf.d/*.conf;
}
server {
 listen 80; # 监听的端⼝
 server_name localhost; # 域名或ip
 location / { # 访问路径配置
 root /usr/share/nginx/html;# 根⽬录
 index index.html index.htm; # 默认⾸⻚
 }
 error_page 500 502 503 504 /50x.html; # 错误⻚⾯
 location = /50x.html {
 root html;
 }
}

运行

docker run -id --name=c_nginx \
-p 80:80 \
-p 81:81 \
-p 82:82 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/conf.d:/etc/nginx/conf.d \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx

#参数说明:
#-p 80:80:将容器的 80端⼝映射到宿主机的 80 端⼝。
#-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:将主机当前⽬录下的/conf/nginx.conf 挂载到容器的 :/etc/nginx/nginx.conf。配置⽬录
#-v $PWD/logs:/var/log/nginx:将主机当前⽬录下的 logs ⽬录挂载到容器的/var/log/nginx。⽇志⽬录

Nginx常用命令

# 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务
nginx -s stop
# 平稳关闭Nginx,保存相关信息,有安排的结束web服务
nginx -s quit
# 因改变了Nginx相关配置,需要重新加载配置而重载
nginx -s reload
# 重新打开日志文件
nginx -s reopen
# 为 Nginx 指定一个配置文件,来代替缺省的
nginx -c filename
# 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件
nginx -t
#  显示 nginx 的版本
nginx -v
# 显示 nginx 的版本,编译器版本和配置参数
nginx -V
# 格式换显示 nginx 配置参数
2>&1 nginx -V | xargs -n1
2>&1 nginx -V | xargs -n1 | grep lua

为什么选择Nginx

Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。在Nginx网站上,其功能包括:

  1. HTTP和HTTPS(TLS / SSL / SNI)

  2. 超快速的Web服务器用于静态内容

  3. FastCGI,WSGI,SCGI用于动态内容

  4. 具有负载平衡和缓存功能的加速Web代理

  5. 不间断实时二进制升级和配置

  6. 压缩和内容过滤器

  7. 虚拟主机

  8. FLV和MP4的媒体流

  9. 带宽和连接策略

  10. 全面的访问控制

  11. 自定义日志

  12. 嵌入式脚本

  13. 带有TLS的SMTP / IMAP / POP3的邮件代理

  14. 逻辑,灵活,可扩展的配置

  15. 在Linux,FreeBSD,Mac OS X,Solaris和Windows上运行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值