nginx配置参数
1 简介
nginx是很常用的轻量级web服务或代理服务,它有支撑百万并发的强大实力。nginx也应用到了金蝶云苍穹系统中,并提供了如下功能:
(1)苍穹入口,反向代理,为苍穹携带header传租户编码,苍穹服务数据中心等信息都依赖租户编码
(2)提供应用仓库功能,实现动态微服务,即各微服务可动态加载应用包
(3)存放苍穹静态资源,实现动静分离,便于CDN加速
(4)提供补丁仓库功能,便于mc去更新苍穹补丁
(5)其他方案的实现,如内外网访问隔离、多地址访问方案等
2 基础运维
2.1 nginx服务启停
方法一、系统服务方式
nginx启动命令:systemctl start nginx
nginx停止命令:systemctl stop nginx
nginx平滑加载:systemctl reload nginx
nginx应用状态:systemctl status nginx
方法二、手动命令方式(以安装编译到/usr/local/nginx为例)
nginx检测语法:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -t
nginx启动命令:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nginx停止命令:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -s stop
nginx平滑加载:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -s reload
2.2 nginx配置文件与日志文件
nginx配置文件(以安装编译到/usr/local/nginx为例):默认在 /usr/local/nginx/conf/nginx.conf,然后nginx.conf文件中会使用include来扩展加载其他的文件便于分类维护。
nginx日志文件路径需要查看配置文件中定义的access_log和error_log值来判断。
3 配置介绍
nginx配置大致分为如下区块:
(1)全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等
(2)events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等
(3)stream块:用来实现四层协议的转发、代理或者负载均衡等
(4)upstream块:数据转发功能,为nginx提供了跨越单机的横向处理能力,也提供负载均衡能力。
http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等
(5)server块:配置虚拟主机的相关参数,一个http中可以有多个server
(6)location块:配置请求的路由,以及各种页面的处理情况
如下图:
4 参数介绍
参数名称 | 参数位置 | 推荐值 | 参数说明 |
user | 全局块 | root | 用于指定worker进程运行时所基于的用户和用户组,默认都为nobody。Linux系统中普通用户不能使用1024以下的端口,语法: user [username] [groupname];不指定组名,默认与用户名相同 |
worker_processes | 全局块 | auto | worker进程的个数,通常应该略少于CPU物理核心数,也可以使用auto自动获取 |
worker_connections | events块 | 61024 | 单个worker进程打开的最大并发连接数 |
server_tokens | http块 | off | 打开或关闭错误页面中的nginx版本号 |
gzip | http块 | on | 设置nginx采用gzip压缩的形式发送数据,减少发送数据量,但会增加请求处理时间及CPU处理时间 |
keepalive_timeout | http块 | 65 | 每个tcp连接的超时时长,默认为75s |
large_client_header_buffers | http块、server块 | 4 512k | 该参数主要是在用户的请求头部信息超过了client_header_buffer_size所能存储的大小时使用,该参数定义了每个header所能传输的数据的大小,以及最多能够传输多少个header。如果单个header大小超限,则会返回414(Request URI too large)状态码,如果是header个数超限,则会返回400(Bad Request)状态码。 |
include | http块 | conf.d/*.conf | 加载主配置文件以外的配置文件,方便配置文件的维护 |
log_format | http块 | 参考参数说明中的建议值 | 定义日志输出格式,建议值: log_format ierp '$remote_addr - $remote_user [$time_local] "$request" "cqappid:$http_cqappid" "traceId:$http_traceId" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for" "$upstream_response_time"'; |
access_log | location块、server块、http块 | 实际情况调整 | 访问日志主要用于记录客户端的请求,存储路径空间大一点 |
error_log | location块、server块、http块 | 实际情况调整 | 记录了访问出错的信息,存储路径空间大一点 |
listen | server块 | 实际情况调整 | 配置监听的端口号,如果不配置,则默认为80端口。也可以设置使用ssl协议 |
server_name | server块 | localhost | 定义主机名,主机名可以有多个,名称还可以使用正则表达式(~)或通配符。 请求中的Host头部的主机名与server块中的主机名进行匹配 |
proxy_pass | location块 | 实际情况调整 | 定义转发到后端负载的一个或一组服务器 |
proxy_set_header | location块 | 实际情况调整 | 用来设定被代理服务器接收到的header信息 |
proxy_connect_timeout | location块 | 1800 | nginx与后端服务器的连接超时时间。http请求无法立即被处理,被放在nginx的待处理池中等待被处理。此参数为等待的最长时间,默认60秒 |
proxy_send_timeout | location块 | 1800 | nginx发送数据至后端服务器的超时时间,默认60s,如果连续的60s内没有发送1个字节,连接关闭 |
proxy_read_timeout | location块 | 1800 | Nginx接收到后端服务器数据的超时时间,默认60s,如果连续的60s内没有接收1个字节,连接关闭 |
client_max_body_size | location块、server块、http块 | 2048m | 限制请求体的大小,若超过所设定的大小,返回413错误 |
proxy_max_temp_file_size | location块 | 2048m | 每个请求能用磁盘上临时文件最大大小,这些当上游响应太大不能装配到缓冲区时被创建 |
proxy_http_version | location块 | 1.1 | 设置用于代理的HTTP协议版本。默认1.0版本。推荐1.1版本用于保持连接和NTLM认证 |
proxy_cookie_path | location块 | 实际情况调整 | 用于改变cookie的路径 |
5 location匹配规则优先级
根据上图的优先级规则,我们举个例子:
假如,有如下匹配规则:
location = / { echo "规则A"; } location = /login { echo "规则B"; } location ^~ /static/ { echo "规则C"; } location ^~ /static/files { echo "规则X"; } location ~ \.(gif|jpg|png|js|css)$ { echo "规则D"; } location ~* \.webp$ { echo "规则E"; } location /img { echo "规则Y"; } location / { echo "规则F"; }
那么产生的效果如下:
访问根目录 /,比如 http://localhost/ 将匹配 规则A 访问 http://localhost/login 将匹配 规则B,http://localhost/register 则匹配 规则F 访问 http://localhost/static/a.html 将匹配 规则C 访问 http://localhost/static/files/a.exe 将匹配 规则X,虽然 规则C 也能匹配到,但因为最大匹配原则,最终选中了 规则X。你可以测试下,去掉规则 X ,则当前 URL 会匹配上 规则C。 访问 http://localhost/a.webp, http://localhost/b.webp 将匹配 规则D 。 访问 http://localhost/static/c.webp 将匹配到 规则C,虽然 规则 D 也能匹配到,但前缀匹配的 规则C 优先级更高。 访问 http://localhost/a.webp 则匹配 规则 D ,而不会匹配 规则 E ,因为 规则 D 区分大小写,精确度高于 规则 E。 访问 http://localhost/a.PNG 则匹配 规则 E ,而不会匹配 规则 D ,因为 规则 E 不区分大小写。 访问 http://localhost/img/a.webp 会匹配上 规则D,虽然 规则Y 也可以匹配上,但是因为正则匹配优先,而忽略了 规则Y。 访问 http://localhost/img/a.tiff 会匹配上 规则Y。 访问 http://localhost/category/id/1111 则最终匹配到规则 F ,因为以上规则都不匹配,这个时候应该是 Nginx 转发请求给后端应用服务器,比如 FastCGI(php),tomcat(jsp),Nginx 作为反向代理服务器存在。
6 常见状态码说明
状态码 | 说明 |
200 | 请求已成功,请求所希望的响应头或数据体将随此响应返回 |
301、302 | 请求的资源重定向到新位置。301是永久重定向,302是临时重定向 |
400 | 请求头过大或无效的请求(请求参数有误) |
403 | 服务器已经理解请求,但是拒绝执行它。与401响应不同的是,401是身份验证不通过被拒绝 |
404 | 请求失败,请求所希望得到的资源未被在服务器上发现 |
413 | 服务器拒绝处理当前请求,因为该请求提交的实体数据大小超过了服务器能够处理的范围。 |
500 | 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现 |
502 | 从上游服务器接收到无效的响应,或无法接收到有效的响应。 |
504 | 未能及时从上游服务器或者辅助服务器(例如DNS)收到响应 |
状态码查看:浏览器通过F12的Network页签 或者 nginx日志文件:access_log或error_log
nginx配置参数
本文2024-09-23 01:13:54发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-144618.html