安装Tiny Core Linux 和 部署nginx

TinyCoreLinux

简介

Tiny Core Linux (官网)是一个轻量级的Linux发行版,它以其小巧、灵活和高度定制化的特点而著称。

用最小的资源做最多的事:Tiny Core Linux软件管理技巧指南

安装系统到硬盘 · 操作系统 · 看云

Linux系统TinyCore的安装和使用-博客园

Tiny core Linux 的安装使用与网络配置-优快云博客

安装

网易镜像: http://mirrors.163.com/tinycorelinux/

Tiny Core Linux Installation

TinyCore Linux 安装和配置

下载

登录 Tiny Core Linux 下载页面 网站,

在这里插入图片描述

  • Core: 仅提供命令行界面的基本系统,因此仅建议有经验的用户使用。提供了命令行工具,以便可以添加扩展以创建具有图形桌面环境的系统。非常适合服务器、设备和自定义桌面。
  • TinyCore: 是具有有线网络连接的新用户的推荐选项。它包括基本的核心系统以及用于动态FLTK / FLWM图形桌面环境的X / GUI扩展。
  • CorePlus: 是安装映像,而不是发行版。建议只能访问无线网络或使用非美式键盘布局的新用户使用。它包括基本的核心系统和安装工具,为设置提供以下选项:7个窗口管理器的选择,通过许多固件文件和ndiswrapper的无线支持,非美国键盘支持和重新制作工具。

点击 Downloads, 下载TinyCore

安装

参考

安装使用TinyCore Linux的一些收获_PurpleEndurer@5lcto的技术博客_51CTO博客

Tiny core Linux 的安装使用与网络配置-优快云博客

配置

内存: 1G

CPU: 4

硬盘:2G

在这里插入图片描述

在这里插入图片描述

启动虚拟机

在这里插入图片描述

切换镜像源

在这里插入图片描述
在这里插入图片描述

打开 /opt/tcemirrors 编辑

在这里插入图片描述

将镜像源

http://repo.tinycorelinux.net

修改为网易镜像源

http://mirrors.163.com/tinycorelinux

在这里插入图片描述

返回保存退出,点击下面的Apps图标

在这里插入图片描述
在这里插入图片描述

点击 Yes 会自动更新镜像源

在这里插入图片描述

在这里插入图片描述

点击 OK 后,可以通过 UI 界面安装

在这里插入图片描述

在搜索框中输入 tc-install

在这里插入图片描述

  1. tc: 这是Tiny Core Linux的控制台命令,用于管理系统的各个方面。通过tc命令可以执行一些常见任务,如安装/卸载应用程序,配置网络,管理用户等。
  2. tce-loadtce-unload: 用于安装和卸载应用程序和扩展。可以通过tce-load命令从Tiny Core Linux的应用程序仓库中安装应用程序,而tce-unload命令用于卸载已安装的应用程序。
  3. sudo: 用于以管理员身份运行命令。在Tiny Core Linux中,默认情况下不会使用root用户来执行命令,而是使用sudo命令来提升权限。
  4. ifconfigiwconfig: 用于配置网络接口。ifconfig用于配置有线网络接口,而iwconfig用于配置无线网络接口。
  5. mountumount: 用于挂载和卸载文件系统。通过mount命令可以将外部存储设备挂载到Tiny Core Linux中,而umount命令用于卸载已挂载的设备。
  6. apt-getyum: 用于安装和管理软件包。尽管Tiny Core Linux没有内置的包管理器,但是可以通过安装特定的软件包管理工具,如apt-getyum,来进行软件包的管理和安装。
  7. iptables: 用于配置防火墙规则。通过iptables命令可以对网络流量进行过滤和控制,以增强系统的安全性。

安装 tc-install-GUI

在这里插入图片描述

等待安装完成

在这里插入图片描述

安装完成,如下图所示

在这里插入图片描述

点击上图的标记1,弹出下图所示界面,然后依次点击下图的 标记2、标记3、标记4 进行安装

在这里插入图片描述

点击 上图 标记4后

在这里插入图片描述

点击 下一步

在这里插入图片描述

继续 下一步

在这里插入图片描述

在这里插入图片描述

点击 Proceed

在这里插入图片描述

等待安装完成,最好是先关闭、卸载镜像后重启,如果没有重启可能会影响后面的设置。

设置

安装ssh

tce-load -wi openssh

在这里插入图片描述

进入 /usr/local/etc/ssh 文件夹

cd /usr/local/etc/ssh

复制 sshd_config.orig 文件并命名为 sshd_config

sudo cp sshd_config.ort sshd_config

在这里插入图片描述

设置密码和开启 ssh 远程 root 登录权限

TinyCoreLinux默认是没有设置 tcroot 账号的密码

输入 passwd 设置 tc 的密码

passwd  # 回车后输入两次密码

输入 sudo passwd root 设置 root 的密码

sudo passwd root # 回车后输入两次密码

开启 ssh远程 root 登录权限

sudo vi sshd_config
#PermitRootLogin prohibit-password # 修改为
PermitRootLogin yes

启动 ssh 服务

  • 启动 ssh 服务(可以先不做,后面会把启动ssh加入到启动任务中),直接测通过ssh工具进行链接使用
sudo /usr/local/etc/init.d/openssh start

在这里插入图片描述

  • 设置开机自动启动 ssh 服务

    在bootlocal.sh增加ssh的启动命令

    vi /opt/bootlocal.sh
    
    #!/bin/sh
    # put other system startup commands here
    sudo /usr/local/etc/init.d/openssh start
    

持久化

重启后上面的配置都会丢失,这是因为TinyCoreLinux是内存闪存系统,为保证系统的快速启动运行,所有数据都保存在内存中,所以当重启系统之后对系统的所有修改将被删除。因此需要指定一个tce目录,这样就会自动保存home和opt目录。默认情况下,关机的时候会调用backup utility保存你的文档和设置。backup utility会创建一个包含home和opt目录的压缩文档mydata.tgz。mydata.tgz保存在/tce目录,所以你只要你设定了tce目录,所有修改都将会自动保存。
关机前调用 backup utility.
另外:
/opt/.filetool.lst文件用户设定永久保存的文件或文件夹
/opt/bootlocal.sh文件用于系统启动后自动运行的命令

操作

编辑 /opt/.filefool.lst 文件

vim /opt/.filetool.lst

opt 和 home是文件中原有的,增加 /usr/local/etc/ssh/etc/passwd/etc/shadow.

opt
home
/usr/local/etc/ssh
/etc/passwd
/etc/shadow

调用 filetool.sh -b 将配置持久化,否则重启后配置就都丢失了。参考 tinycore5.3配置总结_tinycore ssh

filetool.sh -b

在这里插入图片描述

使用tce命令

输入

tce

在这里插入图片描述

进入 tce 工具命令行模式, 输入 s 进程搜索界面

在这里插入图片描述

输出要搜索关键字,如输入 php 后回车,列出 php 相关的 tcz 包

在这里插入图片描述

输入 q 退出当前操作

Nginx安装与配置

安装

tce-load -wi nginx

在这里插入图片描述

配置

参考链接 轻量化Tiny Core Linux硬盘安装nginx+php+mysql

cd /usr/local/etc/nginx/
sudo cp original/nginx.conf.default nginx.conf
sudo cp original/fastcgi_params.default fastcgi_params
sudo cp original/mime.types.default mime.types
 
sudo mkdir /usr/local/html
sudo cp /usr/local/lib/nginx/html/index.html /usr/local/html

配置好启动

sudo /usr/local/etc/init.d/nginx start

系统提示

在这里插入图片描述

服务启动失败,需要改动一下nginx.conf文件,将access_log日志文件关闭或重新设置路径。运行命令:

sudo vim /usr/local/etc/nginx/nginx.conf

在http段中,加入 access_log off;来关闭日志文件

在这里插入图片描述

修改完毕后,再次启动服务,应该就可以正常启动了。

sudo /usr/local/etc/init.d/nginx start

查看 虚拟机的 IP 地址

ifconfig

在这里插入图片描述

在浏览器中输入

http://192.168.1.87

在这里插入图片描述

可以看到nginx的欢迎网页,说明nginx已经正常工作了。

开机自动启动nginx服务

sudo vi /opt/bootlocal.sh

在这里插入图片描述

添加、保存

sudo /usr/local/etc/init.d/nginx start

持久化

持久化nginx的配置与网页:因为Tiny Core Linux是加载到内存运行的,如果我们不做其它配置,当你重启你的虚拟时后,你会发现所有的nginx配置文件与网页都不见了。在 /opt/.filetool.list 文件中,将需要持久化的文件或文件夹加入到该文件中,在关闭系统时,Tiny Core Linux会自动保存这些文件,下次启动时再加载。

echo "usr/local/etc/nginx/nginx.conf" >> /opt/.filetool.lst
echo "usr/local/etc/nginx/mime.types" >> /opt/.filetool.lst
echo "usr/local/etc/nginx/fastcgi_params" >> /opt/.filetool.lst
echo "usr/local/html" >> /opt/.filetool.lst

调用 filetool.sh -b 将配置持久化。

filetool.sh -b

数据持久化的问题

在上面的安装过程中,文件大都存放在 /home,/usr/local 等文件夹中,其实这些文件夹都是被 Tiny Core Linux 加载到内存中的,所以当文件不多的时候问题还不大,如果文件增加后,特别是网站文件与数据库文件容量增大后,就会大量占用内存,会造成内存不足而出现不同的问题。所以我们需要考虑将网站与数据库直接存放在硬盘而不是内存中。在Tiny Core Linux中,第一个硬盘会挂载到 /mnt/sda1 ,我们可以直接将网站与数据库的文件夹存放在这个下面,这样就不会占用内存空间了。

网站文件夹迁移到硬盘

sudo cp -r /usr/local/html /mnt/sda1
sudo chmod 777 /mnt/sda1/html
sudo rm -r /usr/local/html

修改 nginx.conf 文件,将网站主目录改到 /mnt/sda1/html

sudo vim /usr/local/etc/nginx/nginx.conf

在这里插入图片描述

/opt/.filetool.lst 文件中,去除原来用于持久化的 /usr/local/html 的内容:

sudo vi /opt/.filetool.lst

在这里插入图片描述

删除后,保存文件,如果不删除的话,重启服务器会提示错误信息。

如果是全新安装的话,可以在上面安装过程中,网页直接使用新的 /mnt/sda1/ 中的路径,这样就可以直接将数据放在硬盘,同时网站持久化中 echo “usr/local/html” >> /opt/.filetool.lst 的这一条命令也不再需要执行。

配置虚拟主机

本地域名配置-host文件

本文 host 文件配置如下, 将 host 文件 C:/Windows/System32/drivers/etc 文件夹下

#	127.0.0.1       localhost
#	::1             localhost
	
	192.168.1.87    wk.t15.cn
	192.168.1.87    dc.t15.cn
	192.168.1.87    www.t15.cn
	192.168.1.87    wiki.t15.cn
	192.168.1.87    vv.t15.cn
    192.168.1.87    re.t15.cn

网站文件夹迁移硬盘

TC 系统还原后, 网站 html 文件还在 /usr/local 目录下,参考 开机自动启动nginx服务 - 网站文件夹迁移到硬盘,本次操作和上述差异是将将多个网站都部署在 webs 文件夹下,所以从头做了一边 html 迁移,可以快速略过这部分内容。

为了后续操作方便以及创建的文件夹、文件是 root 权限,先将用户切换到 root 并进入到 /mnt/sda1 磁盘的文件夹

在这里插入图片描述

/mnt/sda1 磁盘的文件夹中创建一个 webs 文件夹用于存放所有网站的站点。

在这里插入图片描述

cp -r /usr/local/html /mnt/sda1/webs
chmod 777 /mnt/sda1/webs/html
rm -rf /usr/local/html

在这里插入图片描述

进入 /usr/local/etc/nginx/ 修改 nginx.conf 文件

cd /usr/local/etc/nginx/
vim nginx.conf

在这里插入图片描述

将网站主目录改到 /mnt/sda1/webs/html

在这里插入图片描述

执行持久化,重启

filetool.sh -b

在这里插入图片描述

重启后登录 192.168.1.87

在这里插入图片描述

看到网站,配置正常

配置基于域名的虚拟主机

不修改原有的站(依旧以原有的方式访问),配置增加两个站点,域名分别是

dc.t15.cn
wk.t15.cn

进入 /mnt/sda1/webs 文件夹下,将 html 复制 dc.t15.cnwk.t15.cn

在这里插入图片描述

修改 dc.t15.cn 文件下的 index.html 文件,内容如下

在这里插入图片描述

修改 wk.t15.cn 文件下的 index.html 文件,内容如下

在这里插入图片描述

修改 /usr/local/etc/nginx/nginx.conf 配置文件

vim /usr/local/etc/nginx/nginx.conf

注意,一定要在原有是 server {} 外加

    server {
        listen 80;
	server_name dc.t15.cn;

	location / {
         root /mnt/sda1/webs/dc.t15.cn;
	    index index.html index.htm;
	}
    error_page   500 502 503 504  /50x.html;
	location = /50x.html {
            root   html;
        }
    }
    server {
        listen 80;
	server_name wk.t15.cn;

	location / {
         root /mnt/sda1/webs/wk.t15.cn;
	    index index.html index.htm;
	}
    error_page   500 502 503 504  /50x.html;
	location = /50x.html {
            root   html;
        }
    }

执行持久化(需要退出 root 用户),重启

filetool.sh -b

在这里插入图片描述

访问的电脑 hosts 文件中添加 dc.t15.cnwk.t15.cn 域名的本地解析,参考 本地域名配置-host文件

192.168.1.87    dc.t15.cn
192.168.1.87    wk.t15.cn

在浏览器中输入 192.168.1.87

在这里插入图片描述

原来的网站显示还是原来的,正确。

在浏览器中输入 dc.t15.cn

在这里插入图片描述

标题和内容都显示 dc.t15.cn,正确。

在浏览器中输入 wk.t15.cn

在这里插入图片描述

标题和内容都显示 wk.t15.cn,正确。

简化 nginx.conf 配置文件

当存在多个域名时,所有配置都写在 nginx.conf 主配置文件中,难免会显得杂乱与臃肿。为了方便配置文件的维护,所以需要进行拆分配置。

进入到 /usr/local/etc/nginx 文件下,创建 vhost 文件夹(root),用于存放多个域名的配置

cd /usr/local/etc/nginx
mkdir vhost

在这里插入图片描述

cd vhost

进程 vhost 文件夹,创建 web_dc.t15.cn.conf 文件,文件内容如下

server {
    listen 80;
    server_name dc.t15.cn;
 	location / {
        root /mnt/sda1/webs/dc.t15.cn;
        index index.html index.htm;
	}
    error_page   500 502 503 504  /50x.html;
	location = /50x.html {
         root   html;
    }
}

创建 web_wk.t15.cn.conf 文件,文件内容如下

server {
    listen 80;
    server_name wk.t15.cn;
 	location / {
        root /mnt/sda1/webs/wk.t15.cn;
        index index.html index.htm;
	}
    error_page   500 502 503 504  /50x.html;
	location = /50x.html {
         root   html;
    }
}

其实就是把 nginx.conf 主配置文件中虚拟主机的配置分别写在各自域名的配置文件中

在这里插入图片描述

修改 nginx.conf 主配置文件,使 vhost 文件下的配置生效

cd ..
vim nginx.conf

屏蔽掉 dc.t15.cnwk.t15.cn 虚拟主机的服务,通过 include 引入 vhost 文件下的所有虚拟主机配置文件

include ./vhost/*.conf;

在这里插入图片描述

保存,退出后,进行持久化操作,输入

vim /opt/.filetool.lst

在这里插入图片描述

编辑 /opt/.filetool.lst 并添加 /usr/local/etc/nginx/vhost,保存并退出

执行持久化(需要退出 root 用户)

filetool.sh -b

在这里插入图片描述

为了能达到看到的效果,修改下 dc.t15.cn 和 wk.t15.cn 两个网站的 index.html 内容,内容中分别增加 Hello VHost:

在这里插入图片描述

保存,重启(因为网站的文件部署在硬盘中,不会因为重启消失)

在浏览器中输入 dc.t15.cn

在这里插入图片描述

可以看到在 dc.t15.cn 网站上增加 Hello VHost: 显示出来,正确

在浏览器中输入 wk.t15.cn

在这里插入图片描述

同样,也达到了效果,正确

反向代理

Nginx配置——反向代理-腾讯云开发者社区-腾讯云

反向代理实例一

实现效果:使用 Nginx 反向代理,访问 wiki.t15.cn 直接跳转到 192.168.1.58:3000

进入 /usr/local/etc/nginx/vhost/ 文件夹下(前面已经配置过 nginx.conf 文件了,所以直接添加一个虚拟主机的方式),通过修改虚拟主机的内容如下

server {
    listen 80;
    server_name wiki.t15.cn;
    location / {
       root /mnt/sda1/webs/www;
       index index.html index.htm;
       proxy_pass http://192.168.1.58:3000; #主要是这句
    }
}

如上配置,Nginx 监听 80 端口,访问域名为 wiki.t15.cn (不加端口号时默认为 80端口),故访问该域名时会跳转到 192.168.1.58:3000 路径上。

此处的意思为:nginx 反向代理服务监听 wiki.t15.cn 的80端口,如果有请求过来,则转到proxy_pass配置的对应服务器上,仅此而已。
在location下,同时配置root和proxy_pass选项时,两个选项只会二选一执行
此处不能配置https反向代理

在这里插入图片描述

实验结果:

在这里插入图片描述

反向代理实例二

实现效果:使用 Nginx 反向代理,根据访问的路径跳转到不同端口的服务中,Nginx 监听端口为 80

访问http://vv.t15.cn/wiki/直接跳转到 192.168.1.58:3000
访问http://vv.t15.cn/wtd/直接跳转到 192.168.1.81

第一步,需要准备两个 网站,一个 3000 端口,一个 80 端口,并准备好测试的页面
第二步,修改 nginx 的配置文件,在 http 块中配置 server

server {
    listen 80;
    server_name vv.t15.cn;

    location ~ /wiki/ {
       proxy_pass http://192.168.1.58:3000;
    }

    location ~ /wtd/ {
       proxy_pass http://192.168.1.81;
    }
}

根据上面的配置,当请求到达 Nginx 反向代理服务器时,会根据请求路径不同进行分发到不同的服务上。

在这里插入图片描述

实验结果

http://vv.t15.cn/wiki 和 http://vv.t15.cn/wtd 都没有起作用

在这里插入图片描述

经实验,要求 目标网站 要有设置的url的路径,在目标网站上建立一个 ur 路径, 并创建一个 index.html 文件,内容如下

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>测试,url的反向代理!</title>
    <style>
        .container {
            width: 60%;
            margin: 10% auto 0;
            background-color: #f0f0f0;
            padding: 2% 5%;
            border-radius: 10px
        }

        ul {
            padding-left: 20px;
        }

            ul li {
                line-height: 2.3
            }

        a {
            color: #20a53a
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>测试,url的反向代理功!</h1>
        <h3>这是默认index.html,本页面由系统自动生成</h3>
        <ul>
            <li>修改内容,查看是否起作用了</li>
            <li>删除</li>
            <li>增加</li>
        </ul>
    </div>
</body>
</html>

在浏览器中测试是否能正常访问 ,如下图所示,正常的url中有一个 ur

在这里插入图片描述

修改代理配置如下

server {
    listen 80;
    server_name vv.t15.cn;
    location ~ /ur/ { #这里增加了一个 ur 的路径
       proxy_pass http://192.168.1.58:9070;
       # proxy_set_header Host $host;
       # proxy_set_header X-Real-IP $remote_addr;
       # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       # proxy_set_header X-Forwarded-Proto $scheme;
    }

    location ~/wtd/ {
       proxy_pass http://192.168.1.58:7099;
    }
}

保存、持久化、重启

filetool.sh -b
sudo reboot

再次通过 vv.t15.cn/ur/index.html 访问,可以正常访问

在这里插入图片描述

配置重定向

在Nginx中配置重定向通常使用rewrite指令或者return指令。以下是一些常见的重定向场景和相应的配置示例:

永久重定向

重要语句 return 301

server {
    listen 80;
    server_name example.com;
    return 301 http://www.example.com$request_uri;
}

举例 ,创建 re_dc.conf 文件

sudo vim /usr/local/etc/nginx/vhost/re_dc.conf

文件内容如下

server {
    listen 80;
    server_name re.t15.cn;

    return 301 http://dc.t15.cn$request_uri;

}

持久化和重启

filetool.sh -b
sudo reboot

在这里插入图片描述

重启后,打开浏览器,输入 re.t15.cn 然后回车

在这里插入图片描述

在这里插入图片描述

url路径被重新定向为 dc.t15.cn

临时重定向

重要语句 return 302

server {
    listen 80;
    server_name oldsite.com;
    return 302 http://newsite.com$request_uri;
}

将非www重定向到www

重要语句 return 301

server {
    listen 80;
    server_name example.com;
    return 301 http://www.example.com$request_uri;
}

将www重定向到非www

重要语句 return 301

server {
    listen 80;
    server_name www.example.com;
    return 301 http://example.com$request_uri;
}

根据条件重定向

server {
    listen 80;
    server_name example.com;
 
    # 如果请求的是根目录,则重定向到/home
    rewrite ^/$ /home redirect;
 
    # 如果请求的是/oldpath,则重定向到/newpath
    rewrite ^/oldpath$ /newpath redirect;
}

将HTTP重定向到HTTPS

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

确保在修改Nginx配置后使用nginx -t命令测试配置文件的正确性,并使用service nginx reload或者systemctl reload nginx来重新加载配置。

location 指令说明

nginx入门教程:location_nginx的location-优快云博客

基本语法

该指令用于匹配 URL, 语法如下:

location [ = | ~ | ~* | ^~ | @] uri {

}

修饰符含义

  • / : 通用匹配,匹配任何请求。如果没有其他匹配,则采用此配置块。

  • = : 精确匹配。如果请求URI与模式完全匹配,则采用此配置块。

    ​ 用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求

  • ~: 用于表示 uri 包含正则表达式,并且区分大小写

  • ~*: 用于表示 uri 包含正则表达式,并且不区分大小写

  • *^~:前缀匹配。如果请求URI以模式开头,并且是最长的匹配,则采用此配置块。

    ​ 用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求。字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location块中的正则 uri 和请求字符串做匹配。

  • @: 定义一个命名location区段,这些区段客户端无法直接访问,只能由Nginx内部产生的请求来访问,如try_fileserror_page等。

    ​ 用于定义内部子请求的处理规则

注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识

server {
    listen 80;
    server_name example.com;
 
    # 精确匹配 /images 路径
    location = /images {
        root /var/www/html;
    }
 
    # 所有以 / 开始的请求都会匹配这里的 location
    location / {
        root /var/www/html;
        index index.html index.htm;
    }
 
    # 正则匹配以 .php 结尾的请求,区分大小写
    location ~ \.php$ {
        root /var/www/html;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
 
    # 正则匹配以 .css 结尾的请求,不区分大小写
    location ~* \.css$ {
        root /var/www/html;
    }
 
    # 内部子请求 location
    location @named_location {
        root /var/www/html;
    }
}

匹配顺序和优先级

当Nginx收到一个HTTP请求时,它会按照以下顺序进行location的匹配:

精确匹配:首先检查是否有使用=修饰符的精确匹配。如果有,则立即使用该location块处理请求,并停止搜索。
前缀匹配:如果没有精确匹配,则检查是否有使用^~修饰符的前缀匹配。如果有,且找到最长的匹配,则使用该location块处理请求,并停止搜索。
正则匹配:如果没有前缀匹配,则按照配置文件中的顺序从上到下依次进行正则匹配(*)。一旦找到第一个匹配的正则表达式,则使用该location块处理请求,并停止搜索。
通用匹配:如果没有任何正则匹配,则使用使用/的通用匹配location块处理请求。

配置示例

server {
    listen 80;
    server_name example.com;

    location = / {
        # 只匹配 / 的查询
        return 200 'Exact match for /';
    }

    location ^~ /images/ {
        # 匹配任何以 /images/ 开始的查询,并停止搜索
        return 200 'Match starts with /images/';
    }

    location ~ \.(gif|jpg|png)$ {
        # 匹配任何以 gif, jpg, 或 png 结尾的文件
        return 200 'Match for gif, jpg, or png';
    }

    location / {
        # 匹配任何请求,作为默认匹配
        return 200 'Default match';
    }
}

在这个示例中:

  • 访问 http://example.com/ 时,会返回 ‘Exact match for /’,因为存在精确匹配。
  • 访问 http://example.com/images/logo.png 时,会返回 ‘Match starts with /images/’ ,因为 ^~ 修饰符导致Nginx停止搜索。
  • 访问 http://example.com/docs/file.pdf 时,会返回 ‘Default match’ ,因为没有精确匹配、^~ 匹配或正则匹配(pdf不在指定的正则匹配范围内)。
  • 访问 http://example.com/photos/image.jpg 时,会返回 ‘Match for gif, jpg, or png’ ,因为正则表达式匹配成功。

注意事项

  1. 正则表达式的书写:在使用正则匹配时,要特别注意正则表达式的书写,避免因为正则表达式书写错误而导致匹配失败。
  2. 匹配顺序和优先级:在配置多个 location 块时,要注意匹配顺序和优先级,确保Nginx能够正确地处理不同的HTTP请求。
  3. rootalias 的区别:如果在配置文件中使用了 root 指令来指定文件路径,要注意 root 指令与 alias 指令的区别。root 是最上层目录的定义,而 alias 是一个目录别名的定义。

高级用法

除了基本的URI匹配外,location 指令还可以与其他Nginx模块结合使用,实现更复杂的请求处理和分发逻辑。例如,结合 proxy_pass 指令可以将请求代理到后端服务器,结合 rewrite 指令可以进行URL重写等。

通过合理利用 location 指令及其修饰符,Nginx能够灵活地处理各种URL请求,实现高效的请求分发和路由控制。掌握 location 指令的路径匹配机制,对于优化Nginx配置、提升Web应用 性能 具有重要意义。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值