小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
背景
Nginx 可以用于作为静态资源服务器,反向代理服务,以及,在微服务体系下,也可被作为网关来使用,配合Lua做限流、熔断等。我们平常通常使用它作为静态资源服务器或者http请求转发器,把静态文件的请求直接返回静态文件资源,把动态的请求转发给后台处理程序,如tomcat等。它具备如下的特点:
- 性能好,占用很少的系统资源,支持更多的并发连接
- 支持热部署
- 扩展性好、可靠性强
- 它是开源
现在看看如何玩起一个nginx配置。
环境搭建
本篇文章是基于window环境。
1.1 下载地址
1.2 基础命令
以下脚本命令均在nginx安装目录下执行,如:D:t\nginx-1.19.10
- 启动
start nginx
# 或者
nginx
- 停止
nginx -s stop
# 或者
nginx -s quit
- 重新载入
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,这两者的区别在于如下:
- alias 只能处于location块中,而root则可以在 http/server/location/if 这些配置块
- alias 是别名的意思,指定的是URI请求的具体路径,而 root 则是指定URI路径的上级目录
- 使用 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;
}
知识点补充:
- gzip 作用域有http,server,location等
- 二进制资源文件没必要开启压缩,因为压缩率低,比起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的核心模块中。
- $remote_addr:客户端IP地址
- $remote_user:用于HTTP基础认证服务的用户名
- $time_local:访问时间
- $request:get请求的url地址
- $request_body:客户端的请求体
- $status:请求状态码
- $body_bytes_sent:请求页面大小(byte)
- $http_referer:来源页面,请求头中的referer
- $http_user_agent:浏览器的信息,版本、类型等
当然还有更多的变量,这里就不一一列举了。
总结
前端要不要懂nginx?负载均衡?这是个争议话题,但上面三个基本入门配置,已经能够了解到客户端发起请求到nginx,在反向代理服务器能够干啥事情了。资源缓存配置、反向代理等配置,下期更新...
下一期:
Nginx系列-资源缓存配置
Nginx系列-正/反向代理
参考文献: