五、Nginx配置文件-server模块

目录

一、概述

二、虚拟主机设置的三种形式

1、基于端口号配置

2、基于域名配置

3、基于ip配置

三、常用参数

1、listen

 2、server_name

3、location

3.1、常见的Nginx正则表达式

3.2、location正则:

3.3示例

4、root

5、index

6、error_page

7、deny 和 allow


一、概述

        虚拟主机,就是把一台物理服务器划分成多个 “虚拟” 的服务器,这样我们的一台物理服务器就可以当做多个服务器来使用,从而可以配置多个网站。Nginx 提供虚拟主机的功能,就是为了让我们不需要安装多个 Nginx,就可以运行多个域名不同的网站。或者虚拟主机技术是将一台服务器的某项或者全部服务内容逻辑划分为多个服务单位,对外表现为多个服务器,从而充分利用服务器硬件资源。

        Nginx 下,一个 server 标签就是一个虚拟主机。nginx 的虚拟主机就是通过 nginx.conf 中 server 节点指定的,想要设置多个虚拟主机,配置多个server节点即可。

        此server块是位于http块下的。

二、虚拟主机设置的三种形式

        为了方便测试,我们现在html目录下,新建两个html文件

[root@localhost html]# vim test1.html
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
        <style>
            html { color-scheme: light dark; }
            body { width: 39em; margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif; }
        </style>
    </head>
    <body>
        <h1>大家好,我是繁华依在,欢迎关注我的博客</h1>
    </body>
</html>

[root@localhost html]# vim test2.html
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
        <style>
            html { color-scheme: light dark; }
            body { width: 39em; margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif; }
        </style>
    </head>
    <body>
        <h1>>Hello everyone, I am Fanhua Yizai. Welcome to follow my blog!</h1>
    </body>
</html>

1、基于端口号配置

        基于端口的虚拟主机配置,使用端口来区分;浏览器使用同一个域名 + 端口 或 同一个ip地址 + 端口访问;

配置如下:

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  test1.html;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }


    server {
        listen       81;
        server_name  localhost;

        location / {
            root   html;
            index  test2.html;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

此时,浏览器中访问

http://192.168.153.128:80

http://192.168.153.128:81/

2、基于域名配置

        基于域名的虚拟主机是最常见的一种虚拟主机.

        在 :C:\Windows\System32\drivers\etc中在添加一个映射,如果文件修改不了,需要给文件权限,再此不做讲解。

然后修改配置文件

    server {
        listen       80;
        server_name  test1.cn;

        location / {
            root   html;
            index  test1.html;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }


    server {
        listen       81;
        server_name  test2.cn;

        location / {
            root   html;
            index  test2.html;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
保存,重启下nginx

浏览器访问: http://test1.cn/

浏览器访问:http://test2.cn/

 

3、基于ip配置

        基于IP的再此不做详解,因为很少用。

三、常用参数

1、listen


 server {
    #用于指定虚拟主机的服务端口
    listen 80;
示例:
listen 127.0.0.1:8000; # listen localhost:8000 监听指定的IP和端口
listen 127.0.0.1;    #监听指定IP的所有端口
listen 8000;    #监听指定端口
listen *:8000;    #监听指定端口上的连接    
         

 2、server_name

  server {
    #用于指定虚拟主机的服务端口
    listen 80;
    #用来指定IP地址或者域名,多个域名之间用空格分 开
    server_name localhost;
    
关于server_name的配置方式有三种,分别是:
1、精确匹配
    如:server_name  test1.cn;
2、通配符匹配
    server_name中支持通配符"*",但需要注意的是通配符不能出现在域名的中间,只能出现在首段或尾段。
    如:server_name  *1.cn tes1.*;
3、正则表达式匹配
    server_name中可以使用正则表达式,并且使用~作为正则表达式字符串的开始标记。
    正则表达式的相关文档后续会单独出一篇。再此不做讲解
    如:server_name ~^www\.(\w)+\.cn$;

3、location

location 
#:用来设置请求的URI 匹配访问路径的,默认匹配斜杠/开头的请求,当访问路径中有斜杠/,会被该location匹配到并进行处理
#http://192.168.153.128:80/
# uri变量是待匹配的请求字符串,可以不包含正则表达式,也可以包含正则表达式,那么nginx服务器在搜索匹配location的时候,是先使用不包含正则表达式进行匹配,找到一个匹配度最高的一个,然后在通过包含正则表达式的进行匹配,如果能匹配到直接访问,匹配不到,就使用刚才匹配度最高的那个location来处理请求。
    server{
        listen 80;
        server_name localhost;
        location / {
        
        }
        location /abc{
        
        }
        ...
    }
# 属性介绍
#1、不带符号,要求必须以指定模式开始。
    server {
        listen 80;
        server_name www.test1.cn;
        location /abc{
            default_type text/plain;
            return 200 "access success";
        }
     }
# 以下访问都是正确的,只要以abc开头的请求都是正确的。
http://192.168.153.128/abc
http://192.168.153.128/abc?p1=TOM
http://192.168.153.128/abc/
http://192.168.153.128/abcdef

# 2、= 用于不包含正则表达式 uri前,必须与指定的模式精确匹配。

    server {
        listen 80;
        server_name www.test1.cn;
        location =/abc{
            default_type text/plain;
            return 200 "access success";
        }
     }
可以匹配到
http://192.168.200.133/abc
http://192.168.200.133/abc?p1=TOM
匹配不到
http://192.168.200.133/abc/
http://192.168.200.133/abcdef

#3、~:表示当前uri中包含了正则表达式,并且区分大小写。
#4、~*:表示当前uri中包含了正则表达式,并且不区分大小写。
换句话说,如果uri包含了正则表达式,需要用上述两个符号来标识。  
    server {
        listen 80;
        server_name 127.0.0.1;
        location ~^/abc/\w${
            default_type text/plain;
            return 200 "access_success";
        }
    }
    server {
        listen 80;
        server_name 127.0.0.1;
        location ~*^/abc/\w${
            default_type text/plain;
            return 200 "access_success";
        }
    }
# ^/abc/\w$: 这是正则表达式的内容。
# ^: 表示字符串的开始。
# /abc/: 匹配字面字符串 "/abc/"。
# \w: 匹配任何单字字符,等同于 [a-zA-Z0-9_]。
# $: 表示字符串的结束。因此,这个正则表达式将匹配 URI 路径以 "/abc/" 开始,后面紧接着一个单字字符,并且字符串在这里结束的请求。例如,它将匹配 "/abc/a" 但不会匹配 "/abc/abc" 或 "/abc/"。 

#5、^~ 用于不包含正则表达式的uri前,功能和不加符号的一致,唯一不同的是,如果模式匹配,那么就停止搜索其他模式了。  
                                               

3.1、常见的Nginx正则表达式

^ :匹配输入字符串的起始位置
$ :匹配输入字符串的结束位置
* :匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”
+ :匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o”
? :匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}”
. :匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式
\ :将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“\$”则匹配“$”
\d :匹配纯数字
{n} :重复 n 次
{n,} :重复 n 次或更多次
{n,m} :重复 n 到 m 次
[] :定义匹配的字符范围
[c] :匹配单个字符 c
[a-z] :匹配 a-z 小写字母的任意一个
[a-zA-Z0-9] :匹配所有大小写字母或数字
() :表达式的开始和结束位置
| :或运算符  //例(js|img|css)

3.2、location正则:

//location大致可以分为三类
精准匹配:location = /{}
一般匹配:location /{}
正则匹配:location ~/{}
//location常用的匹配规则:
= :进行普通字符精确匹配,也就是完全匹配。
^~ :表示前缀字符串匹配(不是正则匹配,需要使用字符串),如果匹配成功,则不再匹配其它 location。
~ :区分大小写的匹配(需要使用正则表达式)。
~* :不区分大小写的匹配(需要使用正则表达式)。
!~ :区分大小写的匹配取非(需要使用正则表达式)。
!~* :不区分大小写的匹配取非(需要使用正则表达式)。
//优先级
首先精确匹配 =
其次前缀匹配 ^~
其次是按文件中顺序的正则匹配 ~或~*
然后匹配不带任何修饰的前缀匹配
最后是交给 / 通用匹配

注意:
精确匹配: = , 后面的表达式中写的是纯字符串
字符串匹配: ^~ 和 无符号匹配 , 后面的表达式中写的是纯字符串
正则匹配: ~ 和 ~* 和 !~ 和 !~* , 后面的表达式中写的是正则表达式

3.3示例

 (1)location = / {}
=为精确匹配 / ,主机名后面不能带任何字符串,比如访问 / 和 /data,则 / 匹配,/data 不匹配
再比如 location = /abc,则只匹配/abc ,/abc/或 /abcd不匹配。若 location  /abc,则即匹配/abc 、/abcd/ 同时也匹配 /abc/。

(2)location / {}
因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求 比如访问 / 和 /data, 则 / 匹配, /data 也匹配,
但若后面是正则表达式会和最长字符串优先匹配(最长匹配)

(3)location /documents/ {}
匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索其它 location
只有其它 location后面的正则表达式没有匹配到时,才会采用这一条

(4)location /documents/abc {}
匹配任何以 /documents/abc 开头的地址,匹配符合以后,还要继续往下搜索其它 location
只有其它 location后面的正则表达式没有匹配到时,才会采用这一条

(5)location ^~ /images/ {}
匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条

(6)location ~* \.(gif|jpg|jpeg)$ {}
匹配所有以 gif、jpg或jpeg 结尾的请求
然而,所有请求 /images/ 下的图片会被 location ^~ /images/ 处理,因为 ^~ 的优先级更高,所以到达不了这一条正则

(7)location /images/abc {}
最长字符匹配到 /images/abc,优先级最低,继续往下搜索其它 location,会发现 ^~ 和 ~ 存在

(8)location ~ /images/abc {}
匹配以/images/abc 开头的,优先级次之,只有去掉 location ^~ /images/ 才会采用这一条

(9)location /images/abc/1.html {}
匹配/images/abc/1.html 文件,如果和正则 ~ /images/abc/1.html 相比,正则优先级更高

优先级总结:
(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (location /)

4、root

        用于配置服务器的默认网站根目录位置,默认为nginx安装主目录下的html目录。此项位于location块中。

#语法:
    location / {
        root path;                        
    }
#默认值:root html;
#位置:http、server、location
path: 为Nginx服务器接收到请求以后查找资源的根目录路径。
alias :用来更改location的URI
注意:如果location路径是以/结尾,则alias也必须是以/结尾
这俩的区别不在解释。可以自己查下

5、index

:用于设置网站的默认首页,此项位于location块中。

#语法:
    index file …;
#默认值:index index.html;
#位置:http、server、location    
    location / {
         root   html;
         index  test2.html test1.html;                     
    } 
index后面可以跟多个设置,如果访问的时候没有指定具体访问的资源,则会依次进行查找,找到第一个为止。
访问该location的时候,可以通过 http://ip:port/,地址后面如果不添加任何内容,则默认依次访问index.html和index.htm,找到第一个来进行返回

6、error_page

设置网站的错误页面

#语法:
    error_page code … [=[response]] uri;
#位置:http、server、location…    
#在默认情况下,Nginx会在主目录的html目录中查找指定的返回页面,特别需要注意的是,这些错误信息的返回页面大小一定要超过512K,否者会被ie浏览器替换为ie默认的错误页面。

1、可以指定具体跳转的地址
    server {
        listen 80;
        server_name location;
        location /abc{
            default_type text/plain;
            return 200 "access success";
        }
        error_page 403 404  https://www.baidu.com/; 
     }
当访问的资源不存在时,例如:192.168.153.128/qwe,就回跳转到404,然后在跳转到百度界面

2、可以指定重定向地址

    server {
        listen 80;
        server_name location;
        location /abc{
            default_type text/plain;
            return 200 "access success";
        }
        error_page 500 502 503 504 /50x.html; #配置50x错误页面
        #精确匹配
      location = /50x.html {
        root html;
      }
     }
3、使用location的@符号完成错误信息展示  
    server {
        listen 80;
        server_name location;
        location /abc{
            default_type text/plain;
            return 200 "access success";
        }
        error_page 500 502 503 504 /50x.html; #配置50x错误页面
        error_page 404 @error; 
        location @error{
            default_type text/plain;
            return 404 "error";
        }
        #精确匹配
       location = /50x.html {
        root html;
       }
     }

7、deny 和 allow

此项位于location块中

      #拒绝的ip
      deny 127.0.0.1;
      #允许的ip
      allow 172.18.5.54;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

长亭培训加复习安全产品类别

下面这个很重要参加hw时要问你用的安全产品就有这个 检测类型产品 偏审计 安全防御类型 EDR类似于杀毒软件 安全评估 任何东西都要经过这个机械勘察才能上线 安全管理平台 比较杂 比较集成 审计 漏扫 评估 合在这一个平台 也有可能只是管理 主机理解为一个电脑 安了终端插件…

LLM资料大全:文本多模态大模型、垂直领域微调模型、STF数据集、训练微调部署框架、提示词工程等

前言 自ChatGPT为代表的大语言模型&#xff08;Large Language Model, LLM&#xff09;出现以后&#xff0c;由于其惊人的类通用人工智能&#xff08;AGI&#xff09;的能力&#xff0c;掀起了新一轮[自然语言处理]领域的研究和应用的浪潮。尤其是以ChatGLM、LLaMA等平民玩家都…

SM5101 SOP-8 充电+触摸+发执丝控制多合一IC触摸打火机专用IC

SM5101 SOP-8 2.7V 涓流充电 具电池过充过放 触摸控制 发热丝电流控制多功能为一体专用芯片 昱灿-海川 SM5101 SOP-8 充电触摸发执丝控制多合一IC触摸打火机方案 &#xff01;&#xff01;&#xff01; 简介&#xff1a; SM5101是一款针对电子点烟器的专用芯片&#xff0c;具…

阻塞IO、非阻塞IO、IO复用的区别 ?(非常详细)零基础入门到精通,收藏这一篇就够了

前言 在《Unix网络编程》一书中提到了五种IO模型&#xff0c;分别是&#xff1a;阻塞IO、非阻塞IO、IO复用、信号驱动IO以及异步IO。本篇文章主要介绍IO的基本概念以及阻塞IO、非阻塞IO、IO复用三种模型&#xff0c;供大家参考学习。 一、什么是IO 计算机视角理解IO: 对于计…

苹果电脑装虚拟机和双系统的区别 苹果笔记本虚拟机和双系统哪个好 虚拟机能装MacOS吗 虚拟机类似的软件

Mac电脑用户在需要使用Windows操作系统的软件时&#xff0c;通常会面临两个选择&#xff1a;安装双系统或使用虚拟机。两种方式各有优缺点&#xff0c;适用于不同的使用场景。本文将详细分析和说明Mac电脑装双系统和虚拟机之间的区别&#xff0c;帮助用户选择最适合自己的方案。…

UnityAPI学习之协程原理与作用

协程的原理与作用 Unity 协程(Coroutine)原理与用法详解_unity coroutine-CSDN博客 using System.Collections; using System.Collections.Generic; using UnityEngine;public class NO14_coroutine : MonoBehaviour {Animator animator;// Start is called before the first…

Qt MaintenanceTool.exe使用镜像源更新Qt

环境&#xff1a;Windows11&#xff0c;Qt6.5&#xff0c;新版的MaintenanceTool.exe linux环境类似&#xff0c;mac环境可以看官方文档。 cmd命令窗口&#xff1a;切换到MaintenanceTool.exe所在目录&#xff0c;可以用“D:”切换到D盘&#xff0c;“cd xxxx”切换到xxxx目录…

护眼台灯哪个品牌更好?五款市面主流的护眼台灯款式分享

近年来&#xff0c;护眼台灯的研发和创新不断推进&#xff0c;一些台灯配备了智能化功能&#xff0c;如定时开关机、自动调节光线等&#xff0c;使孩子们能够更好地控制用眼时间和光线环境。护眼台灯哪个品牌更好&#xff1f;一些高端的护眼台灯还采用了纳米光滤镜技术&#xf…

深度学习实战P10车牌识别

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊](https://mtyjkh.blog.csdn.net/)** 引言 学习目标 一、前期准备 1.设置GPU …

强化RAG:微调Embedding还是LLM?

为什么我们需要微调&#xff1f; 微调有利于提高模型的效率和有效性。它可以减少训练时间和成本&#xff0c;因为它不需要从头开始。此外&#xff0c;微调可以通过利用预训练模型的功能和知识来提高性能和准确性。它还提供对原本无法访问的任务和领域的访问&#xff0c;因为它…

​​Vitis HLS 学习笔记--添加 RTL 黑盒函数

目录 1. 简介 2. 用法详解 2.1 需要的文件 2.1.1 RTL 函数签名 2.1.2 黑盒 JSON 描述文件 2.1.3 RTL IP 文件 2.2 操作步骤 3. 总结 1. 简介 Vitis HLS 工具可以将现有的 Verilog RTL IP&#xff08;即硬件描述语言编写的模块&#xff09;集成到 C/C HLS 项目中。通过…

短剧分销小程序:影视产业链中的新兴力量

一、引言 在数字化浪潮的推动下&#xff0c;影视产业正迎来一场深刻的变革。短剧分销小程序作为这场变革中的新兴力量&#xff0c;正以其独特的魅力和价值&#xff0c;逐渐在影视产业链中崭露头角。本文将探讨短剧分销小程序在影视产业链中的新兴地位、其带来的变革以及未来的…

Transformer系列:图文详解Decoder解码器原理

从本节开始本系列将对Transformer的Decoder解码器进行深入分析。 内容摘要 Encoder-Decoder框架简介shifted right移位训练解码器的并行训练和串行预测解码器自注意力层和掩码解码器交互注意力层和掩码解码器输出和损失函数 Encoder-Decoder框架简介 在原论文中Transformer用…

LeetCode-2779. 数组的最大美丽值【数组 二分查找 排序 滑动窗口】

LeetCode-2779. 数组的最大美丽值【数组 二分查找 排序 滑动窗口】 题目描述&#xff1a;解题思路一&#xff1a;滑动窗口与排序解题思路二&#xff1a;0解题思路三&#xff1a;0 题目描述&#xff1a; 给你一个下标从 0 开始的整数数组 nums 和一个 非负 整数 k 。 在一步操…

【嵌入式】一种优雅的 bootloader 跳转APP 的方式

【嵌入式】一种优雅的 bootloader 跳转APP 的方式 0. 个人简介 && 授权须知1. 前言2. 干净的跳转3.程序的 noinit 段4. 利用noinit段实现优雅的跳转4.1 检查栈顶地址是否合法4.2 栈顶地址 44.3 __set_MSP 5.OTA 过后的运行逻辑 0. 个人简介 && 授权须知 &#…

MongoDB 多层级查询

多层级查询 注意&#xff1a;要注意代码顺序 查询层级数据代码放前面&#xff0c;查询条件放后面 if (StringUtils.isBlank(params.getDocType())) {params.setDocType(DOC_TDCTYPE);}String docName mapper.findByDocInfo(params.getDocType());List<ExpertApprovalOpin…

怎么把Rmvb改成mp4格式?把rmvb改成MP4格式的四种方法

怎么把Rmvb改成mp4格式&#xff1f;在当今的数字时代&#xff0c;视频文件格式的多样性给我们带来了巨大的便利&#xff0c;但也可能带来一些兼容性的问题。rmvb是一种曾经非常流行的视频文件格式&#xff0c;主要由于其较高的压缩效率和相对不错的画质。然而&#xff0c;随着技…

计算机组成原理学习 Part 1

计算机系统 组成 计算机系统 { 硬件 计算机的实体&#xff0c;如主机、外设等 软件 由具有各类特殊功能的信息&#xff08;程序&#xff09;组成 计算机系统 \begin{cases} 硬件 &\text 计算机的实体&#xff0c;如主机、外设等\\ 软件 &\text 由具有各类特殊功能的信…

把Vue项目从Window系统迁移到Mac系统的方案

不能启动vue ui 直接运行&#xff0c;会报错如下&#xff1a; failed to load config from /Users/xiaochen/IdeaProjects/ChatViewer-frontend/vite.config.tserror when starting dev server: Error: You installed esbuild for another platform than the one youre curre…

宝藏速成秘籍(6)归并排序法

一、前言 1.1、概念 归并排序&#xff08;Merge Sort&#xff09;是一种基于分治思想的排序算法。它将数组分成两个子数组&#xff0c;分别对这两个子数组进行排序&#xff0c;然后再将它们合并成一个有序的数组。归并排序是一种经典的分治算法&#xff0c;它的核心思想是将待…