nginx的配置

148 阅读9分钟

一 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多个网站。

截屏2023-03-29 12.29.58.png

图片来自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文件的路径。

截屏2023-03-29 10.26.12.png 可以看到,配置文件在 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

截屏2023-03-29 10.44.18.png 里面存放你已经配置好的站点配置文件

sites-enabled

开启的站点配置文件,存放的只是一个sites-available的快捷链接。

截屏2023-03-29 10.45.42.png

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%左右 加载速度也有中等明显的提升

截屏2023-03-29 21.29.55.png

综合打开页面的速度和压缩前后大小对比图。

图片是2016年的测试数据。

黑色字体是开启Gzip前。绿色字体是开启Gzip后的

PS:这个时候项目还是MPA多页应用,有很多优化没做,所以速度整体比较慢

2CB720F8-BD74-4CA6-94A8-4B38D47452E0.png Nginx默认就是加载了Gzip模块的, Nginx里gzip模块是叫ngx_http_gzip_module 你可以用gzip -v查看在是否已开启这个模块

截屏2023-03-29 22.13.16.png

设置也很简单

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服务器,它增加了很多的优化。 比如可以在里面设置请求多个前端资源,但是实际上返回的是一个合并后的资源。