Nginx---Web服务器

news2024/11/11 9:37:51

简介

        介绍nginx中Web服务器的相关配置

环境配置 

mkdir /data/web/html -p
mkdir /data/web/html/test{1..5}
echo test1 > /data/web/html/test1/index.html
echo test2 > /data/web/html/test2/index.html
echo test3 > /data/web/html/test3/index.html
echo test4 > /data/web/html/test4/index.html
echo test5 > /data/web/html/test5/index.html

        配置DNS

C:\Windows\System32\drivers\etc 

 

  配置介绍

root与alias

vim /usr/local/nginx/conf/conf.d/web-service.conf

server {
        listen 80;
        server_name www.hello.com;
        index index.html;

        location /test1 {
                root /data/web/html;
        }

        location /world {
                alias /data/web/html/test2;
        }

 

        root访问方式为root路径+location路径

        alias访问方式为alias即为完整路径

 location正则

        在location块中可以通过正则表达式来进行匹配

mkdir /data/web/html/test{1..5}/hello -p

echo web1 > /data/web/html/test1/hello/index.html

echo web2 > /data/web/html/test2/hello/index.html

echo web3 > /data/web/html/test3/hello/index.html

echo web4 > /data/web/html/test4/hello/index.html

echo web5 > /data/web/html/test5/hello/index.html

        对文件的匹配

        测试

         对目录的匹配

        测试

 账户认证

        提供一个在访问前进行账户认证的功能

        创建账户

        如果没有htpasswd,则需要下载httpd

htpasswd -cm /usr/local/nginx/conf/.htpasswd admin
htpasswd -m /usr/local/nginx/conf/.htpasswd test1

        测试

自定义错误页面

mkdir /data/web/html/errors -p
echo error page > /data/web/html/errors/40x.html

        测试

自定义错误日志 

mkdir /data/nginx/log -p

        测试

         nginx自动创建日志

文件检测 

         try_files是Nginx中的一个指令,用于按顺序检查文件或目录是否存在,并根据检查结果决定如何处理请求。如果指定的文件或目录存在,Nginx将使用找到的文件进行请求处理。如果所有指定的文件或目录都不存在,Nginx将根据try_files指令的最后一个参数进行处理,这个参数可以是另一个文件路径、一个内部重定向的URI,或者是一个自定义的HTTP状态码。

        try_files语法:

try_files file ... uri;

try_files file ... =code;

  • file参数是需要检查的文件或目录路径。
  • uri参数是如果所有文件都不存在时,Nginx将重定向到的URI。
  • code参数是如果指定文件不存在,返回的自定义HTTP状态码。
echo try_files error > /data/web/html/errors/try_error.html
echo hello > /data/web/html/index.html

        测试

 

长连接配置 

        长连接配置在主配置文件中 

 keepalive_timeout  65 60;        #开启长连接后会话保持时间为65s,客户端显示会话保持时间为60s,如不设置客户端将不显示超时时间,默认75s

keepalive_requests 2;        #会话期间可以请求的次数,默认100

         测试

        开启测试虚拟机

yum install -y telnet        下载telnet并配置hosts文件

 下载服务器配置

        使客户端浏览器能够通过列表格式完成下载请求

        相关命令:

autoindex on | off;         #自动文件索引功能,默为off

autoindex_exact_size on | off;         #计算文件确切大小(单位bytes),off 显示大概大小(单位K、 M),默认on

autoindex_localtime on | off ;         #显示本机时间而非GMT(格林威治)时间,默认off

autoindex_format html | xml | json | jsonp;         #显示索引的页面文件风格,默认html

limit_rate rate; #限制响应客户端传输速率(除GET和HEAD以外的所有方法),单位 B/s,bytes/second,默认无限制

set $limit_rate 4k;         #也可以通变量限速,单位B/s,同时设置,此项优级高.

         实验

mkdir /data/web/html/download
dd if=/dev/zero of=/data/web/html/download/test_file bs=1M count=100    #制作文件

        测试

 

 nginx状态页

        用来监测nginx基本状态

nginx压缩功能

        Nginx支持对指定类型的文件进行压缩然后再传输给客户端,而且压缩还可以设置压缩比例,压缩后的文 件大小将比源文件显著变小,样有助于降低出口带宽的利用率,降低企业的IT支出,不过会占用相 应的CPU资源。

        在主配置文件中配置

 

制作测试文件

echo hello world > /data/web/html/small.html

cat /var/log/messages > /data/web/html/big.html

         测试

        使用另一台虚拟机测试

nginx变量

        nginx的变量分为内置变量和自定义变量;可以在配置文件中引用,作为功能判断或日志场景使用。

        内置变量

$remote_addr;         #存放了客户端的地址

$args;        #存放URI中的参数,无参数为空

$is_args;        #有参数为?,无参数为空 

$document_root;        #存放当前请求的目录

$document_uri;        #存放当前请求中不包含参数的URI

$host;        #存放请求的host名称

echo $limit_rate;        #存放网络速率,若没有设置,则显示0

$remote_port;        #客户端请求的端口

$remote_user;        #保存经过Auth Basic Module验证的用户名,若无则为空

$request_body_file;        #反向代理时发送给后端服务器的本地资源名称

$request_method;        #请求资源的方式

$request_filename;        #请求的资源的磁盘路径,由root或alias指令与URI请求生成的文件绝对路径

$request_uri;        #请求参数的原始URI,不包含主机名

$scheme;        #请求使用的协议

$server_protocol;        #客户端请求资源使用的协议版本

$server_addr;        #服务器的IP地址

$server_name;        #虚拟主机的主机名

$server_port;        #虚拟主机的端口

$http_user_agent;        #客户端浏览器的详细信息

$http_cookie;        #客户端的所有cookie信息

$cookie_<name>;        #name为请求的任意cookie的key

$http_<name>;        #name为任意请求报文首部字段,表示记录请求报文的首部字段,ame的对应的首部字段名需要为小写,如果有 横线需要替换为下划线

$sent_http_<name>;        #name为响应报文的首部字段,name的对应的首部字段名需要为小写,如果有横线需要替换为下划线,此变量有 问题

$arg_<name>;         #此变量存放了URL中的指定参数,name为请求url中指定的参数

        
location / {
                root /data/web/html;
                echo $cookie_key1;
        #       echo $http_cookie;
        #       echo $http_user_agent;
        #       echo $server_port;
        #       echo $server_name;
        #       echo $server_addr;
        #       echo $server_protocol;
        #       echo $scheme;
        #       echo $request_uri;
        #       echo $request_filename;
        #       echo $request_method;
        #       echo $remote_user;
        #       echo $remote_port;
        #       echo $limit_rate;
        #       echo $host;
        #       echo $document_uri;
        #       echo $document_root;
        #       echo $is_args;
        #       echo $remote_addr;
        #       echo $args;
        }

         自定义变量

nginx rewrite 

        rewrite指令用于基于正则表达式修改请求的URI。这个指令可以在serverlocation块中使用。

        if命令

        用于条件匹配判断,并根据条件判断结果选择不同的Nginx配置,可以配置在server或location块中进行 配置,Nginx的if语法仅能使用if做单次判断,不支持使用if else或者if elif这样的多重判断。

if (条件匹配) {

        action

}

        可以使用正则表达式对匹配条件进行筛选 

=         #比较变量和字符串是否相等,相等时if指令认为该条件为true,反之为false

!=         #比较变量和字符串是否不相等,不相等时if指令认为条件为true,反之为false

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

!~         #区分大小写字符,判断是否匹配,不满足匹配条件为真,满足匹配条件为假

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

!~*         #不区分大小字符,判断是否匹配,满足匹配条件为假,不满足匹配条件为真

-f 和 !-f                 #判断请求的文件是否存在和是否不存在

-d 和 !-d                 #判断请求的目录是否存在和是否不存在

-x 和 !-x                 #判断文件是否可执行和是否不可执行

-e 和 !-e         #判断请求的文件或目录是否存在和是否不存在(包括文件,目录,软链接)

#注意: 如果$变量的值为空字符串或0,则if指令认为该条件为false,其他条件为true。 #nginx 1.0.1之前$变量的值如果以0开头的任意字符串会返回false

        set命令

        指定key并给其定义一个变量,变量可以调用Nginx内置变量赋值给key

set $key value        #命令格式

        break命令

         用于中断当前相同作用域(location)中的其他Nginx配置,与该指令处于同一作用域的Nginx配置中,位于它前面的配置生效,位于break后面的配置不再执行。

        Nginx服务器在根据配置处理请求的过程中遇到该指令的时候,回到上一层作用域继续向下读取配置,该指令可以在server块和locationif块中使用。

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

         return命令

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

        命令格式

 return code;         #返回给客户端指定的HTTP状态码

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

return code URL;         #返回给客户端的URL地址

        rewrite命令

         通过正则表达式的匹配来改变URI,可以同时存在一个或多个指令,按照顺序依次对URI进行匹配, rewrite主要是针对用户请求的URL或者是URI做具体处理。

        命令格式

 rewrite regex replacement [flag];

rewrite将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为表达式指定的新的URI

        注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成 后,会重新一轮的替换检查,隐含有循环机制,但不超过10次;如果超过,提示500响应码,[flag]所表示的 标志位用于控制此循环机制 

rewrite flag介绍 

        利用nginx的rewrite的指令,可以实现url的重新跳转,rewrite有四种不同的flag,分别是redirect(临时 重定向302)、permanent(永久重定向301)、break和last。其中前两种是跳转型的flag,后两种是代理型。

        fiag说明

redirect;

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

permanent;

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

break;

#重写完成后,停止对当前URL在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置,结束循环,建议在location中使用,适用于一个URL一次重写

last;

#重写完成后,停止对当前URI在当前location中后续的其它重写操作,而后对新的URL启动新一轮重写检查,不建议在location中使用,适用于一个URL多次重写,要注意避免出现超过十次以及URL重写后返回错误的给用户

        实验

        判断文件是否存在,若不存在则重定向至首页

         测试

 nginx防盗链

        防盗链基于客户端携带的referer实现,referer是记录打开一个页面之前记录是从哪个页面跳转过来的标 记信息,如果别人只链接了自己网站图片或某个单独的资源,而不是打开了网站的整个页面,这就是盗 链,referer就是之前的那个网站域名。

        正常的referer信息有以下几种

none:         #请求报文首部没有referer首部,比如用户直接在浏览器输入域名访问web网站,就没有referer信息。

blocked:         #请求报文有referer首部,但无有效值,比如为空。

server_names:         #referer首部中包含本主机名及即nginx 监听的server_name。

arbitrary_string:         #自定义指定字符串,但可使用*作通配符。示例: *.hello.com、 www.world.*

regular expression:         #被指定的正则表达式模式匹配到的字符串,要使用~开头,例如: ~.*\.hello\.com

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

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

相关文章

FPGA时序约束

目录 一、概述二、时序分析基本概念时钟抖动时钟偏差时钟不确定性Clock Uncertainty同步电路和异步电路建立时间和保持时间发起沿和采样沿关键路径 三、时序分析的基本公式时序分析的基本路径数据到达时间和时钟到达时间建立时间的裕量&#xff08;Setup slack&#xff09;保持…

STM32CubeMX 配置串口通信 HAL库

一、STM32CubeMX 配置串口 每个外设生成独立的 ’.c/.h’ 文件 不勾&#xff1a;所有初始化代码都生成在 main.c 勾选&#xff1a;初始化代码生成在对应的外设文件。 如 GPIO 初始化代码生成在 gpio.c 中。 二、重写fputc函数 ​ #include <stdio.h>#ifdef __GNUC__#def…

“LOCAL_LISTENER”参数导致业务无法连接数据库,文末附Oracle连接故障检查监听的排查流程

1. 背景及问题 今天在Oracle BCV技术[1]做数据同步&#xff0c;建立生产库的测试库&#xff0c;需要DBA配合同步前后的停库和起库。在同步完起库后&#xff0c;有部门反应同步好的测试库连接不上去。 2. 问题排查 以我当前的知识储备&#xff0c;能想到的可能就是以下几点进…

【NLP】注意力机制:规则、作用、原理、实现方式

文章目录 1、本章目标2、注意力机制介绍2.1、注意力概念2.2、注意力机制2.3、翻译举例 3、注意力计算规则3.1、打个比喻3.2、公式3.2.1、线性变换 点积注意力3.2.2、加性注意力3.2.3、点积注意力3.2.4、对比与总结3.2.5、bmm运算 4、注意力机制的作用5、注意力机制原理⭐5.1、…

基于java的美食信息推荐系统的设计与实现论文

摘 要 使用旧方法对美食信息推荐系统的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在美食信息推荐系统的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。这次开发的美…

Linux系统-vi/vim编辑器权限管理文档处理三剑客

1.vi/vim文本编辑器 vim是vi的增强版&#xff0c;vi是系统自带的。以下命令在vi/vim中通用&#xff1a; 刚打开的默认模式 快捷键&#xff1a;gg 跳到文件开头&#xff0c;G 跳到文件最后一行。 快捷键&#xff1a;0 跳到行首&#xff0c;$ 跳到行尾。 快捷键&#xff1a;…

C++ | Leetcode C++题解之第355题设计推特

题目&#xff1a; 题解&#xff1a; class Twitter {struct Node {// 哈希表存储关注人的 Idunordered_set<int> followee;// 用链表存储 tweetIdlist<int> tweet;};// getNewsFeed 检索的推文的上限以及 tweetId 的时间戳int recentMax, time;// tweetId 对应发送…

vue3--定时任务cron表达式组件比较

## 背景&#xff1a; 之前使用vue2开发项目时&#xff0c;使用了cron组件&#xff0c;比较了两种组件的使用效果。现在需要把原有的vue2项目升级为vue3&#xff0c;需要对应的cron组件。 方案一&#xff0c;vue3-cron-plus 具体实现&#xff1a; 安装插件 npm install vue3-…

浅谈shell中的while true

目录 shell实现死循环你了解while true中的true吗重新认识true和falsewhile true存在的问题实现shell死循环的另一种方法 在shell中实现死循环&#xff0c;一般都会用 while true&#xff0c;那你知道执行while true时&#xff0c;进程都在做些什么吗&#xff1f; shell实现死…

云计算实训32——安装nginx(修改端口为8080)、roles基本用法、使用剧本安装nginx、使用roles实现lnmp

一、安装nginx并更改其端口 编辑hosts配置文件 [rootmo ~]# vim /etc/ansible/hosts 创建目录 [rootmo ~]# mkdir /etc/ansible/playbook 编辑配置文件 [rootmo ~]# vim /etc/ansible/playbook/nginx.yml 执行测试 [rootmo ~]# ansible-playbook /etc/ansible/playbook/n…

【案例49】ORA-01000:超出打开游标的最大数

问题现象 在登录系统时提示报错&#xff1a;ORA-01000 超出打开游标的最大数。 问题分析 游标就是看成是指向结果集的指针。可以把它看成一种资源&#xff0c;或者一种数据结构。 ORA-01000是开发中常见的异常。这个异常表示程序中打开的游标数目> 数据库中设定的可以打开…

OpenCV几何图像变换(2)计算仿射变换矩阵的函数getAffineTransform()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算三对对应点之间的仿射变换。 该函数计算 23 的仿射变换矩阵&#xff0c;使得&#xff1a; [ x i ′ y i ′ ] map_matrix ⋅ [ x i y i 1 …

Datawhale AI 平台 证书 存个档

&#xff01;证书不怕多 &#x1f508; 大模型开发 工程师 欢迎参与 Datawhale 大模型开发 工程师 计划 联合浪潮信息 面向在校学生、社会在职人士 可获官方颁发的 大模型开发工程师 证书 认证地址&#xff1a;大模型开发工程师考试入口&#xff08;电脑端打开&#xff09;评…

C++笔记---类和对象(下)

1. 初始化列表 1.1 初始化列表的使用 在构造函数中&#xff0c;对成员变量进行初始化可以说是公式化的步骤&#xff0c;而初始化列表就将这一步骤进行了标准化。 初始化列表紧跟在构造函数的参数列表后面&#xff0c;使用方式是以一个冒号开始&#xff0c;接着是一个以逗号分…

今日总结:解决了三个小问题

问题01 1.在Bootstrap5中&#xff0c;offcanvas失去焦点后会自动回到顶端&#xff0c;用了一个非常简单的方法&#xff0c;将触发侧边栏的按钮代码由 <button type"button">换成 <a type"button">更多解决方法详见&#xff1a;更多方法 注…

杰发科技AC7801——GPIO通过寄存器地址控制高低电平

通过这个寄存器来查看控制的是哪个ODR值&#xff0c;使用sample&#xff0c;发现是0x20080068的第7和第9位 使用51控制寄存器的代码来置高置低代码&#xff0c;注意变量需要用unsigned int来声明 unsigned int ledBit 0;mdelay(100);ledBit | (1 << 9); ledBit & ~…

【第五节】Win32汇编程序设计

目录 一、汇编的第一个“helloworld” 二、汇编中的标号 三、的使用 四、数据定义 五、全局变量 六、局部变量 七、结构体 八、结构体的访问 九、获取变量地址 十、函数 十一、分支与循环 十二、内联汇编 十三、裸函数的使用 一、汇编的第一个“helloworld” .38…

从桌面到云端,2024年智能录屏解决方案全攻略

从教学演示到游戏直播&#xff0c;从软件教程到会议记录&#xff0c;录屏软件已经逐渐成为不可或缺的工具。那么面对这众多录屏软件我们要怎么选择呢&#xff1f;有没有和win10录屏快捷键一样可以快捷操控的工具呢&#xff1f;这次我们一起来探讨吧。 1.福昕录屏大师 链接&am…

Windows下线程的创建与使用(win32-API)

一、前言 线程是比进程更轻量级的执行单元&#xff0c;允许在一个进程中并发执行多个控制流。每一个线程都有自己的程序计数器、寄存器集和栈空间&#xff0c;但它们共享所属进程的全局数据和资源。这种共享内存模型使线程间的通信比进程间通信更为高效&#xff0c;同时也带来…

2-71 基于matlab的小波分析在心电信号去噪中的应用

基于matlab的小波分析在心电信号去噪中的应用&#xff0c;主要针对心电信号中的肌电干扰/基线漂移/工频干扰进行的算法研究&#xff0c;输出了三类去噪结果。程序已调通&#xff0c;可直接运行。 2-71 基线漂移去噪 工频干扰去噪 - 小红书 (xiaohongshu.com)