为nginx docker容器添加Nginx-Fancyindex-Theme主题

本文章为原创非复制行为

前言

网上已经有很多文章演示如何为nginx文件服务器添加fancyindex模块达到索引目录美化,随着docker的流行,很多人也将nginx部署在docker上。为部署在docker上的nginx添加Nginx-Fancyindex-Theme主题有些不一样,在nginx官方镜像创建的容器中使用apt命令安装编译需要用到的库文件,默认不包含大多数文章使用的yum,也没有必要再安装yum命令或者其他多余的库。本文章将详细介绍如何为nginx docker容器添加主题,使用的nginx版本为1.17.8


首先更换docker容器下载源

1.进入已经创建好的nginx容器,文章中的容器名为nginx_container
[root@ykxz ~]# docker exec -it nginx_container bash

2.输入nginx -V查看nginx版本、configure信息和已经包含的模块等,nginx默认不包含fancyindex模块


nginx -V

可以看到官方1.17.8的镜像为Debain 10,容器里默认的是国外下载源,接下来安装编译库和其他包的时候可能会非常的慢,需要修改为国内镜像源,我这里使用阿里的Debain 10源。

3.备份下载源的文件,下载源的文件位置/etc/apt/sources.list(可选)
因为官方镜像不包含vi或nano编辑器,所以通过重定向的方式写入文件,这样不用下载vim,节省步骤和空间,多行重定向以EOF结束输入
root@ykxz:/# cat <<EOF > /etc/apt/sources.list

复制以下内容,回车

deb http://mirrors.aliyun.com/debian/ buster main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib
deb http://mirrors.aliyun.com/debian-security buster/updates main
deb-src http://mirrors.aliyun.com/debian-security buster/updates main
deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib
deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib
EOF

4.更新下载源
root@ykxz:/# apt update


获取编译库和fancyindex模块

1.安装其他必要包和编译库
root@ykxz:/# apt install -y wget make g++ libpcre3-dev zlib1g-dev libssl-dev

  • apt需要安装的编译库对应yum:
编译库 apt yum
C compiler cc g++ gcc-c++
PCRE library libpcre3-dev pcre-devel
zlib library zlib1g-dev zlib-devel
OpenSSL library libssl-dev openssl-devel

2.nginx编译添加模块需要下载相同版本的源码,一并下载fancyindex模块并解压,得到nginx-1.17.8目录和ngx-fancyindex-0.4.4目录
root@ykxz:/# wget http://nginx.org/download/nginx-1.17.8.tar.gz
root@ykxz:/# wget -O ngx-fancyindex-0.4.4.tar.gz https://codeload.github.com/aperezdc/ngx-fancyindex/tar.gz/v0.4.4
root@ykxz:/# tar -xzvf nginx-1.17.8.tar.gz
root@ykxz:/# tar -xzvf ngx-fancyindex-0.4.4.tar.gz

3.备份配置文件和执行文件,配置文件目录/etc/nginx,执行文件位置/usr/sbin/nginx(可选)
进入nginx源码目录配置configure参数
root@ykxz:/# cd nginx-1.17.8

4.nginx添加新模块需要加上现有的configure配置信息(输入nginx -V查看,本文的configure信息于文章开头)
在configure的最后加上一段--add-module=../ngx-fancyindex-0.4.4就可以了,../ngx-fancyindex-0.4.4是fancyindex模块的目录

配置例子

root@ykxz:/nginx-1.17.8# 
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -fdebug-prefix-map=/data/builder/debuild/nginx-1.17.8/debian/debuild-base/nginx-1.17.8=. -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie' --add-module=../ngx-fancyindex-0.4.4

configure参数过于长所以这里缩为一行,拉到最右是新增的模块


开始编译

1.已经安装过nginx,不要使用make install,因为会生成默认配置文件(以.default结尾),虽然不会影响现有配置文件但不利于目录整洁
root@ykxz:/nginx-1.17.8# make

2.编译完成后的可执行文件在objs目录下,通过
root@ykxz:/nginx-1.17.8# objs/nginx -V
可以看到已经包含了fancyindex模块,configure信息与前面配置时的相同

3.此时还差一步,需要将编译完成的可执行文件拷贝到对应目录覆盖,通过which可以查看nginx可执行文件的位置
root@ykxz:/nginx-1.17.8# which nginx
/usr/sbin/nginx
root@ykxz:/nginx-1.17.8# cp objs/nginx /usr/sbin/nginx

4.在配置文件中添加以下内容就可以启用fancyindex目录美化了

fancyindex on;
fancyindex_localtime on;
fancyindex_exact_size off;

fancyindex模块默认美化效果


添加主题

添加Nginx-Fancyindex-Theme主题,让它更漂亮一些

1.获取主题并解压,主题包含黑白两种
root@ykxz:/# wget -O Nginx-Fancyindex-Theme-master.tar.gz https://codeload.github.com/Naereen/Nginx-Fancyindex-Theme/tar.gz/master
root@ykxz:/# tar -xzvf Nginx-Fancyindex-Theme-master.tar.gz

2.这里选择了白色主题,拷贝到索引目录file_server下,一并拷贝fancyindex.conf文件
root@ykxz:/# cp -r Nginx-Fancyindex-Theme-master/Nginx-Fancyindex-Theme-light/ /etc/nginx/file_server
root@ykxz:/# cp Nginx-Fancyindex-Theme-master/fancyindex.conf /etc/nginx/

3.只需要在配置文件的location中添加一行include fancyindex.conf即可启用主题,不需要添加上一节第4步的内容(fancyindex.conf中已包含)

fancyindex主题美化效果


题外话

因为fancyindex.conf主题文件路径设置的原因

fancyindex_header "/Nginx-Fancyindex-Theme-light/header.html";
fancyindex_footer "/Nginx-Fancyindex-Theme-light/footer.html";

前面的配置开启主题美化需要将主题放入索引目录,如果开启多个目录索引需要拷贝多份主题比较麻烦,不建议修改fancyindex.conf文件,不如把Nginx-Fancyindex-Theme-light目录放到一个固定位置,再添加一个location做请求路径处理,这样只需要一份主题文件,本文放在/etc/nginx下,最终配置文件是这样的

# vim: ft=conf
server {
    listen 7000;
    server_name your.doamin.com;

    charset  utf-8;

    location  / {
        include fancyindex.conf;

        alias file_server/;
    }

    location ^~ /Nginx-Fancyindex-Theme-light/ {
        root ./;
    }

    error_log    logs/error_your.doamin.com:7000.log    error;
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}


fancyindex模块作者的github
https://github.com/aperezdc/ngx-fancyindex
主题作者的github
https://github.com/Naereen/Nginx-Fancyindex-Theme

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容