正式魔改nginx当博客系统

之前有文,魔改Nginx解决时间显示问题,当时解决了时间显示问题,现在已经可以灵活的修改想要的格式,在此记录一下。

之前的设想是搞一个前后端分离,用 Nginx 当后端,然后前端请求 Markdown 文档在前端转换成 html。当时是想借着这机会学一下前端,可是被杀毒项目所耽误,一直拖到十二月份,这时候观念已经发生改变,为什么非要搞得那么复杂?多没必要啊,反正博客也没人看,自己怎么方便怎么来呗。于是在十二月初开始折腾博客,居然准备折腾回 WordPress。不得不说这几年 WordPress进步好像挺大的,编辑器更易用了,还有客户端感觉也比以前强了。但是,毕竟是PHP编写的动态网站,说实话真的不放心放在公网上,之前数据库被锁,也不知道是自己误操作还是被人搞了,想来想去还是搞静态吧。也研究过Hexo,这个也用过,不过因为用着麻烦放弃了。最终研究定了一下需求:随意迁移,在本地能打开,尽量使用基本的东西,尽量不依赖三方的东西。偶然想起来之前折腾nginx,于是就想不如干脆就打包成一个html,然后扔到一个静态服务里面吧。接下来问题就是目录,现在是直接拿nginx做的,之后或许会换,比如Apache的目录就比nginx功能更多更人性化。nginx就先将就用,RSS先暂时放一边,实在不行等有时间用Python撸一个。html生成干脆就用Typora生成,连图片直接做成base64形式存在html文件里面,这种方式非常理想。

魔改预研

最开始实验自然是无所谓,直接拿ngx_http_autoindex_module.c文件开刀,修改ngx_http_autoindex_html 函数。主要修改就是之前说过的由空格控制缩进改成由<table>控制整体结构,以解决中文会导致时间对不齐的问题.

解决这个问题发现两个控制输出字符的方式函数,一个是*b->last++ = '"';另一个是b->last = ngx_cpymem(b->last, "</a>", sizeof("</a>") - 1);,经过实验前者只能添加单个字符,后者则可以任意,甚至可以添加换行。

还可以提前定义变量,然后加到里面:

知道以上,自然是想怎么改就怎么改了。

移花接木

找关于nginx开发教程,找到简书用户GarfieldEr007所写的「Nginx模块开发入门」一文,按照文章走一遍流程,编译成功,了解了模块怎么编写。过程中尝试学着如何开发,试图加入自己的东西,可惜暂时还没那个能力。

第一步,创建目录,建一个以模块名命名的目录,比如说我所建的目录名叫ngx_http_blog

第二步,创建配置文件,在上面目录内创建名为config的文件,添加配置,具体内容根据实际情况填写,内容如下:

第三步,创建模块代码文件ngx_http_blog_module.c

第四步、填充代码,我的做法是将ngx_http_autoindex_module.c 内所有内容cope到ngx_http_blog_module.c,然后替换ngx_http_autoindexngx_http_blog,然后修改变量ngx_command_t内所有autoindex为blog。

第五步、编译测试,测试模块是否可以正常使用,编译时需要修改编译参数,配置文件也需要修改,如下:

如果工作和原装的ngx_http_autoindex模块工作一致,说明移植成功。

开始魔改

了解这网页怎么拼出来的,并且将其分离成独立模块,自然是可以想怎么改就怎么改了,接下来首先是网页的头和尾。

 

首先定义了以上三个变量,分别是title、header、tail,title其实还是有改的余地,代码还可以优化,主要是时间问题,想要在今年上线,这些小问题就留到之后再解决吧。header内加了样式,既然都魔改了,不如让页面好看一些,我想html应该没什么好说的吧。tail里面加上了备案号相关。

接下来说明都在代码块里面吧,否则太麻烦了。

 

 

然后就完事,就这么简单,之后我觉得有些可以精简,比如说json、xml之类的就没必要保留了,用不上,那一部分代码被我优化掉了,当然现在依旧还有待优化,有一些代码还没搞清楚是干什么的,不好贸然删掉,留着日后优化。

总结

总的来说,我算是用野路子的方法搞出来这个东西,之前想过如何形容这件事,好比放着一架完好的客机(LNMP环境+Wordpress)不用,拆下来APU(nginx),给它焊上几个轮子加上螺旋桨(我魔改的地方),靠螺旋桨吹起的反作用力前进……

这是没办法的办法,如果有能力的话肯定用更好的方法,现在这样似乎是最好的选择?毕竟是干安全的,不太敢把动态网站放在互联网上,自己从头开发一个倒不是不能,而是太费时费力了,2017年的时候就想要写一个,一直拖到2019年才写了一个静态网站生成器,但用着还是麻烦,以至于博客荒废了两年,当然荒废两年不单是这个原因。这几天一鼓作气搞nginx,赶快上线,算是暂时把有和无的问题解决了。

后续还会继续折腾,毕竟现在实在是不能满意,说不定用Python写一个?写到这时突然想到经常用的python3 -m http.server,嗯,下一步就搞这个,不过一个日志一个文件这件事应该不会变了,毕竟处理图片太麻烦了。

附:ngx_http_blog_module.c

 

 

 

 

 

 


吉ICP备17001717号-1 |© Copyright 2016-2022,Luya Tsai