nginx工作原理与配置
2021/10/26 7:14:16
本文主要是介绍nginx工作原理与配置,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
nginx工作原理与配置
文章目录
- nginx工作原理与配置
- nginx的模块与工作原理
- nginx的模块分类
- nginx的工作原理
- nginx的安装与配置
- nginx安装
- nginx配置
- nginx的配置文件详解
- nginx.conf配置详解
- 用于调试、定位问题的配置参数
nginx的模块与工作原理
nginx
由内核和模块组成。其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。
nginx的模块分类
nginx的模块从结构上分为核心模块、基础模块和第三方模块
- HTTP模块、EVENT模块和MAIL模块等属于核心模块
- HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块属于基本模块
- HTTP Upstream模块、Request Hash模块、Notice模块和HTTP Access Key模块属于第三方模块
用户根据自己的需要开发的模块都属于第三方模块。正是有了如此多模块的支撑,nginx的功能才会如此强大
nginx模块从功能上分为三类,分别是:
- Handlers(处理器模块)。此类模块直接处理请求,并进行输出内容和修改headers信息等操作。handlers处理器模块一般只能有一个
- Filters(过滤器模块)。此类模块主要对其他处理器模块输出的内容进行修改操作,最后由nginx输出
- Proxies(代理器模块)。就是nginx的HTTP Upstream之类的模块,这些模块主要与后端一些服务比如fastcgi等操作交互,实现服务代理和负载均衡等功能
nginx模块分为:核心模块、事件模块、标准Http模块、可选Http模块、邮件模块、第三方模块和补丁等
- nginx基本模块:所谓基本模块,指的是nginx默认的功能模块,它们提供的指令,允许你使用定义nginx基本功能的变量,在编译时不能被禁用,包括:
- 核心模块:基本功能和指令,如进程管理和安全。常见的核心模块指令,大部分是放置在配置文件的顶部
- 事件模块:在Nginx内配置网络使用的能力。常见的events(事件)模块指令,大部分是放置在配置文件的顶部
- 配置模块:提供包含机制
nginx的工作原理
nginx
的模块直接被编译进nginx
,因此属于静态编译方式。
启动nginx
后,nginx
的模块被自动加载,与Apache
不一样,首先将模块编译为一个so文件,然后在配置文件中指定是否进行加载。
在解析配置文件时,nginx
的每个模块都有可能去处理某个请求,但是同一个处理请求只能由一个模块来完成。
nginx
的进程架构:
启动nginx
时,会启动一个Master
进程,这个进程不处理任何客户端的请求,主要用来产生worker
线程,一个worker
线程用来处理n个request
。
下图展示了nginx
模块一次常规的HTTP请求和响应的过程
下图展示了基本的WEB服务请求步骤
nginx的安装与配置
nginx安装
创建系统用户nginx
[root@localhost ~]# useradd -r -M -s /sbin/nologin nginx
安装依赖环境
[root@localhost ~]# yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++ [root@localhost ~]# yum -y groups mark install 'Development Tools' 上次元数据过期检查:2:59:11 前,执行于 2021年10月25日 星期一 01时04分32秒。 依赖关系解决。 ============================================================= 软件包 架构 版本 仓库 大小 ============================================================= 安装组: Development Tools 事务概要 ============================================================= 完毕!
创建日志存放目录
[root@localhost ~]# mkdir -p /var/log/nginx [root@localhost ~]# chown -R nginx.nginx /var/log/nginx
下载nginx
[root@localhost ~]# cd /usr/src/ [root@localhost src]# wget http://nginx.org/download/nginx-1.12.0.tar.gz --2021-10-25 04:06:16-- http://nginx.org/download/nginx-1.12.0.tar.gz 正在解析主机 nginx.org (nginx.org)...
编译安装
[root@localhost src]# ls debug kernels nginx-1.12.0.tar.gz [root@localhost src]# tar xf nginx-1.12.0.tar.gz [root@localhost src]# cd nginx-1.12.0 [root@localhost nginx-1.12.0]# ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-debug \ --with-http_ssl_module \ --with-http_realip_module \ --with-http_image_filter_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_stub_status_module \ --http-log-path=/var/log/nginx/access.log \ --error-log-path=/var/log/nginx/error.log [root@localhost nginx-1.12.0]# make -j $(grep 'processor' /proc/cpuinfo | wc -l) && make install
nginx配置
服务控制方式,使用nginx命令
配置环境变量
[root@localhost ~]# echo 'export PATH=/usr/local/nginx/sbin:$PATH' > /etc/profile.d/nginx.sh [root@localhost ~]# . /etc/profile.d/nginx.sh
服务控制方式,使用nginx命令
-t 检查配置文件语法
[root@localhost ~]# nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
-v 输出nginx的版本
[root@localhost ~]# nginx -v nginx version: nginx/1.20.1
-c 指定配置文件的路径
[root@localhost ~]# nginx -s stop ; nginx -c /opt/nginx.conf ##直接停掉然后启动 [root@localhost ~]# ps -ef|grep nginx root 99290 1 0 03:32 ? 00:00:00 nginx: master process nginx -c /opt/nginx.conf nginx 99291 99290 0 03:32 ? 00:00:00 nginx: worker process nginx 99292 99290 0 03:32 ? 00:00:00 nginx: worker process root 101138 1653 0 03:33 pts/0 00:00:00 grep --color=auto nginx
-s 发送服务控制信号,可选值有{stop|quit|reopen|reload}
[root@localhost ~]# nginx -s quit [root@localhost ~]# ss -antl State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 128 [::]:22 [::]:*
nginx的配置文件详解
主配置文件:/usr/local/nginx/conf
- 默认启动nginx时,使用的配置文件是:安装路径/conf/nginx.conf文件
- 可以在启动nginx时通过-c选项来指定要读取的配置文件
nginx常见的配置文件及其作用
配置文件 | 作用 |
---|---|
nginx.conf | nginx的基本配置文件 |
mime.types | MIME类型关联的扩展文件 |
fastcgi.conf | 与fastcgi相关的配置 |
proxy.conf | 与proxy相关的配置 |
sites.conf | 配置nginx提供的网站,包括虚拟主机 |
nginx.conf配置详解
nginx.conf的内容分为以下几段:
- main配置段:全局配置段。其中main配置段中可能包含event配置段
- event {}:定义event模型工作特性
- http {}:定义http协议相关的配置
Nginx配置文件示例
[root@localhost ~]# vim /usr/local/nginx/conf # 全局块 user www-data; ##用户 worker_processes 2; ## 默认1,一般建议设成CPU核数1-2倍 error_log logs/error.log; ## 错误日志路径 pid logs/nginx.pid; ## 进程id # Events块 events { # 使用epoll的I/O 模型处理轮询事件。 # 可以不设置,nginx会根据操作系统选择合适的模型 use epoll; # 工作进程的最大连接数量, 默认1024个 worker_connections 2048; # http层面的keep-alive超时时间 keepalive_timeout 60; # 客户端请求头部的缓冲区大小 client_header_buffer_size 2k; } # http块 http { include mime.types; # 导入文件扩展名与文件类型映射表 default_type application/octet-stream; # 默认文件类型 # 日志格式及access日志路径 log_format main '$remote_addr - $remote_user [$time_local] $status ' '"$request" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; # 允许sendfile方式传输文件,默认为off。 sendfile on; tcp_nopush on; # sendfile开启时才开启。 # http server块 # 简单反向代理 server { listen 80; server_name domain2.com www.domain2.com; access_log logs/domain2.access.log main; # 转发动态请求到web应用服务器 location / { proxy_pass http://127.0.0.1:8000; deny 192.24.40.8; # 拒绝的ip allow 192.24.40.6; # 允许的ip } # 错误页面 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } # 负载均衡 upstream backend_server { server 192.168.0.1:8000 weight=5; # weight越高,权重越大 server 192.168.0.2:8000 weight=1; server 192.168.0.3:8000; server 192.168.0.4:8001 backup; # 热备 } server { listen 80; server_name big.server.com; access_log logs/big.server.access.log main; charset utf-8; client_max_body_size 10M; # 限制用户上传文件大小,默认1M location / { # 使用proxy_pass转发请求到通过upstream定义的一组应用服务器 proxy_pass http://backend_server; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; } } }
配置指令:要以分号结尾,语法格式如下:
derective value1 [value2 ...];
支持使用变量:
- 内置变量:模块会提供内建变量定义
- 自定义变量:
set var_name value
用于调试、定位问题的配置参数
daemon {on|off}; //是否以守护进程方式运行nginx,调试时应设置为off master_process {on|off}; //是否以master/worker模型来运行nginx,调试时可以设置为off error_log 位置 级别; //配置错误日志
这篇关于nginx工作原理与配置的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-13用Nginx防范DDoS攻击的那些事儿
- 2024-12-13用Terraform在AWS上搭建简单NGINX服务器指南
- 2024-10-29Nginx发布学习:从入门到实践的简单教程
- 2024-10-28Nginx发布:新手入门教程
- 2024-10-21nginx 怎么设置文件上传最大20M限制-icode9专业技术文章分享
- 2024-10-17关闭 nginx的命令是什么?-icode9专业技术文章分享
- 2024-09-17Nginx实用篇:实现负载均衡、限流与动静分离
- 2024-08-21宝塔nginx新增8022端口方法步骤-icode9专业技术文章分享
- 2024-08-21nginx配置,让ws升级为wss访问的方法步骤-icode9专业技术文章分享
- 2024-08-15nginx ws代理配置方法步骤-icode9专业技术文章分享