五、Nginx配置文件-server模块

news2024/11/29 22:47:42

目录

一、概述

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

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;

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

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

相关文章

C#——结构体详情

结构体 结构体也被称为结构类型&#xff08;“structure type”或“struct type”&#xff09;&#xff0c;它是一种可封装数据和相关功能的值类型&#xff0c;在语法上结构体与类&#xff08;class&#xff09;非常相似&#xff0c;它们都可以用来封装数据&#xff0c;并且都…

笔记本电脑安装属于自己的Llama 3 8B大模型和对话客户端

选择 Llama 3 模型版本&#xff08;8B&#xff0c;80 亿参数&#xff09; 特别注意&#xff1a; Meta 虽然开源了 Llama 3 大模型&#xff0c;但是每个版本都有 Meta 的许可协议&#xff0c;建议大家在接受使用这些模型所需的条款之前仔细阅读。 Llama 3 模型版本有几个&…

德克萨斯大学奥斯汀分校自然语言处理硕士课程汉化版(第八周) - 现代大语言模型

现代大语言模型 1. GPT-32. 上下文学习 2.1. 零样本提示2.2. 少样本提示2.3. 归纳头 3. 对齐 3.1. 指令微调3.2. 基于人类反馈的强化学习3.3. 事实与幻觉 1. GPT-3 GPT系列论文 GPT-1(2018): Improving Language Understanding by Generative Pre-TrainingGPT-2(2019): Lang…

missing authentication credentials for REST request

1、报错截图 2、解决办法 将elasticsearch的elasticsearch.yml的 xpack.security.enabled: true 改为 xpack.security.enabled: false

字节智能体平台:扣子原理和实践案例

完整内容&#xff1a; 字节智能体平台&#xff1a;扣子原理和实践案例

JAVA小知识20:万字详解List与ArrayList

一、集合简介 1.1、什么是集合&#xff1f; 可同时存储多个元素的数据结构就是集合。 1.2、为什么要有集合&#xff1f; 我们可以使用数组同时存储多个元素&#xff0c;但是数组有个弊端。数组创建之后长度就会固定&#xff0c;如需扩容则需要手动扩容&#xff0c;我们需要…

MEGALODON:突破传统,实现高效无限上下文长度的大规模语言模型预训练和推理

在人工智能领域&#xff0c;尤其是在自然语言处理&#xff08;NLP&#xff09;中&#xff0c;大模型&#xff08;LLMs&#xff09;的预训练和推理效率一直是研究的热点。最近&#xff0c;一项突破性的研究提出了一种新型神经网络架构——MEGALODON&#xff0c;旨在解决传统Tran…

2024年武汉市中级、高级职称水测考试开卷方法分享

2024年武汉市&#xff08;除开东湖高新区外&#xff09;职称首次组织全员水测&#xff0c;先考水测后报名&#xff0c;水测报名在5月16号截止。 武汉市水测组织形式&#xff1a; 武汉市2024年专业技术职务水平能力测试分为笔试和面试&#xff0c;面试答辩有关事项另行通知&…

全息图分类及相位型全息图制作方法

全息图是一种光学器件&#xff0c;全息图分为振幅型和相位型全息图&#xff0c;振幅型全息图记录光的振幅信息即强度信息&#xff0c;相位型全息图记录光的相位信息&#xff0c;利用相位信息可以恢复光的波前形状&#xff0c;从而记录物体形状&#xff0c;这里主要介绍相位全息…

C# Winform 用户控件,扩展控件,自定义控件综合实例

Control类是Windows窗体控件的基类&#xff0c;它提供了在 Windows 窗体应用程序中进行可视显示所需的基础结构&#xff0c;可以通过继承来扩展熟悉的用户控件和现有控件的功能。本列介绍三种不同自定义控件以及怎么创建他们。 自定义控件分类 用户控件&#xff1a;基本控件的…

django学习入门系列之第二点《浏览器能识别的标签1》

文章目录 文件的编码(head)网站表头信息(head)标题&#xff08;body&#xff09;div和span往期回顾 文件的编码(head) <!--浏览器会以"UTF-8"这种编码来读取文件--> <meta charset"UTF-8">网站表头信息(head) <title>Title</title&…

React Native将 ipad 端软件设置为横屏显示后关闭 Modal 弹窗报错

问题&#xff1a; 将 ipad 端软件设置为横屏显示后&#xff0c;关闭 Modal 弹窗报错。 Modal was presented with 0x2 orientations mask but the application only supports 0x18.Add more interface orientations to your apps Info.plist to fix this.NOTE: This will cras…

移动端超超超详细知识点总结(Part3)

flex布局体验 1. 传统布局与flex布局 传统布局&#xff1a; 兼容性好布局繁琐局限性&#xff0c;不能再移动端很好的布局flex 弹性布局&#xff1a; 操作方便&#xff0c;布局极为简单&#xff0c;移动端应用很广泛PC 端浏览器支持情况较差IE 11或更低版本&#xff0c;不支持…

代码随想录算法训练营第39天(py)| 动态规划 | 62.不同路径、 63. 不同路径 II

62.不同路径 力扣链接 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路…

ShardingSphere-proxy添加自定义分片规则(踩坑日记)

文章目录 一、新建spring boot项目二、编写代码(1) 新建一个类(2) doSharding方法详解(3) 实际例子 三、增加spi文件&#xff08;很关键&#xff09;四、打包五、把生成的文件放到ext-lib中六、yaml配置&#xff08;怎么用&#xff09;七、测试 版本环境 mysql 5.7.40 sharding…

使用 Python 进行测试(1)测试基础

原文 总结 我们将从unittest开始&#xff0c;尽管它并不那么好用&#xff0c;但它是Python标准库中的测试工具。 使用unittest编写测试看起来像这样&#xff1a; import unittest# 需要测试的代码 def add(a, b):return a b# The tests class TestAddFunction(unittest.Test…

MySQL之优化服务器设置(三)

优化服务器设置 InnoDB表空间 InnoDB把数据保存在表空间内&#xff0c;本质上是一个由一个或多个磁盘文件组成的虚拟文件系统。InnoDB用表空间实现很多功能&#xff0c;并不只是存储表和索引。它还保存了回滚日志(旧版本行)、插入缓冲(Insert Buffer)、双写缓冲(Doublewrite …

大模型企业落地:制造业可以选择的应用场景

前言 在当今制造业快速发展的背景下&#xff0c;设备稳定运行对于企业的发展至关重要。然而&#xff0c;传统的设备维修模式已无法满足现代企业的需求。为此&#xff0c;引入智能化、数字化的设备维修解决方案成为必然趋势。本文将探讨如何利用大模型技术&#xff0c;构建企业…

《2023-2024中国数据资产发展研究报告》

中国电子信息产业发展研究院发布《2023-2024中国数据资产发展研究报告》&#xff08;下称《报告》&#xff09;&#xff0c;紧跟国家战略部署&#xff0c;调研国内数据资产发展现状&#xff0c;掌握数据价值实现路径&#xff0c;助力释放数字经济新动能。 《报告》从数据资产相…

北京活动会议通常会邀约哪些媒体参会报道?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 北京作为我国的首都和文化中心&#xff0c;各类活动会议资源丰富&#xff0c;吸引了众多媒体的关注。以下是一些通常会被邀约参会报道的重要媒体类型&#xff1a; 国家级新闻机构&#x…