Nginx学习

Nginx是异步框架的网页服务器,也可以用作反向代理、负载平衡器和HTTP缓存。

Nginx简介

nginx

Nginx是免费的开源软件,根据类BSD许可证的条款发布。一大部分Web服务器使用Nginx,通常作为负载均衡器该软件由俄罗斯程序员伊戈尔·赛索耶夫(Игорь Сысоев)开发并于2004年首次公开发布。2011年成立同名公司以提供支持服务。2019年3月11日,Nginx公司被F5网络公司以6.7亿美元收购。

  • 反向代理
  • 负载均衡
  • 动静分离

特点

  • Nginx可以部署在网络上使用FastCGI脚本、SCGI处理程序、WSGI应用服务器或Phusion Passenger模块的动态HTTP内容,并可作为软件负载均衡器。
  • Nginx使用异步事件驱动的方法来处理请求。Nginx的模块化事件驱动架构可以在高负载下提供更可预测的性能。
  • Nginx是一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势。与旧版本(≤2.2)的Apache不同,Nginx不采用每客户机一线程的设计模型,而是充分使用异步逻辑从而削减了上下文调度开销,所以并发服务能力更强。整体采用模块化设计,有丰富的模块库和第三方模块库,配置灵活。在Linux操作系统下,Nginx使用epoll事件模型,得益于此,Nginx在Linux操作系统下效率相当高。同时Nginx在OpenBSD或FreeBSD操作系统上采用类似于epoll的高效事件模型kqueue。
  • 可大量并行处理

Nginx一个明确目标就是超越Apache Web服务器的性能。Nginx提供开箱即用的静态文件,使用的内存比Apache少得多,每秒可以处理大约四倍于Apache的请求。 在低并发下Nginx的性能与Apache相当(有时候还低于),但是在高并发下Nginx能保持低资源低消耗高性能。

Nginx的优点还包括:

  • 高度模块化的设计
  • 模块编写简单
  • 配置文件简洁

这种性能提升的代价是降低了灵活性,例如能够以每个文件为基础覆盖系统范围的访问设置( Apache使用.htaccess文件来完成这个工作,而Nginx并没有内置这样的功能)。以前,向Nginx添加第三方模块需要使用静态链接的模块从源代码重新编译应用程序。在版本 1.9.11 中部分地克服了这一点,增加了动态模块加载。但是,模块仍然必须与Nginx同时编译,而不是所有的模块都与这个系统兼容——有些需要更老的静态链接过程。

相比起在Linux下的Nginx,在Windows Server下的Nginx的稳定性较差,而Apache对两者都有较好的支持。


代理

1.正向代理

一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。

  • 避免浏览限制
  • 阻止访问某些内容
  • 保护在线身份

2.反向代理

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。

  • 负载均衡:在不同服务器之间平均分配传入流量,以防止单个服务器过载。如果某台服务器完全无法运转,则其他服务器可以代为处理流量。
  • 防范攻击:配备反向代理后,网站或服务无需透露其源服务器的IP地址。
  • 全局服务器负载平衡(GSLB):一个网站可以分布在全球各地的多个服务器上,反向代理会将客户端发送到地理位置上最接近它们的服务器。这样可以减少请求和响应传播的距离,从而最大程度地减少加载时间。
  • 缓存:反向代理还可以缓存内容,从而提高速度
  • SSL加密:加密和解密每个客户端的SSL(或TLS)通信对于源服务器可能需要耗费大量计算资源,可以配置由反向代理解密所有传入请求并加密所有传出响应,腾出源服务器上的宝贵资源。

Nginx使用

1.安装

Download

2.使用

1
2
3
4
5
6
7
8
# /usr/local/nginx/sbin/nginx
cd /usr/local/nginx/sbin
./nginx #启动Nginx
./nginx -s reload #重新加载Nginx
./nginx -s stop #停止Nginx
./nginx -s quit #安全退出Nginx
./nginx -v #查看Nginx版本
ps -ef | grep nginx #查看Nginx进程

3.nginx配置服务

nginx.service

  • 配置服务文件
1
vi /lib/systemd/system/nginx.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
  • 创建Nginx服务
1
systemctl enable nginx.service 
  • 查看Nginx服务的状态
1
systemctl status nginx
  • 启动Nginx服务
1
systemctl start nginx
  • 停止Nginx服务
1
systemctl stop nginx
  • 重启Nginx服务
1
systemctl restart nginx
  • 重新加载Nginx配置
1
systemctl reload nginx
  • Nginx服务开机自启
1
2
systemctl enable nginx
systemctl disable nginx