一 Web服务器介绍
现在市面上有很多Web服务器。 主要有Apache,微软的IIS,Nignx,Tomcat,Lighttpd等. 这些服务器基本都可以做静态资源映射和反向代理. Apache更是Web服务器领域以前的王者.
| Web服务器 | 开源 | 优点 | 缺点 |
|---|---|---|---|
| Apache | 是 | 基于进程,很稳定 | 多处理器上性能一般 |
| IIS(微软) | 否 | 功能多 | 付费 |
| Tomcat(Sum) | 是 | 调试JSP方便 | 处理HTML一般 |
| Nginx(俄罗斯->F5) | 是 | 基于线程,并发强 | xx |
Apache
Apache,Tomcat是写Java的人用的多点。 Apache也是一个开源的Web服务器,优点是稳定性非常高 Apache是Web服务器领域以前的王者.
2012年的时候Netcraft调查了全世界上亿个站点,发现Apache的市占率是54%。 但是这几年,Apache的市占率是一路下降。
优点
开放源代码、跨平台应用、支持各种Web编程语言、模块化设计、运行稳定、安全性良好
缺点
抗压不行,在高并发的情况下比较慢,变得越来越重,被普遍认为是重量级的Web服务器
分析
Apache的架构是基于进程的,而不是线程, 这正是它的优点: 非常稳定,也是它的缺点,因为进程要比线程消耗更多的系统开支,这就导致Apache在多处理环境里性能有所下降
IIS
IIS是微软公司开发的,主要使用者是写Asp.net的人使用 一看开发公司就知道这个Web服务器会对Windows系统比较友好。
IIS除了Web服务器常见的功能外,还自己集成了FTP Server,SMTP Server。
而且因为身后是微软,所以IIS得功能更新其实一直比较给力, 不断在更新各种好用的功能,可惜,它是付费的,导致它市占率一直不是很高。
Tomcat
Tomcat的架构是由sum贵公司的软件架构师开发的,后来变成了开源项目,被Sum公司捐献给了Apache基金会 Tomcat对JSP的支持比较友好, 是开发和调试JSP的首选。 缺点 它的功能其实不是很多,不适合大型复杂项目,
Nginx(推荐)
Nginx的话前端使用的人更多。前端的Web Server基本上要么是Nginx,要么就是nodejs。 具体的介绍在第二部分
哪个Web服务器使用最广泛
Apache是Web服务器领域以前的王者.
2012年的时候Netcraft调查了全世界上亿个站点,发现Apache的市占率是54%,当时的Nginx一只在提升,但是每年也就提升各1%左右的市占率。
那么现在呢?
2023年2月数据,Netcraft调查涵盖了全世界1,127,630,293多个网站。
图片来自Netcraft
可以看到Nginx现在已经是市占率第一的Web 服务器了。
二 Nginx介绍
Nginx的历史
我还记得十几年前刚入行, 我用的web服务器是tomcat,配置起来就挺费劲的,对于前端来说并不友好。
后来,2004年, 俄罗斯的lgor Sysoev为俄罗斯第二大的网站rambler开发一个web server,就有了ningx, 并且把它开源了, 后来Nginx被卖给了F5.
因为开源,nignx有了非常及时的更新和完善的生态。
Nginx介绍
nginx是一个代理web服务器,主要有三个功能
- 静态资源代理
- 反向代理
- 负载均衡
nginx的使用非常方便, 所以也非常广泛。 前端基本上就是用这个当web服务器。
后来有了nginx,这才觉得舒爽。
nignx优点
开源,不用担心付费
性能高, 因为它是基于线程的,所以并发很高,高达5000个并发,对于一般的网站来说够用了
高可拓展性 正是因为它的高可拓展性,你可以基于它自己给它造模块,所以才有很多Nginx的定制版,有很多非常好用的功能
体积小,它本身就很小,运行起来也才占用1M左右内存。 负载均衡 Nginx的负载均衡有7种策略
以上提到的几个功能其实只是它常用了,它还支持拓展模块,比如在网页上查看你项目nignx里的数据。
Nginx的版本
- Nginx纯开源版本
- 商业版本,这个版本功能要多很多很多
- openRestry,也是免费的,多了很多好用的模块,而且汉化非常好
- Tengine,淘宝网发起的开源版本
三 安装Nginx
nignx支持的系统非常多。 比如linux系列, mac, windows等。 以Ubuntu为例,安装代码:
sudo apt update
sudo apt install nginx
sudo systemctl status nginx
安装完之后可以根据自己的需要修改配置文件。
你修改完nignx配置文件后,记得执行nignx -t先看下你改的是否正确。
正确的话执行
nignx -s reload
重新加载下你的nignx配置文件, 否则你刚才的修改是不会生效的
四 Nginx配置网站访问
配置文件被命名nginx.conf 并放置在目录 /usr/local/nginx/conf、 /etc/nginx或 /usr/local/etc/nginx.
不同的操作系统,Nginx的配置文件地址也不一样,
可以这样来找当前Nginx的配置文件。
登录到服务器之后执行
nginx -t
这个命令是测试你的nginx配置是否有问题,
执行这个命令会返回给你nginx文件的路径。
可以看到,配置文件在 etc/nginx/nginx.conf
打开Nginx配置文件
对linux系统的cat命令比较了解的可以用cat打开nginx配置文件。 不过我自己更习惯在ftp工具里打开, 觉得这样好编辑.
我最长用的ftp工具是FileZilla
输入刚才nginx -t得到的nginx路径:/etc/nginx,并没有看到关于网站的具体配置。
别奇怪 这是因为nginx的配置默认思路是认为一个服务器可能会有多个网站。
所以它支持导入多个网站的nginx配置,然后这里只是一个nginx网站配置汇总 看这里, include了两个文件夹的文件
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
nginx配置网站主要有两个目录
sites-available
里面存放你已经配置好的站点配置文件
sites-enabled
开启的站点配置文件,存放的只是一个sites-available的快捷链接。
avaible和enabled的区别
区别就是available只是你写过这个配置,但是不一定激活它,要想激活它的话就需要再sites-enabled加一个链接。
available就像是有一个清单说明你家有哪些灯,但是不一定你现在要用到它们,这只是一个申明不是一个使用。
当你需要打开这些灯,就需要在enabled里设置加一个快捷链接。
网站具体配置
server {
listen 80;
server_name you.domain.com; # 你的域名
location / {
root /var/www/dirName/dist;
index index.html index.htm;
}
}
五 正向代理和反向代理
正向代理
正向代理指的是客户端需要配置的代理。 最常用的正向代理是VPN,fan墙类。
反向代理
反向代理是一种服务,它接收到一种请求,然后把它发送到1台或者多台服务器上。
反向代理的话比如你访问www.taobao.com 它后面其实可能有上千台服务器,但是你只要记住这一个域名就好,它会自己把请求分配到不同的服务器去 设置
// 一般是在server里设置
location /api/ {
proxy_pass http://127.0.0.1:3000/;
}
正向代理和反向代理的区别
正向代理一般只在客户端配置。
而反向代理则相反,客户端无感,只在服务端配置
六 Gzip
Gzip的设置非常简单,但是对性能的影响却挺明显的 几秒钟的时间就能开启,却能让资源体积减少10%-40%左右 加载速度也有中等明显的提升
综合打开页面的速度和压缩前后大小对比图。
图片是2016年的测试数据。
黑色字体是开启Gzip前。绿色字体是开启Gzip后的
PS:这个时候项目还是MPA多页应用,有很多优化没做,所以速度整体比较慢
Nginx默认就是加载了Gzip模块的, Nginx里gzip模块是叫ngx_http_gzip_module
你可以用
gzip -v查看在是否已开启这个模块
设置也很简单
gzip on
缺点
Gzip的压缩有的时候也会导致一些莫名其妙的问题。 比如16年1月,闪银的项目为了提高性能, 准备上Gzip。 结果在h5页面好好的,但是发现在Hybird项目里ios没问题,但是安卓包里开始报错了。 还好,开发人员处理了下也就解决了,不知道是什么奇怪Bug。 这是当时我们对页面开启Gzip前后的文件大小对比 这还是在页面资源文件本身已经进行混淆压缩了的前提。
七 转发
rewrite ^(.*)$ https://newDomain.com$1 permanent; # 把http的域名请求转成https
负载均衡
比如一个域名后有3台服务器,a是做转发的。然后会把请求分给b,c,d 各服务器配置不一样。 假设b是80G内存,c服务器是40G内存,d服务器是8G内存。
那么nginx的另外一个功能就是让80G内存的服务器多给它分配一些请求,8G内存的请求少分配一些。
这就是负载均衡。
八 Nginx的高阶功能
图像缩放
很少有人知道, Nginx自带的image模块就能够实现实时对图片进行缩放,裁剪,催化处理。
九 Tengine
这个是淘宝开源的基于Nginx的Web服务器,它增加了很多的优化。 比如可以在里面设置请求多个前端资源,但是实际上返回的是一个合并后的资源。