Cgwin编译nginx-1.18.0,解决中文目录乱码,并实现简易流媒体服务器
一、问题由来
最近学习Java过程中接触到nginx Web服务器,于是从官网(http://nginx.org/en/download.html)下载nginx/Windows-1.18.0版软件,解压,配置nginx-1.18.0\conf下nginx.conf文件如下:
location /nginx {
root H:/apache-tomcat-9.0.44/webapps;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
运行nginx.exe,打开浏览器,输入网址http://localhost/nginx/video/,正常输出如下:
这里中文文件显示均为正常,但是鼠标点击**“中文课程.mp4”文件后,出现“502 Bad Gateway”错误,如下图:
且浏览器栏中出现乱码“%D6%D0%CE%C4%BF%CE%B3%CC**”,初步怀疑该乱码为“中文课程”的某种编码。通过python函数'中文课程'.encode('GBK')
函数得到输出正是该乱码,如下图:
说明win7系统的中文编码为GBK,浏览器地址栏无法解析GBK编码,于是将nginx.conf中编码改为utf-8(charset utf-8;
),得到输出如下:
于是上网查询原因,按照网上的方法,先后将charset 设置为charset ISO-88509-1; charset utf-8; charset GBK; charset GB2312; charset utf-8, GBK; charset GBK, utf-8
等字段,均不能解决问题,win7系统中也未找到将中文字符集改为utf-8的方法,同时在查询资料中得知nginx默认版本不包含--WITH-HTTP_MP4_MODULE
MP4模块。于是决定在windows下采用cgwin编译nginx-1.18.0。
二、cgwin编译nginx-1.18.0
从官网下载源码包nginx-1.18.0.tar.gz,编译命令如下:
1. tar zxvf nginx-1.18.0.tar.gz
2. ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_sub_module --with-threads --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-stream
3. make && make install
编译命令不难,但是编译过程中遇到不少坑,原因是cgwin下缺少不少必备库:
1. pcre
通过cgwin setup安装了libpcre-dev,如图
2. zlib
通过cgwin setup安装了libzlib-dev,如图
3. openssl
由于找不到libopenssl-dev,怕缺少库,安装了下面一些库
4. crypt
这个库比较坑,网上没有资料说要装这个,而且编译过程中报的错误不明显,花了不少时间研究,装了这个libcrypt-dev后能正常编译代码:
5. libgd
通过cgwin setup安装了libgd-dev,如图