欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

nginx基础以及搭建一个简单的静态web服务器

程序员文章站 2022-07-06 20:21:09
...

1.什么是nginx

Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
Nginx是一款轻量级的Web服务器/反向代理服务器以及电子邮件代理服务器,并在一个BSD-like协议下发行。由俄罗斯的程序设计师lgor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。
Nginx相较于Apache\lighttpd具有占有内存少,稳定性高等优势,并且依靠并发能力强,丰富的模块库以及友好灵活的配置而闻名。在Linux操作系统下,nginx使用epoll事件模型,得益于此,nginx在Linux操作系统下效率相当高。同时Nginx在OpenBSD或FreeBSD操作系统上采用类似于Epoll的高效事件模型kqueue.

2. Nginx VS Apache

Apache和Nginx最核心的区别在于 apache 是同步多进程模型,一个连接对应一个进程;而 nginx 是异步的,多个连接(万级别)可以对应一个进程。

Apache

● apache 的 rewrite 比 nginx 强大,在 rewrite 频繁的情况下,用 apache

● apache 发展到现在,模块超多,基本想到的都可以找到

● apache 更为成熟,少 bug ,nginx 的 bug 相对较多

● apache 超稳定

● apache 对 PHP 支持比较简单,nginx 需要配合其他后端用

● apache 在处理动态请求有优势,nginx 在这方面是鸡肋,一般动态请求要 apache 去做,nginx 适合静态和反向。

● apache 仍然是目前的主流,拥有丰富的特性,成熟的技术和开发社区

Nginx

● 轻量级,采用 C 进行编写,同样的 web 服务,会占用更少的内存及资源

● 抗并发,nginx 以 epoll and kqueue 作为开发模型,处理请求是异步非阻塞的,负载能力比 apache 高很多,而 apache 则是阻塞型的。在高并发下 nginx 能保持低资源低消耗高性能 ,而 apache 在 PHP 处理慢或者前端压力很大的情况下,很容易出现进程数飙升,从而拒绝服务的现象。

● nginx 处理静态文件好,静态处理性能比 apache 高三倍以上

● nginx 的设计高度模块化,编写模块相对简单

● nginx 配置简洁,正则配置让很多事情变得简单,而且改完配置能使用 -t 测试配置有没有问题,apache 配置复杂 ,重启的时候发现配置出错了,会很崩溃

● nginx 作为负载均衡服务器,支持 7 层负载均衡

● nginx 本身就是一个反向代理服务器,而且可以作为非常优秀的邮件代理服务器

● 启动特别容易, 并且几乎可以做到 7*24 不间断运行,即使运行数个月也不需要重新启动,还能够不间断服务的情况下进行软件版本的升级

● 社区活跃,各种高性能模块出品迅速

总结

一般来说,需要性能的 web 服务,用 nginx 。如果不需要性能只求稳定,更考虑 apache 。更为通用的方案是,前端 nginx 抗并发,后端 apache 集群,配合起来会更好。

3.Nginx优势

1、作为Web服务器,Nginx处理静态文件、索引文件,自动索引的效率非常高

2、作为代理服务器,Nginx可以实现无缓存的反向代理加速,提高网站运行速度

3、作为负载均衡服务器,Nginx既可以在内部直接支持Rails和PHP,也可以支持HTTP代理服务器对外进行服务,同时还支持简单的容错和利用算法进行负载均衡

4、在性能方面,Nginx是专门为性能优化而开发的,实现上非常注重效率。它采用内核Poll模型,可以支持更多的并发连接,最大可以支持对5万个并发连接数的响应,而且只占用很低的内存资源

5、在稳定性方面,Nginx采取了分阶段资源分配技术,使得CPU与内存的占用率非常低。Nginx官方表示,Nginx保持1万个没有活动的连接,而这些连接只占用2.5MB内存,因此,类似DOS这样的攻击对Nginx来说基本上是没有任何作用的

6、在高可用性方面,Nginx支持热部署,启动速度特别迅速,因此可以在不间断服务的情况下,对软件版本或者配置进行升级,即使运行数月也无需重新启动,几乎可以做到7x24小时不间断地运行
 Nginx具有很高的稳定性;支持热部署;代码质量非常高,代码很规范,手法成熟,模块扩展也很容易;采用了一些os提供的最新特性如对sendfile(Linux2.2+),accept-filter(FreeBSD4.1+),TCP_DEFER_ACCEPT(Linux 2.4+)的支持,从而大大提高了性能。

4.Nginx多进程模式

nginx在启动后,会有一个master进程和多个worker进程。master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。而基本的网络事件,则是放在worker进程中来处理了。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致。

5.Nginx的事件处理机制

nginx采用异步非阻塞事件处理机制。

同步和异步、阻塞与非阻塞:
1、同步与异步:主要是针对应用程序与内核的交互方式而言的:
同步:进程发出数据后,等内核返回响应以后才继续下一个请求,即如果内核一直不返回数据,那么进程就一直等,直到天荒地老,死机error。
异步:进程发出数据后,不等内核返回响应,接着处理下一个请求,Nginx是异步的

2.阻塞与非阻塞
可以理解为内核与IO设备的交互方式,当内核收到进程请求IO数据时候的处理方式
也可以简单理解为内核需要做一件事能不能立即得到返回应答,如果不能立即获得返回,需要等待,那就阻塞了,否则就可以理解为非阻塞
阻塞:IO调用不能立即返回结果,即一个进程发起的IO请求不能得到立即满足时,进程就要一直等到内核响应,内核要把数据从IO设备复制到内核空间,再返回给进程,这是阻塞。
非阻塞:IO调用可以立即返回结果,一个进程发起的IO进程不能立即满足时,不在等待,而是一遍一遍的轮训查看IO是否完成

6.Nginx源码编译

(1)官网下载安装包并解压

[aaa@qq.com ~]# ls
nginx-1.17.8.tar.gz
[aaa@qq.com ~]# ls
gd-devel-2.0.35-26.el7.x86_64.rpm  nginx-1.17.8.tar.gz
[aaa@qq.com ~]# tar zxf nginx-1.17.8.tar.gz 
[aaa@qq.com ~]# ls
gd-devel-2.0.35-26.el7.x86_64.rpm  nginx-1.17.8  nginx-1.17.8.tar.gz
[aaa@qq.com ~]# 

(2)安装依赖包,编译nginx

[aaa@qq.com ~]# yum install gcc openssl-devel pcre-devel
[aaa@qq.com ~]# ls
gd-devel-2.0.35-26.el7.x86_64.rpm  nginx-1.17.8  nginx-1.17.8.tar.gz
[aaa@qq.com ~]# yum install gd-devel-2.0.35-26.el7.x86_64.rpm 
[aaa@qq.com ~]# cd nginx-1.17.8
[aaa@qq.com nginx-1.17.8]# ls
auto     CHANGES.ru  configure  html     man     src
CHANGES  conf        contrib    LICENSE  README
[aaa@qq.com nginx-1.17.8]# ./configure --prefix=/usr/local/nginx --with-http_realip_module --with-http_image_filter_module=dynamic --with-http_ssl_module

nginx基础以及搭建一个简单的静态web服务器

[aaa@qq.com nginx-1.17.8]# make && make install

nginx基础以及搭建一个简单的静态web服务器
(3)启动nginx

[aaa@qq.com nginx-1.17.8]# cd /usr/local/nginx/
[aaa@qq.com nginx]# ls
conf  html  logs  modules  sbin
[aaa@qq.com nginx]# cd sbin/
[aaa@qq.com sbin]# ls
nginx
[aaa@qq.com sbin]# ./nginx 
[aaa@qq.com sbin]# netstat -antlupe |grep nginx 
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      0          31040      4896/nginx: master  
[aaa@qq.com sbin]# 

nginx基础以及搭建一个简单的静态web服务器(4) 网页测试

nginx基础以及搭建一个简单的静态web服务器
(5)修改html目录下的访问资源 ,访问不同资源

[aaa@qq.com ~]# ls
gd-devel-2.0.35-26.el7.x86_64.rpm  nginx-1.17.8.tar.gz
nginx-1.17.8                       Screenshot from 2020-02-25 17-46-20.png
[aaa@qq.com ~]# mv Screenshot\ from\ 2020-02-25\ 17-46-20.png a.png
[aaa@qq.com ~]# mv a.png /usr/local/nginx/html/
[aaa@qq.com ~]# cd /usr/local/nginx/html/
[aaa@qq.com html]# lw
-bash: lw: command not found
[aaa@qq.com html]# ls
50x.html  a.png  index.html
[aaa@qq.com html]# 

nginx基础以及搭建一个简单的静态web服务器

相关标签: linux企业实战