Nginx系列-基础模块配置

789 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

背景

Nginx 可以用于作为静态资源服务器反向代理服务,以及,在微服务体系下,也可被作为网关来使用,配合Lua做限流、熔断等。我们平常通常使用它作为静态资源服务器或者http请求转发器,把静态文件的请求直接返回静态文件资源,把动态的请求转发给后台处理程序,如tomcat等。它具备如下的特点:

  • 性能好,占用很少的系统资源,支持更多的并发连接
  • 支持热部署
  • 扩展性好、可靠性强
  • 它是开源

现在看看如何玩起一个nginx配置。

环境搭建

本篇文章是基于window环境。

1.1 下载地址

Nginx下载地址

1.2 基础命令

以下脚本命令均在nginx安装目录下执行,如:D:t\nginx-1.19.10

  1. 启动
start nginx  
# 或者
nginx
  1. 停止
nginx -s stop
# 或者
nginx -s quit
  1. 重新载入
nginx -s reload

当你启动nginx失败的时候,在nginx目录下的logs文件夹会产生对应的错误日志文件,可以前去查看错误日志 error.log。若是nginx启动端口被占用了,可在配置文件nginx-1.19.10\conf\nginx.conf修改应用启动的默认端口。

location

# 仅提供部分案例
http {
  server {
     # 匹配所有请求
     location / {
     }
     # 访问的URI是"/"时,返回html文件夹底下,匹配到的文件内容
     location = / {
     	# 指定URI访问的目录
     	root html; 
        # httpIndex模块,该指令用来指定用来做默认文档的文件名
        index index.html index.html;
     }
     # 配置图片请求,/html/static/img/ 为图片所在文件
     location ~* .(png|jpg|jpeg|gif)$ {
     	root /html/static/img/
     }
     # 这里最终会访问 /www/root/html/ 目录下的资源
     location ^~ /conf/ {
     	alias /www/root/html/
     }
  }
}

上面配置使用到了root和alias,这两者的区别在于如下:

  1. alias 只能处于location块中,而root则可以在 http/server/location/if 这些配置块
  2. alias 是别名的意思,指定的是URI请求的具体路径,而 root 则是指定URI路径的上级目录
  3. 使用 alias 时,目录名后面一定要用“/”,否则可能找不到文件

gzip压缩

http {
  # 开启或者关闭gzip模块
  gzip on;
  # 设置压缩的页面最小字节符
  gzip_min_length  1000;
  # 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流
  gzip_buffers     4 8k;   
  # gzip压缩比,1压缩比最小处理速度最快,9是压缩比最大处理速度最慢(传输快,但消耗内存)
  gzip_comp_level 6;
  # 识别http的协议版本,防止老旧客户端可能不支持gzip自解压
  gzip_http_version 1.1; 
  # 匹配MIME类型进行压缩,无论是否指定text/html都会被压缩
  gzip_types  text/plain application/x-javascript text/css text/html application/xml;
}

知识点补充:

  1. gzip 作用域有http,server,location等
  2. 二进制资源文件没必要开启压缩,因为压缩率低,比起CPU资源的消耗来得不划算

日志开启

http {
    # 打印日志的格式,使用nginx内置变量
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    # 日志保存位置                  
    access_log  logs/access.log  main;
}

补充下nginx变量都有哪些,方便后续配置,这些变量都存在与nginx的核心模块中。

  1. $remote_addr:客户端IP地址
  2. $remote_user:用于HTTP基础认证服务的用户名
  3. $time_local:访问时间
  4. $request:get请求的url地址
  5. $request_body:客户端的请求体
  6. $status:请求状态码
  7. $body_bytes_sent:请求页面大小(byte)
  8. $http_referer:来源页面,请求头中的referer
  9. $http_user_agent:浏览器的信息,版本、类型等

当然还有更多的变量,这里就不一一列举了。

总结

前端要不要懂nginx?负载均衡?这是个争议话题,但上面三个基本入门配置,已经能够了解到客户端发起请求到nginx,在反向代理服务器能够干啥事情了。资源缓存配置、反向代理等配置,下期更新...

下一期:
Nginx系列-资源缓存配置
Nginx系列-正/反向代理

参考文献:

www.nginx.cn/doc/standar…

www.nginx.cn/doc/standar…