跳转至

模块配置应用

调试输出

安装第三方echo_nginx_module模块 验证测试nginx.conf location / { root html; index index.html index.htm; default_type text/plain; # MIME设置成文本格式 echo -n Hello, ; #不换行 echo "This is an echo module." echo this is a test. echo 45 * 78; # 输出45*78 echo $args; # 打印请求的参数 }

查看响应状态与替换响应内容

重新编译nginx,在。/configuer中添加以下命令 --with-http_stub_status_module \ --with-http_sub_module \

查看网站响应状态,ngx_http_stub_status_module 修改配置文件nginx.conf server { listen 80; server_name www.test.com; root html/test.com; index index.html index.htm; stub_status; } 打开网页可查看 Active connections 活跃连接数量 server accepts 服务器处理连接数 handled 服务器创建的握手次数 requests 服务器处理请求连接的数量 Reading 读取客户端的连接数 Writing 响应数据到客户端的数量 Waiting 正在等候下一次请求指令的驻留连接数

替换网站响应内容,ngx_http_sub_module 修改配置文件nginx.conf server { listen 80; server_name www.test.com; root html/test.com; index index.html index.htm; sub_filter server 'Nginx'; # 将网页中第一次出现的server文字替换成Nginx sub_filter_once off # 可选,替换所有匹配到的文字 }

网页压缩传输

gzip(GNU-ZIP)

gzip模块配置指令 gzip 开启或关闭 gzip 模块 gzip_buffers 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流 gzip_comp_level 压缩比,压缩级别是1~9,1的压缩级别最低,9的压缩级别最高。压缩级别越高压缩率越大,压缩时间越长。 gzip_disable 可以通过该指令对一些特定的User-Agent不使用压缩功能。 gztp_min_length 设置允许压缩的页面最小字节数,页面字节数从响应消息头的 Content-Length中进行获取 gzip_http_version 识别HTTP协议版本,其值可以是1.1(默认值)或1.0 gzip_proxied 用于设置启用或禁用从代理服务器上收到响应内容的gzip压缩功能 gzip_types 匹配 MIME 类型进行压缩 。且无论是否指定,text/html类型总是会被压缩的 gztp_vary 用于在响应消息头中添加Vary:Accept-Encoding,使代理服务器根据请求头中的Accept-Encoding识别是否启用gzip压缩

修改配置文件 http {... gzip on; # 启用gzip gzip_types text/plain application/javascript text/css; # 压缩文本,JS,CSS文件 ... }

gzip_proxied指令常用参数 any 无条件压缩所有响应数据 off 关闭反向代理的压缩 expired 如果响应消息头中包含Expires,启用压缩 no-cache 如果响应消息头中包含Cache-Control:no-cache,启用压缩 no-store 如果响应消息头中包含Cache-Control:no-store,启用压缩 private 如果响应消息头中包含Cache-Control:private,启用压缩 no_last_modified 如果响应消息头中不包含Last-Modified时,启用压缩 no_etag 如果响应消息头中不包含ETag,启用压缩 auth 如果响应消息头中包含Authorization头信息,启用压缩

重写与重定向

rewrite重写的基本语法 rewrite regex replacement [flag];

regex 正则表达式 replacement 替换算法 [flag] 进一步处理标识
last 终止rewrite,继续匹配其他规则 break 终止rewrite,不再继续匹配 redirect 临时重定向,返回HTTP302 permanent 永久重定向,返回HTTP301

配置rewrite重写,nginx.conf server { listen 80; server_name test.web.test; index index.html index.htm; root html; # 当请求的文件不存在时 if(!-e request_filename){ rewrite "^/.*" /default/default.html break; # 将所有请求替换成指定请求 } location /break/ { rewrite ^/break/ (.*)/test/1 break; # 重写后不再匹配 echo "break page"; # 网页打印 } location /last/ { rewrite ^/last/ (.*)/test/$1 break; # 重写请求后继续匹配 echo "break page"; # 网页不打印被绕过 } location /last/ { echo "break page"; # 网页打印或请求被重写到此 }

}

if指令判断符 = 变量与内容相等 !=变量与内容不符 ~ 正则匹配 ~* 不区分大小写正则匹配 !~ 正则不匹配 !~* 不区分大小写正则不匹配 -f 文件存在 !-f 文件不存在 -d 目录存在 !-d 目录不存在 -e 文件或目录存在 !-e 文件或目录不存在 -x 文件可执行 !-x 文件不可执行

rewrite重定向 server { listen 80; server_name test.web.test; root html; set name 1; 匹配规则http://.../img-数字.jpg -返回重定向-> http://.../img/数字.jpg rewrite ^/img-([0-9]+).jpg /img/ /img/ /img/ /img/name.jpg permanent; }

服务器添加图片防盗链

修改配置文件nginx.conf location ~ * .(gif|jpg|png|swf|flv)$ { valid_referers www.web.test web.test; # 白名单 if ($invalid_referer) { # 非白名单操作 return 403; } } 其中valid_referers可叠加指令 none 匹配没有refererd是HTTP请求 blocked 匹配被防火墙或被代理修改过的请求去掉了https://和http:// servers_name 匹配域名如valid_referers web.com; string 匹配任意字符串valid_referers *.web.com; regular expression 正则表达式 valid_referers ~.img.;

服务器添加下载防盗链 重新编译Nginx --with-http_secure_link_module 配置下载防盗链需要程序支持 <?php secret='web.test'; // 自定义服务器密钥 path='/down/web/nginx.tar.gz'; // 下载文件路径 expire=time()+60; // 过期时间 md5=base64_encode(md5(secret.secret.secret.secret.path.path.secret.secret.secret.secret.path.path.expire, true)); expire, true)); md5=strtr(md5, '+/', '-md5=str_replace('=', '', md5); // 加密字符串 echo '<a href="http://www.web.test.down/web/nginx.tar.gz?st='.md5.'&e='.md5.'&e='.md5.'&e='.md5.'&e='.expire.'">nginx'; // 加密后的下载链接 echo '
secret.secret.secret.secret.path.path.secret.secret.secret.secret.path.path.expire, true)); expire, true)); md5=strtr(md5, '+/', '-'); md5, '+/', '-'); md5=str_replace('=', '', md5); // 加密字符串 echo '<a href="http://www.web.test.down/web/nginx.tar.gz?st='.md5.'&e='.md5.'&e='.md5.'&e='.md5.'&e='.expire.'">nginx'; // 加密后的下载链接 echo '
http://www.web.test.down/web/nginx.tar.gz?st='.expire.'">nginx'; // 加密后的下载链接 echo '
http://www.web.test.down/web/nginx.tar.gz?st='.md5.'&e='.expire; // 为作比较显示出来 ?> 修改配置文件nginx.conf location / { secure_link args_st, arg_e; # 加密字符串,过期时间 secure_link_md5 web.testurlsurlsurlsurlsarg_e; # 计算MD5 if(arg_e; # 计算MD5 if(urlsurlsurlsurlsarg_e; # 计算MD5 if(arg_e; # 计算MD5 if(secure_link=""){ # 加密字符串不等处理 return 403; } if(secure_link=""){ # 加密字符串不等处理 return 403; } if(urlsurlsurlsurlsarg_e; # 计算MD5 if(arg_e; # 计算MD5 if(urlsurlsurlsurlsarg_e; # 计算MD5 if(arg_e; # 计算MD5 if(secure_link=""){ # 加密字符串不等处理 return 403; } if(secure_link=""){ # 加密字符串不等处理 return 403; } if(secure_link="0"){ # 加密字符串相等,链接过期处理 return 403; } }

配置HTTPS网站

ngx_http_ssl_moudle模块

step1生成服务器的RSA私钥 $ mkdir /usr/local/nginx/conf/ssl $ cd /usr/local/nginx/conf/ssl $ opssl genrsa -out server.key 2048 # 生成RSA私钥 输出 文件名 私钥长度 step2生成服务器CSR证书请求文件(公钥) $ openssl req -new -key server.key -out server.csr # 此时会让填写一些信息,如下: Country Name (2 letter code) 国家代码,如中国CN State or Province Name (full name) 省份,如Beijing Locality Name (eg, city) 城市,如Beijing Organization Name (eg, company) 公司名称,如ccu Organizational Unit Name (eg, section) 组织单位,如IT Common Name (eg, your websites domain name) 使用 SSL 加密的网站域名,如www.test.com,应与网站相同 Email Address 邮件地址,可以省略 A challenge password 有些CA机构需要此密码,通常省略即可 An optional company name 可选的公司名称,可以省略 step3为服务器签名认证CA证书 $ openssl x509 -req -days 30 -in server.csr -signkey server.key -out server.crt 其中 x509 # 自签名证书格式 -req # 证书签发申请 -days 3650 # 证书有效期 -in server.csr # 申请文件(公钥) -signkey server.key # 私钥 -out server.crt # 输出文件 配置HTTPS服务器nginx.conf server { listen 443; server_name www.test.com; root html/test.com; ssl on; ssl_ceritficate /usr/local/nginx/conf/ssl/server.crt; # CA证书 ssl_ceritficate_key /usr/local/nginx/conf/ssl/server.key; # 私钥 } 重启nginx完成配置,访问浏览器会提示不是私密链接

(有帖子指出提示的原因在于网站源码中的图片等链接地址是http://与https不一致,具体情况未验证)