iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >使用Nginx怎么实现一个非套路镜像站
  • 617
分享到

使用Nginx怎么实现一个非套路镜像站

2023-06-08 00:06:28 617人浏览 薄情痞子
摘要

使用Nginx怎么实现一个非套路镜像站?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。方案一做了如下配置:12345678location ^~ /book-c/{ p

使用Nginx怎么实现一个非套路镜像站?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

方案一

做了如下配置:

1

2

3

4

5

6

7

8

location ^~ /book-c/

{

 proxy_pass Http://akaedu.GitHub.io/book/;

 proxy_redirect off;

 proxy_http_version 1.1;

 proxy_set_header Upgrade $http_upgrade;

 proxy_set_header Connection "upgrade";

}

浏览了下,都 ok,但是有几点不太好

  • 如果以后我发现类似的书很好,都要增加一个 nginx 配置。

  • 如果原始网站完全无法访问了,我这边也挂了,不能缓存到我本地服务器

  • 我想修改网页内容也不太好操作,比如我想加上原作者的版权和原始访问地址说明等。

完全采集过来,我也懒得写脚本去跑,最终走上了下面这段踩坑路。

尝试改进

1

rewrite ^/book-(.*?)/  /index.PHP?m=Book&a=show&book=$1 last;

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

class BookAction extends Action{

 private $uri;

 public function show(){

 $book = $_GET['book'];

 if (!method_exists($this,$book)){

  $this->error404();

 }

 try{

  $this->$book();

 }catch (Exception $e){

  $this->error404();

 }

 }

 

 

 private function c(){

 $baseUrl = "http://akaedu.github.io/book/";

 $url = $baseUrl.$this->uri;

 echo file_get_contents($url);

 }

}

又遇到了一个问题,当我访问 https://mengkang.net/book-c/styles.CSS 则无法 rewrite 匹配到了。

原因是 nginx 优先匹配了

1

2

3

4

location ~ .*\.(js|css)?$

{

 expires 12h;

}

方案二

添加一条

?

1

2

3

4

location ~ /book-.*?/

{

 rewrite ^/book-(.*?)/ /index.php?m=Book&a=show&book=$1 last;

}

location ^~ 不支持正则的,所以没法用

采坑小记

如果是使用的 location ~ /book-.*/ ,根据正则就是贪婪模式,那么

https://file.lsjlt.com/upload/202306/07/5q3ccokoftr.jpg

匹配到的就是 /book-c/images/ ,也就是说rewrite里面的 $1 就是 c/images ,这样和我们的预期相悖的。

故障:无法匹配到 css 文件

?

1

2

3

4

5

6

7

8

9

$ wget -S https://mengkang.net/book-c/styles.css -O /dev/null

--2018-02-01 13:13:36-- https://mengkang.net/book-c/styles.css

Resolving mengkang.net... 203.195.188.207

Connecting to mengkang.net|203.195.188.207|:443... connected.

HTTP request sent, awaiting response...

 HTTP/1.1 200 OK

 Server: nginx

 Date: Thu, 01 Feb 2018 05:13:38 GMT

 Content-Type: text/html; charset=UTF-8

所有内容的输出默认都是 text/html ,那么也就是我需要对文件的后缀判断咯。 感觉自己给自己挖坑,不如直接采集得了

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

<?php

class BookAction extends Action{

 const BOOK_SAVE_DIR = "/data/book/";

 private $uri;

 private $baseUrl;

 private $book;

 private $bookname;

 public function show(){

 $book = $_GET['book'];

 $this->book = $book;

 $this->uri = str_replace("/book-{$book}/","",$_SERVER['REQUEST_URI']);

 if (!method_exists($this,$book)){

  $this->error404();

 }

 try{

  $this->$book();

 }catch (Exception $e){

  $this->error404();

 }

 }

 

 private function c(){

 $this->baseUrl = "http://akaedu.github.io/book/";

 $url = $this->baseUrl.$this->uri;

 $this->output($url);

 }

 private function output($url){

 $ext = pathinfo($url,PATHINFO_EXTENSION);

 if (!$ext) {

  $url = $url."/index.html";

  $ext = "html";

 }

 switch ($ext){

  case "css":

  header("Content-Type: text/css; charset=UTF-8");

  break;

  default:

  header("Content-Type: text/html; charset=UTF-8");

  break;

 }

 // 如果已经缓存

 $filename = self::BOOK_SAVE_DIR.$this->book."/".str_replace($this->baseUrl,"",$url);

 if (file_exists($filename)){

  $data = file_get_contents($filename);

 }else{

  $data = file_get_contents($url);

  $dir = dirname($filename);

  if (!file_exists($dir)){

  mkdir($dir,755,true);

  }

  file_put_contents($filename,$data);

 }

 // 增加原始版权说明

 echo $data;

 }

}

看完上述内容,你们掌握使用Nginx怎么实现一个非套路镜像站的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

原文链接:http://mengkang.net/1152.html

--结束END--

本文标题: 使用Nginx怎么实现一个非套路镜像站

本文链接: https://www.lsjlt.com/news/250504.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用Nginx怎么实现一个非套路镜像站
    使用Nginx怎么实现一个非套路镜像站?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。方案一做了如下配置:12345678location ^~ /book-c/{ p...
    99+
    2023-06-08
  • 怎么使用dockerfile构建nginx镜像
    今天小编给大家分享一下怎么使用dockerfile构建nginx镜像的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下...
    99+
    2024-04-02
  • 使用Dockerfile怎么构建一个Docker镜像
    这篇文章将为大家详细讲解有关使用Dockerfile怎么构建一个Docker镜像,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Dockerfile是一个文本文件,其内包含了一条条的指令(In...
    99+
    2023-06-06
  • Nginx怎么实现一个站点配置多个域名
    这篇文章给大家分享的是有关Nginx怎么实现一个站点配置多个域名的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一个站点配置多个域名server {  list...
    99+
    2024-04-02
  • Nginx怎么实现一个服务配置多个站点
    这篇文章主要介绍了Nginx怎么实现一个服务配置多个站点,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一个服务配置多个站点server&nb...
    99+
    2024-04-02
  • 怎么用Dockerfile定义一个镜像
    本篇内容介绍了“怎么用Dockerfile定义一个镜像”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!容器准备工作安装Docker,版本为1....
    99+
    2023-06-19
  • 怎么用rsync实现网站镜像和备份
    本篇内容主要讲解“怎么用rsync实现网站镜像和备份”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用rsync实现网站镜像和备份”吧!服务器端 # more /etc/rsyncd...
    99+
    2023-06-10
  • 使用canvas怎么实现一个滤镜功能
    使用canvas怎么实现一个滤镜功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1 了解 canvas?1.1 什么是 canvas?这个 HTML 元素是为...
    99+
    2023-06-09
  • 使用ElementUI怎么实现一个table嵌套功能
    这篇文章给大家介绍使用ElementUI怎么实现一个table嵌套功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。HTML结构<template> <div>  ...
    99+
    2023-06-14
  • 使用PYQT5怎么实现一个界面嵌套功能
    这篇文章给大家介绍使用PYQT5怎么实现一个界面嵌套功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。简单演示下:首先主界面界面:在Form处设置下水平布局,就如下图:左右两侧分别是一个frame控件,左侧frame里...
    99+
    2023-06-08
  • 使用canvas怎么实现一个放大镜功能
    使用canvas怎么实现一个放大镜功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 1. 什么是离屏技术?canvas 学习和滤镜实现 介绍过 drawImage ...
    99+
    2023-06-09
  • 使用canvas怎么实现一个像素画板
    本篇文章给大家分享的是有关使用canvas怎么实现一个像素画板,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Pixel = function (o...
    99+
    2023-06-09
  • 使用opencvs怎么实现一个图像平移效果
    今天就跟大家聊聊有关使用opencvs怎么实现一个图像平移效果,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。图像平移:按照指定方向和距离,移动到相应位置格式:cv.warpAffin...
    99+
    2023-06-14
  • 使用Python怎么实现一个图像分类功能
    今天就跟大家聊聊有关使用Python怎么实现一个图像分类功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语...
    99+
    2023-06-14
  • 怎么在HTML5中使用Canvas实现一个放大镜效果
    这期内容当中小编将会给大家带来有关怎么在HTML5中使用Canvas实现一个放大镜效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。原理首先选择图片的一块区域,然后将这块区域放大,然后再绘制到原先的图片上...
    99+
    2023-06-09
  • 怎么在python中利用Dockerfile构建一个镜像
    今天就跟大家聊聊有关怎么在python中利用Dockerfile构建一个镜像,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python的数据类型有哪些python的数据类型:1. 数...
    99+
    2023-06-14
  • 使用Nginx-rtmp怎么实现一个直播媒体实时流效果
    使用Nginx-rtmp怎么实现一个直播媒体实时流效果?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。流程图12345671. 客户端A无法进行P2P穿透,请求业务服务器要进...
    99+
    2023-06-08
  • nginx中怎么实现一个事件模块
    nginx中怎么实现一个事件模块,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1. ngx_events_block()----events配置块解析  &...
    99+
    2023-06-19
  • 使用vue路由怎么实现一个登录拦截功能
    本篇文章给大家分享的是有关使用vue路由怎么实现一个登录拦截功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、概述vue-router提供了导航钩子:全局前置导航钩子 be...
    99+
    2023-06-14
  • linux中怎么用GNOME Boxes下载一个操作系统镜像
    这篇文章主要为大家展示了“linux中怎么用GNOME Boxes下载一个操作系统镜像”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“linux中怎么用GNOME Boxes下载一个操作系统镜像”...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作