您现在的位置是:首页 >学无止境 >Nginx - ​一个高性能、灵活可靠的开源Web服务器网站首页学无止境

Nginx - ​一个高性能、灵活可靠的开源Web服务器

楼下安同学 2024-08-07 18:01:03
简介Nginx - ​一个高性能、灵活可靠的开源Web服务器

在这里插入图片描述

Nginx是什么?

  Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。2011年6月1日,nginx 1.0.4发布。

  特点是占有内存少并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。

  Nginx安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。

  Nginx代码完全用C语言从头写成。官方数据测试表明能够支持高达 50,000 个并发连接数的响应。

为什么用Nginx

  项目刚上线时,用户量和并发量都很小。此时,一台应用服务器足够处理用户请求,服务器直接返回内容给用户。然而,随着用户数量的增加和并发量的上升,单台服务器无法满足需求。为了解决这个问题,采取了横向扩展的方式,增加了多台服务器。现在,多个项目运行在不同的服务器上。为了让用户访问这些服务器,引入了一个代理服务器。代理服务器的作用是接收用户的请求,并根据一定的规则将请求转发到不同的服务器节点上。这个过程对用户来说是无感知的,用户并不知道最终返回结果的服务器是哪一台。同时,希望代理服务器能够根据服务器的性能提供不同的权重选择,以保证最佳的用户体验。

Nginx的作用

  • HTTP代理和反向代理:Nginx常被用作Web服务器,其中最常见的功能是充当HTTP代理或反向代理。作为代理服务器,它可以接收客户端的请求并将其转发给后端服务器,然后将响应返回给客户端。这种方式可以隐藏后端服务器的真实IP地址,提供负载均衡缓存安全性等优势。
  • 负载均衡:Nginx提供负载均衡功能,可以将请求分发给多个后端服务器,以实现更好的性能和可靠性。它支持多种负载均衡策略,包括轮询加权轮询IP哈希等。
  • 动静分离:在动态网站中,有些资源是静态的(如CSS、HTML、图片等),不需要经过后端处理,而有些资源是动态生成的,需要后端服务器处理。Nginx可以根据规则将动态资源和静态资源分离,将静态资源进行缓存,以提高响应速度和减轻后端服务器的负载。
    在这里插入图片描述

4、Nginx服务搭建和使用

Nginx官网:https://nginx.org/

本次使用华为云服务器(ubuntu22) + docker搭建nginx服务

拉取nginx镜像

docker pull nginx:latest

启动nginx容器并且复制默认配置文件到宿主机

docker run -d <image-id>

# 将容器中的nginx配置文件复制到 /docker/nginx下
# 包括默认配置文件、html、conf.d
docker cp nginx:/etc/nginx/nginx.conf /docker/nginx/conf/nginx.conf
docker cp nginx:/etc/nginx/conf.d /docker/nginx/conf/conf.d
docker cp nginx:/usr/share/nginx/html /docker/nginx/html/

# 接下来删除刚才运行的容器

挂载nginx配置、html、日志文件的方式重新启动容器

# 默认使用80端口
# 指定时区为Asia/Shanghai,配置打印日志的时区
# 挂载nginx的日志,方便查看
docker run -d -p 80:80 --name nginx 
-v /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf 
-v /docker/nginx/conf/conf.d:/etc/nginx/conf.d 
-v /docker/nginx/log:/var/log/nginx 
-v /docker/nginx/html:/usr/share/nginx/html 
-v /root/www:/www 
-e TZ=Asia/Shanghai 
container-id

容器启动成功实例

在这里插入图片描述

测试服务启动状态(成功启动)

在这里插入图片描述

5、nginx配置结构

  • 全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
  • events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
  • http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
  • server块:配置虚拟主机的相关参数,一个http中可以有多个server。
  • location块:配置请求的路由,以及各种页面的处理情况
...  #全局块

events {	#events块
		...	 
}

http 		#http块
{
  	upstream servername{  #负载均衡
       ...
     }
  
    ...
    server #server块
    { 
        ...
        location	#location块
        {
            ...
        }
     }
}

6、nginx配置实战

6.1 使用nginx代理静态文件

代理静态文件的nginx配置

# 代理静态文件的配置我们放到conf.d目录下,.conf后缀
# 我们启动服务的时候将宿主机的/root/www目录映射到容器的/www目录下
# 希望通过访问 http://host:port/static/filename 获取静态文件

server {
    listen 80;
    server_name 127.0.0.1;

    location /static {
        alias /www/;
        index index.html index.htm;
        try_files $uri $uri/ =404;
    }
}

代理效果展示

在宿主机的/root/www目录下放一个test.jpg文件以测试效果

在这里插入图片描述

6.2 代理web服务

应用正以5001端口正常启动

在这里插入图片描述

代理web服务5001端口的nginx配置

# 这里没有使用域名   flask项目运行在5001端口
server {
    listen       80 default_server;
    server_name  <私有IP>;

    access_log   /var/log/nginx/myflask.access.log combined;
    error_log    /var/log/nginx/myflask.error.log notice;

    #error_page   404   /404.html;
    #location = /404.html {
    #    root    /usr/share/nginx/html
    #}

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location / {
        proxy_pass http://<私有IP>:5001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # enable server push for resources
        http2_push_preload on;
    }
}

代理效果展示

在这里插入图片描述

7、总结

  Nginx 是一个功能强大、高性能的服务器软件,适用于各种规模的网络应用和服务,可以提供高效、可靠的服务支持。具体用法和配置我们可以参考官网的文档和资源,利用其强大的功能构建高性能、可靠的网络应用和服务。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。