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

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)官网下载安装包并解压

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

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

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

在这里插入图片描述

[root@server1 nginx-1.17.8]# make && make install

在这里插入图片描述
(3)启动nginx

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

在这里插入图片描述(4) 网页测试

在这里插入图片描述
(5)修改html目录下的访问资源 ,访问不同资源

[root@server1 ~]# 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
[root@server1 ~]# mv Screenshot\ from\ 2020-02-25\ 17-46-20.png a.png
[root@server1 ~]# mv a.png /usr/local/nginx/html/
[root@server1 ~]# cd /usr/local/nginx/html/
[root@server1 html]# lw
-bash: lw: command not found
[root@server1 html]# ls
50x.html  a.png  index.html
[root@server1 html]# 

在这里插入图片描述

发布了176 篇原创文章 · 获赞 1 · 访问量 3569

猜你喜欢

转载自blog.csdn.net/yrx420909/article/details/104501285