为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 < /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

你可能感兴趣的:(为nginx docker容器添加Nginx-Fancyindex-Theme主题)