架构师系列-Nginx、OpenResty(一)- 基本使用配置

Nginx 模块

高度模块化的设计是 Nginx 的架构基础,Nginx 服务器被分解为多个模块,每个模块就是一个功能模块,只负责自身的功能,模块之间严格遵循“高内聚,低耦合”的原则。

核心模块

核心模块是 Nginx 服务器正常运行必不可少的模块,提供错误日志记录、配置文件解析、事件驱动机制、进程管理等核心功能。

标准 HTTP 模块

标准 HTTP 模块提供 HTTP 协议解析相关的功能,如:端口配置、网页编码设置、HTTP 响应头设置等。

可选 HTTP 模块

可选 HTTP 模块主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,如:Flash 多媒体传输、解析 GeoIP 请求、SSL 支持等。

邮件服务模块

邮件服务模块主要用于支持 Nginx 的邮件服务,包括对 POP3 协议、IMAP 协议和 SMTP 协议的支持。

第三方模块

第三方模块是为了扩展 Nginx 服务器应用,完成开发者自定义功能,如:Json 支持、Lua 支持等。

 nginx应用场景

Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。

正向代理与反向代理的区别,nginx主要是反向代理实现负载均衡。

Nginx的安装 

编译安装nginx

# 安装make
yum -y install autoconf automake make
# 安装g++
yum -y install gcc gcc-c++
# 安装nginx依赖的库
yum -y install wget pcre pcre-devel zlib zlib-devel openssl openssl-devel
# 下载nginx
wget http://nginx.org/download/nginx-1.23.0.tar.gz
# 解压nginx
tar -zxvf nginx-1.21.1.tar.gz# 编译安装
./configure  --prefix=/usr/local/nginx
make && make install

编译配置

  • –prefix指定安装目录
  • –with-http_ssl_module安装https模块
  • creating objs/Makefile 代表编译成功
  • make编译
  • make install安装

配置环境变量 

vi /etc/profile# 在最后一行加入
export PATH=$PATH:/usr/local/nginx/sbin# 生效环境变量
source /etc/profile

 关闭防火墙

systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld

配置Hosts

因为需要通过虚拟主机配置我们需要配置hosts文件

192.168.245.198 www.abc.com
192.168.245.198 www.abc.cn
192.168.245.198 www.bbs.com
192.168.245.198 www.resources.com
192.168.245.198 www.ab.com
192.168.245.198 www.yyy.com

yum方式

添加源

默认情况Centos7中无Nginx的源,最近发现Nginx官网提供了Centos的源地址,因此可以如下执行命令添加源。

sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

安装Nginx

sudo yum install -y nginx
# 启动
sudo systemctl start nginx.service
# 设置开机自动运行
sudo systemctl enable nginx.service

 Nginx常用命令

# 启动
nginx
# 如果执行配置文件
nginx -c nginx.conf #如果不指定,默认为NGINX_HOME/conf/nginx.conf#停止
nginx -s stop#退出
nginx -s quit#关闭
# 查看nginx进程号
ps -aux | grep nginx# 杀掉进程
kill -9 nginx# 重新加载配置文件
nginx -s reload#检查配置文件是否正确
nginx -t -c /路径/nginx.conf#查看nginx的版本信息
nginx -v

配置文件结构

Nginx配置文件一般位于Nginx安装目录下的conf目录下,整个文件以block形式组合而成,每一个block都使用"{}"大括号来表示,block中可以嵌套其他block层级,其中main层是最高层次。

Nginx配置文件主要有4部分,main(全局设置)、server(主机设置)、upstream(上游服务器设置,主要为反向代理,负载均衡相关配置)和location(url匹配特定位置的设置),每部分包含若干指令。

  • Main部分的设置影响其他所有部分的设置;
  • Server部分主要用于指定虚拟机主机域名,ip和端口;
  • Upstream的指令用于设置一系列的后端服务器,设置反向代理及后端服务器的负载均衡;
  • Location部分用于匹配网页位置(如,跟目录“/”,”/images”等)。

它们之间的关系是,server继承main,location继承server,upstream既不会继承指令也不会被继承。

在这四个部分当中,每个部分都包含若干指令,这些指令主要包含Nginx的主模块指令、事件模块指令、HTTP核心模块指令,同时每个部分还可以使用其他HTTP模块指令,例如Http SSL模块、HttpGzip Static模块和Http Addition模块等。

真实的nginx配置文件可能如下 

########### 每个指令必须有分号结束。#################
#user administrator administrators;  #配置用户或者组,默认为nobody nobody。
#worker_processes 2;  #允许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址
error_log log/error.log debug;  #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为onmulti_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off#use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventportworker_connections  1024;    #最大连接数,默认为512
}
http {include       mime.types;   #文件扩展名与文件类型映射表default_type  application/octet-stream; #默认文件类型,默认为text/plain#access_log off; #取消服务日志    log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式access_log log/access.log myFormat;  #combined为日志格式的默认值sendfile on;   #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。keepalive_timeout 65;  #连接超时时间,默认为75s,可以在http,server,location块。upstream mysvr {   server 127.0.0.1:7878;server 192.168.10.121:3333 backup;  #热备}error_page 404 https://www.baidu.com; #错误页server {keepalive_requests 120; #单连接请求上限次数。listen       4545;   #监听端口server_name  127.0.0.1;   #监听地址       location  ~*^.+$ {       #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。#root path;  #根目录#index vv.txt;  #设置默认页proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表deny 127.0.0.1;  #拒绝的ipallow 172.18.5.54; #允许的ip           } }
}

配置文件位置

nginx配置为简化日常维护而设计,并且提供了简单的手段用于web服务器将来的扩展。

配置文件是一些文本文件,通常位于nginx安装路径/etc/nginx/etc/nginx,主配置文件通常命名为nginx.conf为了保持整洁,部分配置可以放到单独的文件中,再自动地被包含到主配置文件,但应该注意的是,nginx目前不支持Apache风格的分布式配置文件(如.htaccess文件),所有和nginx行为相关的配置都应该位于一个集中的配置文件目录中。

Nginx的全局配置

user nobody nobody;
worker_processes 2;
error_log logs/error.log notice;
pid logs/nginx.pid;events{use epoll;worker_connections 65536;
}

user

user是个主模块指令,指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行。

这个地方如果写错了就会出现获取不到用户的错误

worker_processes 

是个主模块指令,指定了Nginx要开启的进程数,每个Nginx进程平均耗费10M~12M内存,建议指定和CPU的数量一致即可。

这个地方如果配置了worker_processes 2;那么他的工作进程就有两个

error_log 

是个主模块指令,用来定义全局错误日志文件,日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少。

日志文件路径一般在nginx安装目录的logs目录中

pid 

是个主模块指令,用来指定进程pid的存储文件位置。

进行成和nginx的master的进程号是一致的,只有nginx运行时才存在,如果nginx停止了 pid也会被删除掉

 events事件指令

events事件指令是设定Nginx的工作模式及连接数上限:

use

use是个事件模块指令,用来指定Nginx的工作模式

Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll,其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中,对于Linux系统,epoll工作模式是首选。

worker_connections

也是个事件模块指令,用于定义Nginx每个进程的最大连接数,默认是1024。

最大客户端连接数由worker_processes和worker_connections决定,即Max_client=worker_processes*worker_connections ​ 在作为反向代理时,max_clients变为:max_clients = worker_processes * worker_connections/4。 进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令“ulimit -n 65536”后worker_connections的设置才能生效

HTTP服务器配置 

Nginx对HTTP服务器相关属性的配置代码如下:

http {# 引入文件类型映射文件include       mime.types;# 如果没有找到指定的文件类型映射 使用默认配置default_type  application/octet-stream;# 日志打印格式log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';# 启动零拷贝提高性能sendfile        on;# 设置keepalive长连接超时时间keepalive_timeout  65;# 引入子配置文件include /usr/local/openresty/nginx/conf/conf.d/*.conf;
}

 下面的代码实现对日志格式的设定:下面详细介绍下这段代码中每个配置选项的含义。

include

include是个主模块指令,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度,可以将其他各个模块的具体配置分散在不同的文件夹中。

default_type 

default_type属于HTTP核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置PHP环境时,Nginx是不予解析的,此时,用浏览器访问PHP文件就会出现下载窗口。

log_format 

log_format是Nginx的HttpLog模块指令,用于指定Nginx日志的输出格式。main为此日志输出格式的名称,可以在下面的access_log指令中引用。

log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$gzip_ratio"';log_format download '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$http_range" "$sent_http_content_range"';

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/3122.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库系统原理实验报告4 | 数据完整性

整理自博主本科《数据库系统原理》专业课自己完成的实验报告,以便各位学习数据库系统概论的小伙伴们参考、学习。 专业课本: ———— 本次实验使用到的图形化工具:Heidisql 目录 一、实验目的 二、实验内容 1、建表 2、对1题中创建的Stud…

<计算机网络自顶向下> 无连接传输UDP

UDP:User Datagram Protocol “尽力而为”的服务 报文可能丢掉或者乱序好处: 效率高(不建立连接无拥塞控制和流量控制【应用->传输的速率主机->网络的速率】)报文段的头部很小(开销小)UDP被用于 流媒…

JVM常见的垃圾回收器

1、回收方法区: 方法区回收价值很低,主要回收废弃的常量和无用的类。 方法区中的存储: 方法区中存储的是加载的类的信息,常量,静态变量,即时编译后的代码等数据,所以回收的对象也就是这些内…

如何在一台服务器上同时运行搭载JDK 8, JDK 17, 和 JDK 21的项目:终极指南

🐯 如何在一台服务器上同时运行搭载JDK 8, JDK 17, 和 JDK 21的项目:终极指南 🚀 摘要 在企业开发环境中,常常需要在同一台服务器上运行使用不同Java开发工具包(JDK)版本的多个项目。本文详细介绍如何在L…

报错import build constraints exclude all Go files in

好久没用fyne突然报错 报错import ...go-gl.. build constraints exclude all Go files in go-gl .. 检查gcc --version正常输出 检查gcc版本正常,路径正常。 尝试解决的方法, 1.重新安装依赖,不行 2.重新配置下载地址,不…

window平台C#实现软件升级功能(控制台)

window平台C#实现软件升级功能 之前用window窗体实现过一个升级功能,后来发现多个项目都需要升级功能,现改成可接收参数实现一种通用的exe.改用控制台方式实现这个升级功能,这样不仅实现了接收参数,升级程序体积也比原来的窗体形式…

河道采砂执法监管信息化平台:科技赋能,智慧监管

随着信息技术的飞速发展,信息化平台已经成为提升行业监管效率和水平的重要工具。河道采砂作为水利资源管理的重要环节,其执法监管同样需要与时俱进,利用先进技术手段提升监管效能。河道采砂执法监管信息化平台便是这一背景下的产物&#xff0…

从底层分析并详解SpringAOP底层实现

首先分析AOP的实现 首先切面(Advisor)由通知(Advice)和切点(Pointcut)组成 包括前置通知后置通知等等最终都会被转化为实现 MethodInterceptor 接口的环绕通知 先看一段代码了解一下是aop是怎么运作的 首先定义了两个类实现了MethodInterceptor接口&…

Unity HDRP Water Surface 水系统 基础教程

Unity HDRP Water Surface 水系统 基础教程 Unity Water SurfaceUnity 项目创建Unity Water Surface:Ocean(海洋)简介Ocean:Transform、GeneralOcean:Simulation(仿真模拟)Ocean:Sim…

C++之STL-String

目录 一、STL简介 1.1 什么是STL 1.2 STL的版本 1.3 STL的六大组件 ​编辑 1.4 STL的重要性 二、String类 2.1 Sting类的简介 2.2 string之构造函数 2.3 string类对象的容量操作 2.3.1 size() 2.3.2 length() 2.3.3 capacity() 2.3.4 empty() 2.3.5 clear() 2.3.6…

【IDEA】在IntelliJ IDEA中导入Eclipse项目:详细指南

IntelliJ IDEA和Eclipse是两款常用的集成开发环境(IDE),在软件开发中经常会遇到需要在它们之间迁移项目的情况。本文将重点介绍如何在IntelliJ IDEA中导入Eclipse项目,以帮助开发者顺利地迁移他们的项目,并在IntelliJ …

echarts 堆叠柱状图 顶部添加合计

堆叠有3个,后面加了一个对象显示顶部的数据, 其实主要的代码还是在series 的第四项,需要注意的是 series的第四项中的data需要为 data: [0, 0, 0] 顶部的统计才能显示出来 增加的代码如下 {name: 综合,type: bar,stack: total,label: {sh…

【Java框架】SpringMVC(三)——异常处理,拦截器,文件上传,SSM整合

目录 异常处理解释局部异常处理全局异常 拦截器拦截器介绍作用:拦截器和过滤器之间的区别拦截器执行流程代码实现补充 文件上传依赖配置MultipartResolver编写文件上传表单页APIMultipartFileFile.separator必须对上传文件进行重命名代码示例 SpringMVC文件上传流程多文件上传 …

AWS制作WordPress在国内外的利弊?

AWS作为全球领先的云计算服务供应商,为WordPress提供了强大且灵活的托管环境,使用AWS来搭建和运行WordPress无疑是个不错的选择。即便如此使用AWS制作还是会有些许利弊,九河云作为AWS的合作伙伴来为读者们仔细探讨AWS在WordPress的利弊。 利&…

学python的第十九天

网络通信和访问数据库 1.1 基本的网络知识 TCP/IP IP是低级的路由协议,它将数据拆分在许多小的数据包中,并通过网络将他们发送到某一特定地址,但无法保证所有包都抵达目的地,也不能保证包按顺序抵达 TCP(传输控制协议…

深度学习系列65:数字人openHeygen详解

1. 主流程分析 从inference.py函数进入,主要流程包括: 1) 使用cv2获取视频中所有帧的列表,如下: 2)定义Croper。核心代码为69行:full_frames_RGB, crop, quad croper.crop(full_frames_RGB)。…

Android MVVM架构 + Retrofit完成网络请求

关于Retrofit,这个应该不是一个很新颖的东西了,简单过一下吧 1.由Square公司开发,基于Type-safe的REST客户端。 2.使用注解来定义API接口,使得HTTP请求变得简洁且易于维护。 3.支持同步和异步请求,可与RxJava、Corouti…

【安卓13】解决带GMS编译报super分区空间不足错误

1、错误信息 2、解决方案 不同供应商修改分区大小的文件路径不一样,但是万变不离其宗,根据报错信息全局搜索关键词BOARD_SUPER_PARTITION_SIZE 这里以RK供应商和AML供应商修改为例: (1)RK改法: 根目录下…

全光谱灯对人体的危害?谨记全光谱灯选购要避开的四大套路

全光谱灯对人体的危害有多大?近年来网上关于护眼台灯对视力有害的言论有很多,引发了很多人空前的关注,事实上这未必是一件坏事,因为随着护眼台灯的热度持续上涨,市面上浑水摸鱼的行为增多了不少,有着不少劣…

STM32H7使用FileX库BUG,SD卡挂载失败

问题描述: 使用STM32H7ThreadXFileX,之前使用swissbit牌的存储卡可正常使用,最近项目用了金士顿的存储卡,发现无法挂载文件系统。 原因分析: 调试过程发现,关闭D-Cache可以挂载使用exfat文件系统。 File…