前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >nginx 应用指南

nginx 应用指南

作者头像
友儿
发布于 2023-03-11 09:38:13
发布于 2023-03-11 09:38:13
34900
代码可运行
举报
文章被收录于专栏:友儿友儿
运行总次数:0
代码可运行

Nginx基本简述

  • Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器(代理中间件),是一个开源且高性能、可靠的HTTP中间件、代理服务。

Nginx应⽤场景

  • 静态处理
  • 反向代理
  • 负载均衡
  • 资源缓存
  • 安全防护
  • 访问限制
  • 访问认证

Nginx优秀特性

采用I/O多路复用epoll模型

  • IO 多路复用的场景是我们要设计一个高性能的网络服务器,这个网络服务器它可以供多个客户端进行连接并且可以处理这些客户端传上来的请求。当然对于一般来说,应对并发可以写一个多线程的程序,每个传上来的请求都是一个线程。但是多线程的方式存在一个很大的弊端,就是它需要cpu上下文切换,我们知道cpu上下文切换需要处理一些操作句柄,这些过程是非常繁琐的,在上下文切换开销在线程不多、切换不频繁的应用场景下问题不大,但是尤其是客户端的连接非常多的时候,这个cpu上下文切换带来的代价非常的高,因而多线程并不是最好的解决方案。
  • 多线程的方案既然被排除了,那我们把目光转回到单线程,如何用单线程的方案处理大量的客户端的并发连接呢?首先我们先抛出一个疑问,多个客户端同时连接网络服务器,而单线程一次只能处理一个客户端连接,其他连接是否会被抛弃呢?当然肯定是不会被抛弃的,原因是接受处理客户端的连接的并不是cpu,因为我们有专门专注处理IO的DNA控制器。
  • I/O多路复用以及关于DMA介绍 请移步 《线程/协程/异步的编程模型解读》 了解

线程/协程/异步的编程模型解读

线程线程是CPU调度的最小单位CPU 执行过程图比如我们有一个单核CPU,目前有3个想要执行的线程,这3个线程在执...

  • IO多路复⽤的实现⽅式有 select、poll、Epool模型 请移步 《什么是select/poll/epoll模型?》 了解

什么是select/poll/epoll模型?

模型图单线程处理我们自己会怎样写单线程处理多个客户端连接呢?我们知道在linux里面中每个网络连接在内核中都是文件...

轻量级

  • 功能模块化
  • 代码模块化

CPU亲和(affinity)

  • 将CPU核⼼和Nginx⼯作进程绑定⽅式,把每个worker进程固定在⼀个cpu上执⾏,减少切换cpu 的 cache miss ,获得更好的性能。

sendfile

  • 传统⽂件传输, 在实现上其实是⽐较复杂的, 其具体流程细节如下:
代码语言:txt
AI代码解释
复制
- 调⽤read函数,⽂件数据被复制到内核缓冲
- read函数返回,⽂件数据从内核缓冲区复制到⽤户缓冲区
- write函数调⽤,将⽂件数据从⽤户缓冲区复制到内核与socket相关的缓冲区。
- 数据从socket缓冲区复制到相关协议引擎。
传统⽂件传输数据实际上是经过了四次复制操作:
  • 硬盘—>内核buf—>⽤户buf—>socket缓冲区(内核)—>协议引擎
也就是说传统的⽂件传输需要经过多次上下⽂的切换才能完成拷⻉或读取, 效率不⾼。
  • sendfile⽂件传输是在内核中操作完成的, 函数直接在两个⽂件描述符之间传递数据, 从⽽避免了 内核缓冲区数据和⽤户缓冲区数据之间的拷⻉, 操作效率很⾼, 被称之为零拷⻉。
代码语言:txt
AI代码解释
复制
- 系统调⽤sendfile函数通过 DMA 把硬盘数据拷⻉到 kernel buffer,
- 数据被 kernel 直接拷⻉到另外⼀个与 socket 相关的 kernel buffer。
- DMA把数据从kernel buffer直接拷⻉给协议栈。
这⾥没有⽤户空间和内核空间之间的切换,在内核中直接完成了从⼀个buffer到另⼀个buffer的拷⻉。

Nginx快速安装

  • 版本
代码语言:txt
AI代码解释
复制
- Mainline version 开发版
- Stable version 稳定版
- Legacy version 历史版本安装请移步到
代码语言:txt
AI代码解释
复制
- 我这里提供 [Ubuntu安装最新版nginx点击这里](https://github.com/niuzheng131400/ubuntu-install-the-latest-stable-version-of-nginx) 

Nginx安装⽬录

路径

类型

作⽤

/etc/nginx/etc/nginx/nginx.conf/etc/nginx/conf.d/etc/nginx/conf.d/default.conf

配置⽂件

Nginx主配置⽂件

/etc/nginx/fastcgi_params/etc/nginx/scgi_params/etc/nginx/uwsgi_params

配置⽂件

Cgi、Fastcgi、Uwcgi配置⽂件

/etc/nginx/win-utf/etc/nginx/koi-utf/etc/nginx/koi-win

配置⽂件

Nginx编码转换映射⽂件

/etc/nginx/mime.types

配置⽂件

http协议的Content-Type与扩展名

/usr/lib/systemd/system/nginx.service

配置⽂件

配置系统守护进程管理器

/etc/logrotate.d/nginx

配置⽂件

Nginx⽇志轮询,⽇志切割

/usr/sbin/nginx/usr/sbin/nginx-debug

命令

Nginx终端管理命令

/etc/nginx/modules/usr/lib64/nginx/usr/lib64/nginx/modules

⽬录

Nginx模块⽬录

/usr/share/nginx/usr/share/nginx/html/usr/share/nginx/html/50x.html/usr/share/nginx/html/index.html

⽬录

Nginx默认站点⽬录

/usr/share/doc/nginx-1.12.2/usr/share/man/man8/nginx.8.gz

⽬录

Nginx的帮助⼿册

/var/cache/nginx

⽬录

Nginx的缓存⽬录

/var/log/nginx

⽬录

Nginx的⽇志⽬录

Nginx编译参数

编译选项

作⽤

--prefix=/etc/nginx--sbin-path=/usr/sbin/nginx--modules-path=/usr/lib64/nginx/modules--conf-path=/etc/nginx/nginx.conf--error-log-path=/var/log/nginx/error.log--http-log-path=/var/log/nginx/access.log--pid-path=/var/run/nginx.pid--lock-path=/var/run/nginx.lock

程序安装⽬录和路径

--http-client-body-temp-path=/var/cache/nginx/client_tem--http-proxy-temp-path=/var/cache/nginx/proxy_temp--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp--http-scgi-temp-path=/var/cache/nginx/scgi_temp

临时缓存⽂件

--user=nginx--group=nginx

设定Nginx进程启动⽤户和组(安全)

--with-cc-opt

设置额外的参数将被添加到CFLAGS变量

--with-ld-opt

设置附加的参数, 链接系统库

Nginx常⽤模块

Nginx编译选项

模块作⽤

ngx_http_core_module

包含⼀些核⼼的http参数配置,对应Nginx的配置区块部分

ngx_http_access_module

访问控制模块,⽤来控制⽹站⽤户对Nginx的访问

ngx_http_gzip_module

压缩模块,对Nginx返回的数据压缩,属于性能优化模块

ngx_http_fastcgi_module

fastci模块,和动态应⽤相关的模块,例如PHP

ngx_http_proxy_module

proxy代理模块

ngx_http_upstream_module

负载均衡模块,可以实现⽹站的负载均衡功能及节点的健康检查。

ngx_http_rewrite_module

URL地址重写模块

ngx_http_limit_conn_module

限制⽤户并发连接数及请求数模块

ngx_http_limit_req_module

限制Nginx request processing rate根据定义的keyNginx常⽤模块

ngx_http_log_module

访问⽇志模块,以指定的格式记录Nginx客户访问⽇志等信息

ngx_http_auth_basic_module

Web认证模块,设置Web⽤户通过账号密码访问Nginx

nginx_http_ssl_module

ssl模块,⽤于加密的http连接,如https

Nginx内置变量

http核⼼模块的内置变量

http请求变量

Nginx内置变量

⾃定义变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$uri:    当前请求的uri,不带参数
$request_uri:    请求的uri,带完整参数
$host:    http请求报⽂中host⾸部,如果没有则以处理此请求的虚拟主机的主机名代替
$hostname:    nginx服务运⾏在主机的主机名
$remote_addr:    客户端IP
$remote_port:    客户端端⼝
$remote_user:    使⽤⽤户认证时客户端⽤户输⼊的⽤户名
$request_filename:    ⽤户请求中的URI经过本地root或alias转换后映射的本地⽂件路径
$request_method:    请求⽅法,    GET    POST    PUT
$server_addr:    服务器地址
$server_name:    服务器名称
$server_port:    服务器端⼝
$server_protocol:    服务器向客户端发送响应时的协议,    如http/1.1    http/1.0
$scheme:在请求中使⽤scheme,    如http://xxx.com中的http
$http_HEADER:    匹配请求报⽂中指定的HEADER
$http_host:    匹配请求报⽂中的host⾸部
$document_root:    当前请求映射到的root配置
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
nginx优化 突破十万并发
文章转载于:http://9388751.blog.51cto.com/9378751/1676821
用户1214487
2018/07/31
3.2K0
nginx优化 突破十万并发
Nginx多方面调优策略
Nginx作为web server热门项目,有着高性能、简单配置以及跨平台,越来越多的企业选择使用它,我们这篇博客来说一下如何优化Nginx
憧憬博客
2020/07/21
1.4K0
☀️全网唯一万字长文讲解Nginx安装运营维护☀️《❤️记得收藏❤️》
Nginx 是一款面向性能设计的 HTTP 服务器,能反向代理 HTTP,HTTPS 和邮件相关(SMTP,POP3,IMAP)的协议链接。并且提供了负载均衡以及 HTTP 缓存。它的设计充分使用异步事件模型,削减上下文调度的开销,提高服务器并发能力。采用了模块化设计,提供了丰富模块的第三方模块。
苏州程序大白
2021/08/23
1.9K0
☀️全网唯一万字长文讲解Nginx安装运营维护☀️《❤️记得收藏❤️》
Nginx安装、实现反向代理及深度优化
一、Nginx的安装 关于Nginx的基本概念,在之前的博文中:https://blog.51cto.com/14227204/2464167 有详细的介绍,这篇博文就直接从安装开始谈起。
小手冰凉
2020/02/11
3K0
Nginx安装、实现反向代理及深度优化
nginx优化指南
  nginx是一款高性能的开源Web服务器和反向代理服务器。它由俄罗斯的工程师Igor Sysoev开发,并于2004年首次公开发布。Nginx的设计目标是提供高性能、稳定性和低资源消耗的解决方案,以应对大流量的网站和应用程序。
码农心语
2024/04/09
1.1K0
nginx优化指南
Nginx安装配置防盗链及深度优化
一、编译安装前的优化 编译安装前的优化主要是用来修改程序名等等,通过更改源码以便隐藏软件名称和版本号。
小手冰凉
2020/01/14
9560
Nginx安装配置防盗链及深度优化
优化Nginx及防盗链
Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器.Nginx是由俄罗斯人 Igor Sysoev为俄罗斯访问量第二的 Rambler.ru站点开发.
习惯说一说
2019/07/11
6050
Nginx安装及配置(二)
帮助文档:http://nginx.org/en/docs/ngx_core_module.html
咻一咻
2020/05/29
4950
Nginx软件优化
1.1 Nginx优化分类 安全优化(提升网站安全性配置) 性能优化(提升用户访问网站效率) 1.2 Nginx安全优化 1.2.1 隐藏nginx版本信息优化 官方配置参数说明:http://nginx.org/en/docs/http/ngx_http_core_module.html#server_tokens 官方参数: Syntax: server_tokens on | off | build | string; Default: server_tokens on; Context: http
惨绿少年
2018/03/30
1.4K0
2.Nginx进阶学习之最佳配置实践指南
描述:在企业线上生产环境中推荐进行Nginx编译安装,可以按照业务侧重点进行相应 Nginx 编译参数配置,所以编译参数不是功能加的越多越好,应该尽可能少编译模块不用的最好不要加入,本小结将以最新的Nginx版本以及依赖版本进行编译演示。
全栈工程师修炼指南
2022/09/29
2K0
2.Nginx进阶学习之最佳配置实践指南
Nginx基本配置介绍(待完善)
Nginx配置⽂件 Nginx主配置⽂件 /etc/nginx/nginx.conf 是⼀个纯⽂本类型的⽂件,整个配置⽂件是以区块的 形式组织的。⼀般,每个区块以⼀对⼤括号 {} 来表示开始与结束。 Main位于nginx.conf配置⽂件的最⾼层 Main层下可以有Event、HTTP层 HTTP层下⾯有允许有多个Server层, ⽤于对不同的⽹站做不同的配置 Server层也允许有多个Location, ⽤于对不同的路径进⾏不同模块的配置 nginx默认配置语法 user nginx;
友儿
2023/03/13
9660
史上最简单的 Nginx 教程,没有之一!
原文链接:https://juejin.im/post/5d81906c518825300
业余草
2019/09/25
3.7K0
史上最简单的 Nginx 教程,没有之一!
突破10万高并发的nginx性能优化经验 原
转载:http://www.cnblogs.com/kevingrace/p/6094007.html
拓荒者
2019/03/11
2.5K0
nginx应用总结(2)--突破高并发的性能优化
在日常的运维工作中,经常会用到nginx服务,也时常会碰到nginx因高并发导致的性能瓶颈问题。今天这里简单梳理下nginx性能优化的配置(仅仅依据本人的实战经验而述,如有不妥,敬请指出~) 一、这里的优化主要是指对nginx的配置优化,一般来说nginx配置文件中对优化比较有作用的主要有以下几项: 1)nginx进程数,建议按照cpu数目来指定,一般跟cpu核数相同或为它的倍数。 worker_processes 8; 2)为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个,或者将一
洗尽了浮华
2018/01/23
1.7K0
高性能Web服务器Nginx使用指南
Nginx是一个高性能的http服务器和反向代理服务器,是一个高度模块化的web服务器,和Apache的模块化不同,Nginx的模块不支持动态编译,Nginx要加入新的第三方模块的时候,必须先下载模块,然后重新编译Nginx,而Apache只需要将新加入的模块编译成so文件,然后配置文件指定是否加载即可,无需重新编译Apache。并且Nginx的rewrite模块会使用正则表示式进行匹配,因此需要pcre软件库的支持,另外ssl加密需要openssl-devel软件库的支持,gzip压缩传输需要zlib-devel软件库的支持。编译安装Nginx之前确定这三个软件库已经安装。
星哥玩云
2022/07/14
2.2K0
高性能Web服务器Nginx使用指南
网站打开缓慢排查思路
我们经常会遇到一个问题,网站打开速度特别慢,当我们遇到此种问题时该从哪些地方去排查?
dogfei
2020/07/31
3.6K0
nginx编译安装ngx_lua模块
nginx lua模块淘宝开发的nginx第三方模块,它能将lua语言嵌入到nginx配置中,从而使用lua就极大增强了nginx的能力.
老高的技术博客
2022/12/28
6680
Nginx服务实践
注意下载页面最好选择稳定版:http://nginx.org/en/download.html
陈雷雷
2019/07/10
8490
3.Nginx模块学习使用实践指南
描述: try_files是nginx中http_core核心模块所带的指令,主要是能替代一些rewrite的指令,提高解析效率。
全栈工程师修炼指南
2022/09/29
1.2K0
3.Nginx模块学习使用实践指南
Nginx性能调优实战
Nginx运行工作进程个数一般设置CPU的核心或者核心数x2。如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo文件 grep ^processor /proc/cpuinfo | wc -l
lyb-geek
2019/09/25
1.7K0
相关推荐
nginx优化 突破十万并发
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档