IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 学Python运维,这知识点你肯定会遇到,【必收藏之】nginx 域名跳转相关配置 -> 正文阅读

[PHP知识库]学Python运维,这知识点你肯定会遇到,【必收藏之】nginx 域名跳转相关配置

📢📢📢📢📢📢
哈喽!大家好,我是 【梦想橡皮擦】,10 年产研经验,致力于 Python 相关技术栈传播 💗
🌻 本文如果觉得不错,动动小手点个赞赞吧 👍
🌻 本文如果发现错误,欢迎在评论区中指正哦 💗
👍 技术博客日更者,我喜欢写文章,如果任意一篇文章对你有帮助,就挺好的~ 👍
📣📣📣📣📣📣

欢迎大家订阅专栏 ?? ?? 《Python 爬虫 120》?? ??

📆 最近更新:2022 年 3 月 31 日,橡皮擦的第 605 篇原创博客

?? 实战场景

作为一个 Python 运维工程师,你将经常面临 nginx 相关的配置,其中最常见的是域名跳转,跨域配置。在之前橡皮擦已经写过了一篇博客,入门相关的你可以直接去学习。

《2022 年从零开始,用一篇博客掌握 nginx 的初级配置》

本篇博客将从域名跳转,跨域配置开始,逐步为你展开 nginx 实战配置。

?? 需求一:访问不同地址,实现不同的跳转

具体需求如下:

  1. 访问 www.aaaa.com 跳转到 www.baidu.com
  2. 访问 www.aaaa.com/sohu 跳转到 www.sohu.com
  3. 访问 www.aaaa.com/sina 跳转到 www.sina.com

准备工作:

  1. 有一台可操作的服务器;
  2. 配置一个静态站点;
  3. 部署一些静态网页。

部署完毕,默认的配置文件如下所示(配置由宝塔生成,使用其它类似,域名是你配置的域名地址)

server
{
    listen 80;
    server_name 你的域名;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/你的域名;

    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    #SSL-END

    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    #error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END

    #PHP-INFO-START  PHP引用配置,可以注释或修改
    include enable-php-73.conf;
    #PHP-INFO-END

    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/server/panel/vhost/rewrite/你的域名.conf;
    #REWRITE-END

    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }

    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        error_log /dev/null;
        access_log /dev/null;
    }

    location ~ .*\.(js|css)?$
    {
        expires      12h;
        error_log /dev/null;
        access_log /dev/null;
    }
    access_log  /www/wwwlogs/你的域名.log;
    error_log  /www/wwwlogs/你的域名.error.log;
}

配置文件的相关说明,可以翻阅之前的博客学习,这里仅对我们的目标进行配置。

首先实现第一个需求,访问域名,跳转到另一个域名去。

location /
{
    rewrite ^/ http://www.baidu.com/ permanent;
}

location 之后,跟着 / 表示匹配根路径,此时当你访问 /sohu 依旧会被跳转到百度页面,没有满足我们的需求。

在继续修改配置前,可以先看一下 rewrite 的相关语法:

rewrite 是实现 URL 重写的关键指令,根据 regex(正则表达式)部分的内容,重定向到 replacement 部分,结尾是 flag 标记。

rewrite regex replacement [flag]
  • 默认值: none
  • 可编写位置:server、location、if

在看一下上述案例,格式如下:

rewrite ^/(.*) http://www.baidu.com/$1 permanent;

翻译成中文如下所示:

关键字 正则 替代内容 flag标记
  • 关键字:重定向的关键字是 rewrite ;
  • 正则:正则表达式语句进行规则匹配;
  • 替代内容:将正则匹配的内容替换成 replacement;
  • flag 标记:rewrite 支持的 flag 标记。

flag 标记说明

  • last:重写规则匹配完成,继续向下匹配 location URI 规则;
  • break :重写规则匹配完成,不再匹配后面的任何规则;
  • redirect :返回 302 临时重定向,浏览器地址栏显示 URL 地址;
  • permanent :返回 301 永久重定向,浏览器地址栏显示 URL 地址;

综上所示,在看一下 rewrite 规则:

rewrite 为关键字,表示开启 rewrite 匹配规则,regex 正则部分是 ^/(.*) ,表示匹配所有内容,匹配成功后跳转到http://www.baidu.com/$1。$1 是取前面 regex 部分第一个括号内容,结尾的 permanent 是永久 301 重定向标记,即跳转到后面的 http://www.baidu.com/$1 地址。

不过建议 flag 位置不使用 permanent ,否则修改 nginx 配置之后,还需要清理缓存,否则会持续跳转。

了解这些内容之后就可以直接编写如下配置

location /sohu
{
   rewrite ^/ http://www.sohu.com/;
}
location /
{
   rewrite ^/ http://www.baidu.com/;
}

其中注意 location / 写在最下面。

也可以在一个 location 中增加判断,当匹配到请求的地址中出现 /app 的时候,就直接跳转到百度首页。

location /
{
   if ($uri ~* '/app')
   {
     rewrite ^/ http://www.baidu.com/;
   }
}

还可以在 location / 之后添加匹配,例如下述规则,只有当访问根目录的时候,才会进行跳转。

location ~ /$
{
    rewrite ^/ http://www.baidu.com/;
}

再次补充一些正则相关的知识点如下所示:

  • ~:区分大小写匹配;
  • ~*:不区分大小写匹配;
  • ^:匹配开头;
  • $:匹配结尾;
  • -f!-f:判断是否存在文件;
  • -d!-d:判断是否存在目录;
  • -e!-e:判断是否存在文件或目录;
  • -x!-x:判断文件是否可执行。

常用的内置

?? 需求二:跨域访问与预检请求(preflight request)

跨域配置也是最常见的配置了,基本在通过自定义响应头进行配置,关键字为 addheader ,具体如下所示:

add_header Access-Control-Allow-Origin *;
add_header code 0102566341;

学Python运维,这知识点你肯定会遇到,【必收藏之】nginx 域名跳转相关配置

  • Access-Control-Allow-Origin:允许的请求源;
  • Access-Control-Allow-Methods:允许的请求方法;
  • Access-Control-Allow-Headers:请求头字段;
  • Access-Control-Allow-Credentials:允许带上 cookie 请求。

一般在设置 Access-Control-Allow-Origin 的时候,尽量不使用 * ,而使用具体的域名。

预检请求(preflight request)

跨域资源共享(CORS)标准,新增了一组 HTTP 头部字段,允许服务器声明哪些源站有权限访问哪些资源。

如果 HTTP 的请求方法会对服务器数据产生副作用,浏览器必须先用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨域请求。
当服务器返回确认状态时,才发起实际的 HTTP 请求。

一般当 Content-Type 不属于下述 MIME 类型时,都需要进行预检。

application/x-www-form-urlencoded
multipart/form-data
text/plain

对于跨域请求,你还可以通过反向代理进行实现。

📣📣📣📣📣📣
🌻 本文如果发现错误,欢迎在评论区中指正哦 💗

欢迎大家订阅专栏 ?? ?? 《Python 爬虫 120》?? ??

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 11:48:41  更:2022-04-04 11:49:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 17:34:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码