本文章为原创非复制行为
前言
网上已经有很多文章演示如何为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模块
可以看到官方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;
添加主题
添加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.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