首页 > 系统相关 >Nginx的概述和配置

Nginx的概述和配置

时间:2024-06-30 23:20:27浏览次数:1  
标签:匹配 请求 nginx 配置 Nginx 概述 http 客户端

Nginx的概述和配置

目录

一、Nginx概述

1、Nginx是什么

nginx是一种轻量级/高性能的反向代理web服务器,用于HTTP、HTTPS、SMTP、POP3和IMAP协议,他实现非常高效的反向代理、负载均衡,可以支持处理2-3万的并发连接数,官方检测能支持5万并发,目前在中国为主流的web服务器。

2、Nginx的特点:

优点:

  • 一款高性能、轻量级web服务

  • 稳定性高

  • 系统资源消耗低高

  • 对HTTP并发连接的处理能力

  • 单台物理服务器可支持30000~50000个并发请求

缺点:

nginx有个不太友好的地方是,nginx不方便处理动态资源,可以进行动静分离,将动态请求交给后端程序去进行处理。

3、Nginx和Apache的区别

3.1 nginx相对于apache的优点∶

轻量级,同样起web服务,比apache占用更少的内存及资源

抗并发,nginx处理请求是异步非阻塞的,而apache是阻塞型的,在高并发下,nginx能保持低资源低消耗高性能

高度模块化的设计,编写模块相对简单

3.2 apache相对于nginx的优点∶

Rewrite比nginx的rewrite强大 (rewrite的主要功能就是实现统一资源定位符URL的跳转)

模块多,基本想到的都可以找到

少bug, nginx的bug相对较多

超稳定

总结:一般来说,需要性能的web服务,用nginx。 若不需要性能只求稳定,就选用apache

4、nginx的两种进程分别有什么作用

nginx有两种进程,master进程和worker进程

master进程:用于管理worker进程,读取nginx的配置文件信息

worker进程:处理连接请求

image-20240530165655202

二、编译安装nginx

1、关闭防火墙

image-20240530155526215

2、将所需的安装包放到/data下,并解压

image-20240530155747250

3、安装依赖包

image-20240530160156282

4、创建运行用户

image-20240530160413697

5、编译安装nginx

image-20240530161630932

image-20240530161939233

6、修改权限以及其他设置

image-20240530162241704

image-20240530162939507

7、创建nginx自启动文件

image-20240530163851740

image-20240530163759691

8、重新加载配置

image-20240530164659310

三、nginx的命令

命令 作用
nginx -t 检查语法
nginx -T 检查语法并打印所有配置
nginx -v 显示版本
nginx -V 显示详细信息,包括编译的信息
nginx -c 指定配置文件启动
nginx -s =kill 发送信号
nginx -s reload =kill -1(HUP) 重新加载配置文件
nginx -s stop =kill -9(KILL) 立即停止
nginx -s quit =kill -3(QUIT) 优雅的退出
nginx -s reopen =kill -USR1 重新生成日志文件
nginx -s USR2 飞行中升级

1 实验

1.1 nginx -t、nginx -T

image-20240531143116667

1.2 nginx -v、nginx -V

image-20240531143944592

1.3 nginx -s stop

image-20240531143707664

四、nginx版本编译安装平滑升级的方式

image-20240531151657259

image-20240531155914867

image-20240531160059020

image-20240531164400594

image-20240531164541208

五、配置详细解释

主配置文件:nginx.conf

子配置文件:include conf.d/*.conf

1 全局配置

1.1关闭版本

server_tokens on|off

image-20240603151343576

image-20240603151452626

image-20240603151619453

image-20240603151556351

1.2 修改启动的进程数

image-20240603151913984

image-20240603152009688

image-20240603152204520

1.3 cpu与work进程绑定

CPU MASK: 00000001:0号CPU
          00000010:1号CPU
          ................
  		  10000000:7号CPU
worker_cpu_affinity 00000001 00000010 00000100 00001000;第0号---第3号CPU   
#序号绑定cpu    亲缘性
worker_cpu_affinity 00000101 00001010;
#同一个work  可以绑定  两个cpu可以这么写 但是不建议,本来就是 不希望飘动,这样也是飘动
 验证cpu乱跑可以刷新网页即可
while true ;do ab -c 1000 -n 1000 http://192.168.91.100/;done

image-20240603162019021

image-20240603162816187

image-20240603163336309

image-20240603164656659

1.4 nginx进程的优先级

进程优先级是越小优先级越高

image-20240603170529840

image-20240603170939019

1.5 调试work进程打开的文件的个数

image-20240603183720980

image-20240603183850447

image-20240603184120810

image-20240603184112549

image-20240603184253582

2、http设置

http {
 ...
 ...  #各server的公共配置
 server {    #每个server用于定义一个虚拟主机,第一个server为默认虚拟服务器
 ...
 }
 server {     
 ...
 server_name   #虚拟主机名
 root     #主目录
 alias     #路径别名
 location [OPERATOR] URL {     #指定URL的特性
 ...
 if CONDITION {
 ...
 }
 }
 }
}

2.1 mime

此项为支持的 文件格式,如果不支持的格式 会自动帮你下载,如果支持 就会显示在网页上

image-20240603190238962

2.2 server下的root

image-20240604143404892

image-20240604143854499

image-20240604142652885

image-20240604144509132

2.3 alias别名

image-20240604150137223

image-20240604150239126

image-20240604150324181

2.4 location匹配

location

在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的URI来检查定义的所有location,按一定的优化级找出一个最佳匹配,而后应用其配置在没有使用正则表达式的时候,nginx会先在server中的多个location选取匹配度最高的一个uri,uri是用户请求的字符串,即域名后面的web文件路径,然后使用该location模块中的正则url和字符串,如果匹配成功就结束搜索,并使用此location处理此请求

2.4.1 语法规则
符号 规则匹配
= 精确匹配
^~ 表示包含正则表达式,并且匹配以指定的正则表达式开头
~ 包含正则表达式,并且区分大小写
~* 表示包含正则表达式,并且不区分大写
不带符号 匹配起始于此uri的所有的uri
2.4.2 优先级

image-20240604152615733

2.4.3 实例

image-20240604160725092

2.4.3.1 精确匹配=

image-20240604160836919

2.4.3.2 匹配以指定的正则表达式开头^~

image-20240604161022898

2.4.3.3 表示包含正则表达式,并且不区分大写

image-20240604161540512

2.4.3.4 不带符号

image-20240604161852614

2.5 验证模块

需要安装httpd-tools服务包

image-20240604163419464

image-20240604164201072

image-20240604164317617

image-20240604164352149

3、高级配置

3.1 网页的状态页

image-20240604170216907

Active connections: 
#当前处于活动状态的客户端连接数,包括连接等待空闲连接数=reading+writing+waiting
accepts:
#统计总值,Nginx自启动后已经接受的客户端请求的总数。
handled:
#统计总值,Nginx自启动后已经处理完成的客户端请求总数,通常等于accepts,除非有因worker_connections限制等被拒绝的连接
requests:
#统计总值,Nginx自启动后客户端发来的总的请求数。
Reading:
#当前状态,正在读取客户端请求报文首部的连接的连接数,数值越大,说明排队现象严重,性能不足
Writing:
#当前状态,正在向客户端发送响应报文过程中的连接数,数值越大,说明访问量很大
Waiting:
#当前状态,正在等待客户端发出请求的空闲连接数,开启 keep-alive的情况下,这个值等于active – (reading+writing)

3.2 echo模块

image-20240604181534162

image-20240604184711032

image-20240604184737582

image-20240604184836697

image-20240604184901589

3.3 变量

3.3.1 常用的内置变量
内置变量 作用
$remote_addr 存放了客户端的地址,客户端的公网IP
$proxy_add_x_forwarded_for 此变量表示将客户端IP追加请求报文中X-Forwarded-For首部字段,多个IP之间用逗号分隔,如果请求中没有X-Forwarded-For,就使用$remote_addrthe
$args 变量中存放了URL中的参数,例如:http://www.lisi.org/main/index.do?id=2012222&partner=search
返回结果为: id=20190221&partner=search 存放的就是这个
$document_root 保存了针对当前资源的请求的系统根目录,例如:/apps/nginx/html
$document_uri; 保存了当前请求中不包含参数的URI,注意是不包含请求的指令,比
如:http://www.kgc.org/main/index.do?id=20190221&partner=search会被定义为/main/index.do
#返回结果为:/main/index.do
$host 存放了请求的host名称
$http_user_agent 客户端浏览器的详细信息
$http_cookie; 客户端的cookie信息
$request_filename; 当前请求的资源文件的磁盘路径,由root或alias指令与URI请求生成的文件绝对路径,如:/apps/nginx/html/main/index.html
$scheme; 请求的协议,例如:http,https,ftp等

范例:

image-20240605145431499

3.3.2 自定义变量

语法格式:

Syntax: set $variable value;
Default: —
Context: server, location, if

范例:image-20240605145918775

3.4 https功能

Web网站的登录页面都是使用https加密传输的,加密数据以保障数据的安全,HTTPS能够加密信息,以免敏感信息被第三方获取,所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议,HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。

nginx 的https 功能基于模块ngx_http_ssl_module实现,因此如果是编译安装的nginx要使用参数ngx_http_ssl_module开启ssl功能,但是作为nginx的核心功能,yum安装的nginx默认就是开启的,编译安装的nginx需要指定编译参数--with-http_ssl_module开启

https参数

ssl on | off;   
#为指定的虚拟主机配置是否启用ssl功能,此功能在1.15.0废弃,使用listen [ssl]替代
listen 443 ssl;

ssl_certificate /path/to/file;
#指向包含当前虚拟主机和CA的两个证书信息的文件,一般是crt文件

ssl_certificate_key /path/to/file;
#当前虚拟主机使用的私钥文件,一般是key文件

ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2]; 
#支持ssl协议版本,早期为ssl现在是TLS,默认为后三个

ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
#配置ssl缓存
 off: #关闭缓存
 none:  #通知客户端支持ssl session cache,但实际不支持
 builtin[:size]:#使用OpenSSL内建缓存,为每worker进程私有
 [shared:name:size]:#在各worker之间使用一个共享的缓存,需要定义一个缓存名称和缓存空间大小,一兆可以存储4000个会话信息,多个虚拟主机可以使用相同的缓存名称

ssl_session_timeout time;
#客户端连接可以复用ssl session cache中缓存的有效时长,默认5m

实例:

生成自证书

image-20240605152226912

image-20240605152156097

image-20240605152743728

image-20240605153003602

image-20240605154131441

image-20240605154901097

image-20240605160402172

3.5 自定义图标

avicon.ico 文件是浏览器收藏网址时显示的图标,当客户端使用浏览器问页面时,浏览器会自己主动发起请求获取页面的favicon.ico文件,但是当浏览器请求的favicon.ico文件不存在时,服务器会记录404日志,而且浏览器也会显示404报错

【定制小图标】
wget www.baidu.com/favicon.ico
放到主目录就可以了

不生效可以重新打开浏览器

4、重写功能 rewrite

4.1 if指令

语法:

if (条件匹配) {   
 action
}

使用正则表达式对变量进行匹配,匹配成功时if指令认为条件为true,否则认为false,变量与表达式之间使用以下符号链接:

= #比较变量和字符串是否相等,相等时if指令认为该条件为true,反之为false
!=  #比较变量和字符串是否不相等,不相等时if指令认为条件为true,反之为false
~ #区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假
!~ #区分大小写字符,判断是否匹配,不满足匹配条件为真,满足匹配条件为假

~* #不区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假
!~* #不区分大小字符,判断是否匹配,满足匹配条件为假,不满足匹配条件为真


-f 和 !-f #判断请求的文件是否存在和是否不存在
-d 和 !-d #判断请求的目录是否存在和是否不存在
-x 和 !-x #判断文件是否可执行和是否不可执行
-e 和 !-e #判断请求的文件或目录是否存在和是否不存在(包括文件,目录,软链接)
#如果$变量的值为空字符串或0,则if指令认为该条件为false,其他条件为true。
#nginx 1.0.1之前$变量的值如果以0开头的任意字符串会返回false

实例:

image-20240605162231979

image-20240605162253095

image-20240605170929934

image-20240605170946560

4.2 return

return用于完成对请求的处理,并直接向客户端返回响应状态码,比如:可以指定重定向URL(对于特殊重定向状态码,301/302等) 或者是指定提示文本内容(对于特殊状态码403/500等),处于此指令后的所有配置都将不被执行,return可以在server、if 和 location块进行配置

语法格式:

return code; #返回给客户端指定的HTTP状态码
return code [text]; #返回给客户端的状态码及响应报文的实体内容,可以调用变量,其中text如果有空格,需要用单或双引号
return code url; #返回给客户端的URL地址 

实例

image-20240605171238758

image-20240605171249295

4.3 set指令

指定key并给其定义一个变量,变量可以调用Nginx内置变量赋值给key,另外set定义格式为set $key value,value可以是text, variables和两者的组合。

请看上面的自定义变量

4.4 break指令

用于中断当前相同作用域(location)中的其他Nginx配置,与该指令处于同一作用域的Nginx配置中,位于它前面的配置生效,位于后面的 ngx_http_rewrite_module 模块中指令就不再执行,Nginx服务器在根据配置处理请求的过程中遇到该指令的时候,回到上一层作用域继续向下读取配置,该指令可以在server块和locationif块中使用

注意: 如果break指令在location块中后续指令还会继续执行,只是不执行 ngx_http_rewrite_module 模块的指令,其它指令还会执行

image-20240605173157741

4.5 rewrite

语法格式:

rewrite可以配置在 server、location、if
语法格式 :
rewrite regex               replacement(www.baidu.com)        [flag];
        正则匹配原始访问url    替代你想让客户访问的                   标志()premanent301   redirect302  break  last

正则表达格式:

. #匹配除换行符以外的任意字符
\w #匹配字母或数字或下划线或汉字
\s #匹配任意的空白符
\d #匹配数字    [0-9]   
\b #匹配单词的开始或结束
^ #匹配字付串的开始
$ #匹配字符串的结束
* #匹配重复零次或更多次
+ #匹配重复一次或更多次
? #匹配重复零次或一次
(n) #匹配重复n次
{n,} #匹配重复n次或更多次
{n,m} #匹配重复n到m次
*? #匹配重复任意次,但尽可能少重复
+? #匹配重复1次或更多次,但尽可能少重复
?? #匹配重复0次或1次,但尽可能少重复
{n,m}? #匹配重复n到m次,但尽可能少重复
{n,}? #匹配重复n次以上,但尽可能少重复
\W  #匹配任意不是字母,数字,下划线,汉字的字符
\S #匹配任意不是空白符的字符
\D #匹配任意非数字的字符
\B #匹配不是单词开头或结束的位置
[^x] #匹配除了x以外的任意字符
[^kgc] #匹配除了kgc 这几个字母以外的任意字符

flag说明

redirect;302
#临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URL给客户端,由客户端重新发起请求;使用相对路径,或者http://或https://开头,状态码:302

permanent;301       www.bj.com     www.beijing.com
#重写完成后以永久重定向方式直接返回重写后生成的新URL给客户端,由客户端重新发起请求,状态码:301

break;       www.bj.com
#重写完成后,停止对当前URL在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环,建议在location中使用
#适用于一个URL一次重写 
 
last;
#重写完成后,停止对当前URI在当前location中后续的其它重写操作,而后对新的URL启动新一轮重写检查,不建议在location中使用
#适用于一个URL多次重写,要注意避免出现超过十次以及URL重写后返回错误的给用户301

image-20240605185612090

image-20240605160402172

5、防盗链

5.1在7-2上配置

image-20240606140127943

image-20240606140725952

5.2 在7-1上配置

image-20240606141049054

image-20240606141608127

5.3 结果展示

image-20240606142739850

image-20240606141727149

image-20240606141830068

6、反向代理

6.1、反向代理原理

image-20240606145259038

6.2 反向代理的概念

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

反向代理是为服务端服务的,反向代理可以帮助服务器接收来自客户端的请求,帮助服务器做请求转发,负载均衡等。

反向代理对服务端是透明的,对我们是非透明的,即我们并不知道自己访问的是代理服务器,而服务器知道反向代理在为他服务。

6.3 反向代理的优势

  • 隐藏真实服务器;
  • 负载均衡便于横向扩充后端动态服务;
  • 动静分离,提升系统健壮性;

6.4 Nginx四层反向代理和七层反向代理

四层反向代理:是基于IP+PORT(TCP/UDP端口)转发

七层反向代理:基于http,https,mail代理转发

6.5 反向代理配置参数

参数 作用
proxy_pass 用来设置将客户端请求转发给的后端服务器的主机,可以是主机名(将转发至后端服务做为主机头首部)、IP地址:端口的方式
也可以代理到预先设置的主机群组,需要模块ngx_http_upstream_module支持
proxy_hide_header on | off; 用于nginx作为反向代理的时候,在返回给客户端http响应时,隐藏后端服务器相应头部的信息,可以设置在http,server或location块
proxy_pass_request_body on |off; 是否向后端服务器发送HTTP实体部分,可以设置在http,server或location块,默认即为开启
proxy_pass_request_headers on | off; 是否将客户端的请求头部转发给后端服务器,可以设置在http,server或location块,默认即为开启

6.6 反向代理单台web服务器

6.6.1 7-1上的配置

image-20240606151927904

6.6.2 7-2上的配置

image-20240606152027656

6.6.3 结果

image-20240606152116359

6.6.4 加/和不加/的区别
6.6.4.1 不加/

7-1的配置

image-20240606152946745

7-2的配置

image-20240606160205325

image-20240606153100081

image-20240606153145716

6.6.4.2 加了/

image-20240606160809769

image-20240606160828697

image-20240606160848088

另一案例

image-20240606161631541

image-20240606161129082

6.7 502和504错误

502

当后台服务器死掉或者停掉就会出现此错误

image-20240606162058698

image-20240606162021438

504

默认在1分钟内后端服务器无法响应(比如:iptables -AINPUT -s nginx_ip -j DROP),会显示下面的504超时提示

image-20240606162323091

7、LNMP架构

7.1、编译安装nginx

image-20240606165408470

image-20240606165447906

image-20240606170238495

image-20240606170406808

image-20240606170851667

image-20240606171014644

image-20240606183519250

image-20240606183629702

7.2、yum安装mysql

image-20240606184300049

image-20240606184900354

image-20240606185037252

image-20240611170304786

image-20240606185624327

image-20240606185913081

image-20240606190107504

7.3 php

image-20240606190414296

image-20240606190525054

1、安装环境依赖包
yum -y install gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel

2、编译安装
cd /opt
tar jxvf php-7.1.10.tar.bz2
 
cd php-7.1.10
./configure \
--prefix=/usr/local/php \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip
 
make && make install

image-20240606190641912

image-20240606190758072

image-20240606192320006

image-20240606192149220

image-20240606192443399

image-20240611184221653

image-20240606194953891

image-20240606192910516

image-20240606193126840

image-20240606193623371

image-20240606195043672

7.4 nginx和php联系

image-20240611185857981

image-20240611190205526

image-20240611190238668

7.5 数据库和php联系

image-20240611190849763

image-20240611190933117

image-20240611191646808

image-20240611191708604

7.6 安装论坛软件

image-20240611193940785

image-20240611194047313

image-20240611193715117

image-20240611193414387

image-20240611193908304

image-20240611194141557

image-20240611194513082

image-20240611194538204

image-20240611194544754

标签:匹配,请求,nginx,配置,Nginx,概述,http,客户端
From: https://www.cnblogs.com/shijunan2/p/18277146

相关文章

  • 猫头虎分享已解决Bug || 服务器配置错误(Server Configuration Error): ServerMisconfig
    ......
  • Nginx实现负载均衡的4种常用方式及路径匹配规则
    一、Nginx实现负载均衡的4种常用方式为:轮询模式、IP哈希模式、权重模式、最少连接实现负载均衡需要在http模块中配置使用upstream模块定义后台的webserver的池子,名为proxy-web,在池子中我们可以添加多台后台webserver,其中状态检查、调度算法都是在池子中配置;然后在se......
  • 【Redis —— 04 Redis配置文件】
    Redis配置文件(通常为redis.conf)包含多种配置选项,可以调整Redis服务器的行为和性能。以下是Redis配置文件中的常见配置项及其详解:官网:Redisconfiguration|Docs常用配置项1.基本配置bind绑定的IP地址。如果你想让Redis监听多个IP地址,可以用空格分隔多个IP。示例:b......
  • 【Redis —— 06 主从复制配置】
    Redis主从复制(replication)允许一个Redis服务器(称为主服务器)将数据复制到一个或多个Redis服务器(称为从服务器)。这种机制可以用于提高数据的可用性和分布式读取能力。以下是配置Redis主从复制的步骤:主服务器配置在主服务器上,通常不需要进行特殊配置,只需确保Redis服......
  • nginx+keepealived 部署高可用
    nginx用docker部署1、安装docker2、拉取nginx镜像:dockerpullnginx3、启动nginx:dockerrun-d-p80:80--namenginxnginx:latest4、新建相关目录和文件夹(用来挂载容器内的文件):·mkdir-p/opt/nginx/{logs,conf,conf.d}·touch/opt/nginx/logs/{access.log,err......
  • 41、linux-yum源管理-阿里云仓库配置
    ·yum的管理1、清理原有的yum配置·把本地或者官方的/etc/yum.repos.d/路径下的所有repo配置文件移走·确保/etc/yum.repos.d/这里没有其它文件2、下载配置阿里巴巴开源镜像站官网配置:https://developer.aliyun.com/mirror/·在这个位置/e......
  • Qt下载安装及配置教程
    文章目录1. QT简介2. 下载QT3.检查配置环境4.创建QT项目1. QT简介Qt是一个跨平台C++图形用户界面(GUI)工具包,它由Qt公司(前身为Trolltech)开发和维护。自1995年发布以来,Qt因其强大的功能和跨平台能力,成为了许多软件开发者的首选工具。无论是在桌面应用程序、移动应用......
  • Linux-如何查看服务器中的硬件配置信息
    在Linux服务器上查看硬件配置信息,可以使用一系列命令行工具。以下是一些常用命令来获取不同硬件组件的详细信息:查看CPU信息:查看内存信息:cat/proc/cpuinfo:显示处理器类型、型号、频率、核心数等详细信息。lscpu:提供更为人性化的CPU架构和核心数量等信息。查看硬盘信息: ......
  • MMM高可用配置
    目录1.MMM的概述2.MMM的工作原理3.如何实现主主复制1.MMM的概述MMM(Master-MasterreplicationmanagerforMySQL,MySQL主主复制管理器)是一套支持双主故障切换和双主日常管理的脚本程序。MMM使用Perl语言开发,主要用来监控和管理MySQLMaster-Master(双主)复制,虽然叫做双主复......
  • MHA高可用配置及故障切换
    目录1.MHA概述(1)MHA的组件(2)MHA的工作原理(3)MHA的特点2.搭建MySQLMHA3.故障模拟4.故障修复MySQL主从复制集群高可用方案:keepalived主备、MHA、MMM、MySQLCluster、PXC。1.MHA概述MHA(MasterHighAvailability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。......