专栏首页云原生生态圈Nginx专辑| 02 - Nginx1.18 静态服务器规范化配置

Nginx专辑| 02 - Nginx1.18 静态服务器规范化配置

背景研究

分享一个通过 nginx[1] 搭建一个静态资源的 web 服务器,实践中将会涉及到三个部分的内容:

  1. 静态文件服务器的配置
  2. Nginx模块之gzip[2]
  3. 自定义访问日志的格式: Embedded Variables

静态文件服务器

简单的就通过一个自定义的index.html文件当做一个静态页面Demo,下面准备一下静态文件资源存储的位置。

mkdir /webserver/nginx18/ops/
echo "云原生生态圈" > /webserver/nginx18/ops/index.html

增加nginx配置文件,在/webserver/nginx18/conf/nginx.conf里增加一个 server 配置段,然后通过 alias 映射到虚拟目录。注意访问时 location 中的/对应的是 ops 后面的/

server {
     listen      80;
     server_name web.devopsman.cn;
     location / {
        alias ops/;
     }
}

测试访问:

☸️  k8sdev? default  ~  ? ? curl web.devopsman.cn
静态网站demo
☸️  k8sdev? default  ~  ? ? curl -I web.devopsman.cn
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Sat, 11 Jul 2020 14:11:46 GMT
Content-Type: text/html
Content-Length: 17
Last-Modified: Sat, 11 Jul 2020 14:11:13 GMT
Connection: keep-alive
ETag: "5f09c881-11"
Accept-Ranges: bytes

开启静态网站压缩

nginx可以通过一种浏览器支持且压缩不受数据损失的gzip模块将样式文件、文本文件、图片等压缩之后在用户的请求之间传输,但是对于jpg、jpeg、png这类本身存在压缩性质上的图片来说,压缩效果不是很明显,主要体现在文本文件的压缩上,因此对于服务的提供者来说,减少了不小的流量带宽的使用,同时也提高访问速度。

  gzip  on;
  gzip_min_length 1; # 表示小于1k不压缩
  gzip_comp_level 2; # 设置压缩的级别
  gzip_types text_plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;  # 启用压缩类型的文件

gzip_comp_level的压缩比设置区间为0-9,设置的压缩比越高,文件越小,但是对服务器CPU的消耗也就越多,一般出于这种选择压缩比为6

root@master:/webserver/nginx18/conf# curl -I http://web.devopsman.cn/test.html
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Sun, 12 Jul 2020 13:45:22 GMT
Content-Type: text/html
Content-Length: 20480
Last-Modified: Sun, 12 Jul 2020 13:34:14 GMT
Connection: keep-alive
ETag: "5f0b1156-5000"
Accept-Ranges: bytes

root@master:/webserver/nginx18/conf# curl -H "Accept-Encoding: gzip" -I http://web.devopsman.cn/test.html
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Sun, 12 Jul 2020 13:45:26 GMT
Content-Type: text/html
Last-Modified: Sun, 12 Jul 2020 13:34:14 GMT
Connection: keep-alive
ETag: W/"5f0b1156-5000"
Content-Encoding: gzip

通过以上测试的方式,既可以访问gzip_types中设定的类型的资源的时候,除了图片之外,应该能成功的找到Content-Encoding: gzip

配置访问日志格式

nginx 的日志格式,是通过 nginx 支持的环境变量将所需要的日志信息给组装在一起,在 nginx 里,除了内置的环境变量之外,还包括第三方模块的环境变量信息,比如,nginx 核心模块的支持的环境变量可以在Embedded Variables[3]找到,第三方支持哪些环境变量可以在对应的模块文档中找到,比如realip模块支持的环境变量Embedded Variables[4],下面是是一个定义的案例,定义一个main类型的日志格式。

log_format main '{'
  '"@timestamp":"$time_iso8601",'
  '"connection":"$connection",'
  '"connection_requests":"$connection_requests",'
  '"request":"$request",'
  '"request_time":"$request_time",'
  '"request_length":"$request_length",'
  '"request_uri":"$request_uri",'
  '"request_method":"$request_method",'
  '"server_name":"$server_name",'
  '"status":"$status",'
  '"remote_user":"$remote_user",'
  '"remote_addr":"$remote_addr",'
  '"time_local":"$time_local",'
  '"body_bytes_sent":"$body_bytes_sent",'
  '"bytes_sent":"$bytes_sent",'
  '"msec":"$msec",'
  '"upstream_status":"$upstream_status",'
  '"upstream_addr":"$upstream_addr",'
  '"upstream_response_time":"$upstream_response_time",'
  '"http_sessionKey":"$http_sessionKey",'
  '"cookie_sk":"$cookie_sk",'
  '"http_referer":"$http_referer",'
  '"http_user_agent":"$http_user_agent",'
  '"http_x_forwarded_for":"$http_x_forwarded_for"'
  '}';

在定义好日志格式之后,通过access_log指令配置日志的存储路径,在配置完日志之后,reload一下就可自动创建日志文件,以上的环境变量含义都可以在官网上找到准确的释义:

access_log  logs/web.devopsman.cn.access.log  main;

此时,发送一个 http 的请求,就会按照日志的格式记录日志写入到日志文件中:

root@master:/webserver/nginx18/logs# tail -f web.devopsman.cn.access.log
{"@timestamp":"2020-07-11T10:26:55-04:00","connection":"17","connection_requests":"1","request":"HEAD / HTTP/1.1","request_time":"0.000","request_length":"81","request_uri":"/","request_method":"HEAD","server_name":"web.devopsman.cn","status":"200","remote_user":"-","remote_addr":"192.168.99.1","time_local":"11/Jul/2020:10:26:55 -0400","body_bytes_sent":"0","bytes_sent":"236","msec":"1594477615.080","upstream_status":"-","upstream_addr":"-","upstream_response_time":"-","http_sessionKey":"-","cookie_sk":"-","http_referer":"-","http_user_agent":"curl/7.64.1","http_x_forwarded_for":"-"}

Reference

[1]Nginx网站: https://nginx.org

[2]Nginx-module-gzip: http://nginx.org/en/docs/http/ngx_http_gzip_module.html

[3]Nignx-core Embedded Variables: http://nginx.org/en/docs/http/ngx_http_core_module.html#variables

[4]nginx-realip Embedded variables: http://nginx.org/en/docs/stream/ngx_stream_realip_module.html#variables

本文分享自微信公众号 - 云原生生态圈(CloudNativeEcoSystem)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ​GoLANG IN ACTION 2020

    因为头脑发热选择go语言?我想可能不是,在经过一系列的了解和调研后,我是认真的选择了golang, 当Rob Pike不满C++委员会要新添加35中新特性之后,...

    公众号: 云原生生态圈
  • 带命令行控制台的轻量级日志分析工具-GoAccess

    对于想在短时间内快速的生成小站点访问情况的统计数据,一般会选择使用sed、awk、grep三剑客,但是对于要对数据的展示就需要填充到已有开发面板中,比较耗时费力...

    公众号: 云原生生态圈
  • Lazydocker:专为"懒人"设计命令行可视化工具

    平时的工作管理中会使用到各种各样的命令行工具,有些人是比较厌烦的去学习各种命令以及选项,比如Docker的各种命令和选项其实都让人很头大,于是就有人做出来一款名...

    公众号: 云原生生态圈
  • gRPC背压流控、压缩及JSON通信【知识笔记】

    本文继续整理gRPC的使用,走查解读官方给出的压缩示例、使用JSON通信以及手动流量控制。

    瓜农老梁
  • Volley从源码梳理主要工作流程简记

    重点来了。 这里开启了一个缓存调度线程CacheDispatcher,一个网络请求调度线程NetworkDispatcher。

    coderZhen
  • 使用http-server搭建web服务器

    php命令可以用php -S 0.0.0.0:8080 python命令可以用 python -m SimpleHTTPServer 80

    lilugirl
  • python中文编码&json中文输出问

    python2.x版本的字符编码有时让人很头疼,遇到问题,网上方法可以解决错误,但对原理还是一知半解,本文主要介绍 python 中字符串处理的原理,附带解决 ...

    py3study
  • teg nginx访问量-错误率-延迟grafana展示

    conf/vhost.d/bthlt.com/k8s/api.bthlt.com.conf

    葫芦
  • 聊聊canal的EventTransactionBuffer

    canal-1.1.4/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/EventTrans...

    codecraft
  • 聊聊canal的EventTransactionBuffer

    canal-1.1.4/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/EventTrans...

    codecraft

扫码关注云+社区

领取腾讯云代金券