三、nginx 配置文件
Nginx 配置文件
一、Nginx配置文件详解
- 路径
1 | /etc/nginx/nginx .conf |
- 配置文件内容及详解:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | user nginx; # 设置 nginx 服务的系统使用的用户 worker_processes 1; # 工作进程数,一般与 CPU 相等 error_log /var/log/nginx/error .log warn; # nginx 的错误日志 pid /var/run/nginx .pid; # nginx 服务启动时候的 pid events { worker_connections 1024; # 每个进程运行最大连接数<br> # use 工作进程数 } http { include /etc/nginx/mime .types; default_type application /octet-stream ; 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 /var/log/nginx/access .log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf .d/*.conf; } |
注:最后一行,是说明,我们在 nginx.conf 配置文件里面使用了 include 指令包含了 /etc/nginx/conf.d/ 路径下的所有的 conf 文件。
- http 模块的配置,大体配置样式如下:
二、Nginx http模块
Nginx 中的 http 模块从外到内有 http 块、server 块、location 块,同时各个模块有各自的属性元素。每个模块的具体作用如下:
- http块:一个 http 处理模块,可进行 http 的相关参数配置,内可以包含多个 server 块。
- server块:一个虚拟主机,需配置域名和端口,也只处理对应主机域名的 http 请求,内可包含多个 location 块。
- location块:对应具体的路径请求(http 请求)。
1、http块常用配置—upstream
定义上游服务器集群,在反向代理中 proxy_pass 使用,用于负载均衡。如:
1 2 3 4 5 6 7 8 9 10 11 12 | upstream backend{ ip_hash; server 192.168.0.1; server 192.168.0.2:8080; server 192.168.0.3 max_fails=5 fail_timeout=30s; server 192.168.0.4 down; } server { location /{ proxy_pass http: //backend ; } } |
当希望某一请求固定到指定上游服务器上,可以在 upstream 块中加 ip_hash 关键字。注意 upstream 块内的 server 使用。server 的具体规则如下:
- server 后可以是域名、ip 地址或加端口;
- 当某 server 不使用时,则在后加 down 关键字;
- 若希望某一服务器处理更多请求,则可以在后加权重 weight ,如 weight = 10,默认值为 1(不能与 ip_hash 同时使用);
- 配置在指定时间内失败多少次,服务器不可用,可用配置 fail_timeout(失败时间,默认为 10 秒),max_fails(失败次数,默认为 1,若为 0,则不检查失败)。
2、http块常用配置—server
-
listen: 监听的端口,后可加 ip 地址、端口或主机名,如:
1234listen 8080
listen 127.0.0.1:8080
listen *:8080
# 注意:不加端口时,默认监听 80 端口。
-
server_name:server_name 用于与 http 请求 header 头部的 Host 匹配。注意:后可跟多个主机名,主机名也可使用通匹符,如
*.test.com
。 -
location:路径配置—符号有:
=、~、~\*、^~、@
,模式为:location 符号 /uri
,具体解释如下:
符合 | 说明 |
---|---|
= | 表示完全匹配,不存在正则表示,如 location = /uri {…} |
~ | 表示匹配时,大小写敏感的,如 location ~ /uri {…} |
~* | 表示匹配时,大小写不敏感,即忽略大小写问题,如 location ~* /uri {…},这时 /uri,/Uri, /URI 都可以匹配上。 |
^~ | 表示匹配时,只需开头部分匹配上即可,如 location ^~ /uri/ {…} ,这时只要以 /uri/ 开头的地址都会匹配上。 |
@ | 表示 nginx 内部的重定向,不直接处理用户的请求,如 location @error {…} , 这时可以到另一个location 内部,重定向到 @error 路径,如 location ~ /test {error_page 404 @error}。 |
限时请求方法
limit_except 后跟不允许的方法,括号为可限制 ip,同时注意请求方法的包含原则,如限制了 GET 方法,则同时也就限制了 HEAD 方法。如:
1 2 3 4 5 | limit_except GET { allow 192.168.0.1 /32 ; deny all; } # 即禁止除 192.168.0.1 地址外的,方法为 GET 或 HEAD 的请求。 |
配置转发
配置转发的方法 proxy_method,如:
1 2 3 4 | location ~ /test { proxy_method=POST; } # 表示不管请求是什么方法,转发后的方法为 POST。 |
配置转发路径
配置转发路径 proxy_pass,如:
1 2 3 4 5 6 7 | location ~ /test { proxy_pass https: //192 .168.0.5:8080; } location ~ /test1 { proxy_pass https: //backend ; } # 注:转发时,默认不会带上原求的 Host 头部,若想带上,则需加上配置 proxy_set_header Host $host; |
1 2 3 4 | location ~ /test { proxy_method=POST; } # 表示不管请求是什么方法,转发后的方法为 POST。 |
Nginx日志模块
1、
Nginx状态监控模块
- 记录Nginx客户端基本访问状态信息(--with-http_stub_status_module),语法:
1 2 3 | Syntax: stub_status; Default: - Context: server, location # 该模块可定义在server或location下面 |
1、模块配置
1 2 3 4 | location /web_status { stub_status on; access_log off; } |
2、Nginx_status说明
1 2 3 4 5 6 7 8 9 10 11 12 | Active connections: 1 # Nginx当前活跃连接数 server accepts handled requests 3 3 12 Reading: 0 Writing: 1 Waiting: 0 # server表示nginx启动到现在共处理了3个连接; # accepts表示nginx启动到现在共成功创建3次握手; # 请求丢失数=(握手数-连接数); # handled requests表示总共处理12次请求 # Reading: 0 nginx读取到客户端的Header信息数 # Writing: 1 nginxf返回给客户端的Header信息数 # Waiting: 0 nginx开启keep-alive长连接情况下,既没有读取也没有写入 |
Nginx下载站点模块
- Nginx是不允许列出整个目录浏览下载。语法:
1 2 3 | Syntax: autoindex on | off; Default: - Context: http、server、localtion; |
- autoindex常用参数
1 2 3 4 5 6 | autoindex_exact_size off; # 默认为on,显示出文件的确切大小,单位bytes;修改为off,显示文件大概大小,单位kB、MB、GB等 autoindex_localtime on; # 默认为off,显示的文件时间为GMT时间;修改为on,显示的文件时间为文件的服务器时间。 charset utf-8,gbk; # 默认中文目录乱码,添加上解决乱码。 |
1、模块配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # 开启根目录浏览 location / { root /share ; autoindex on; autoindex_localtime on; autoindex_exact_size off; } # 仅开启二级目录浏览 location /down { root /share ; autoindex on; autoindex_localtime on; autoindex_exact_size off; } # 别名 location /upload { alias /share/temp ; autoindex on; autoindex_localtime on; autoindex_exact_size off; } |
Nginx连接限制模块
- 连接频率限制:(limit_conn_module)
-
请求频率限制:(limit_req_module)
HTTP协议版本的连接关系
- HTTP1.0:TCP不能复用
- HTTP1.1:顺序性TCP复用
- HTTP2.0:多路复用TCP复用
Nginx连接限制配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # 语法 # 全局定义请求限制 Syntax: limit_conn_zone key zone=name:size rate=rate; Default: - Context: http # 引用请求限制 Syntax: limit_conn zone number [burst=number] [nodelay]; Default: - Context: http、server、location # http模块配置,rate限制速率,限制每秒最多一个IP请求 limit_req_zone $binary_remote_addr zone=req_zone:1m rate=1r /s ; # location模块配置,1r/s只接收一个请求,多余直接处理掉 limit_req zone=req_zone; # location模块配置,请求超过1r/s,剩下的将被延迟处理,请求数量多余burst定义数量,多余的请求返回503 limit_req zone=req_zone burst=3 nodelay; # 压力测试 # 安装工具 sudo apt-get install apache2-utils # 100次连接,同时并发50次请求 ab -n 100 -c 50 https: //0 .0.0.0/ |
Nginx访问控制模块
Nginx用户认证模块
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现