解析Nginx配置文件conf中的常用块

解析Nginx配置文件conf中的常用块

Nginx是一个高性能的HTTP和反向代理服务器,它的配置文件主要由多个块组成。本文将介绍Nginx配置文件中的常用块及其功能。

  1. events块
    events块用于设置Nginx的工作模式和连接数相关的参数。
bash 复制代码
events {
    worker_connections  1024; # 单个工作进程的最大连接数
}
  1. http块
    http块用于配置Nginx处理HTTP请求的相关参数。
bash 复制代码
http {
    include       mime.types; # 包含MIME类型文件
    default_type  application/octet-stream; # 默认MIME类型
    sendfile        on; # 开启高效文件传输模式
    keepalive_timeout  65; # 长连接超时时间(秒)
    gzip  on; # 开启GZIP压缩
}
  1. server块
    server块用于配置一个虚拟主机。可以有多个server块,但只能有一个server块包含listen指令。
bash 复制代码
server {
    listen       80; # 监听端口
    server_name  example.com; # 域名
    root         /var/www/example.com; # 网站根目录
    index        index.html index.htm; # 默认首页文件名
}
  1. location块
    location块用于匹配URL路径,并配置相应的处理方式。可以有多个location块。

4.1 location /块

bash 复制代码
location / {
    root   /usr/share/nginx/html; # 网站根目录
    index  index.html index.htm; # 默认首页文件名
}

4.2 location ~ .php$块

bash 复制代码
location ~ \.php$ {
    root           /usr/share/nginx/html; # PHP脚本根目录
    fastcgi_pass   127.0.0.1:9000; # PHP-FPM地址和端口
    fastcgi_index  index.php; # PHP-FPM默认文件名
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; # PHP-FPM参数
    include        fastcgi_params; # 包含PHP-FPM参数文件
}
  1. upstream块
    upstream块用于配置后端服务器组,实现负载均衡。可以有多个upstream块。
bash 复制代码
upstream backend {
    server backend1.example.com weight=3; # 权重为3的后端服务器1
    server backend2.example.com; # 后端服务器2,权重默认为1
}
  1. proxy_pass指令
    proxy_pass指令用于将请求转发到后端服务器。通常用在location或if块中。
bash 复制代码
location /api {
    proxy_pass http://backend; # 将请求转发到名为backend的upstream中定义的服务器组
}
  1. try_files指令
    try_files指令用于尝试按顺序查找文件。如果找到,则直接返回文件内容;否则,继续查找其他指令。通常用在location或if块中。
bash 复制代码
location / {
    try_files $uri $uri/ =404; # 按顺序查找文件,找不到则返回404错误页面
}
  1. map指令和split_clients模块(仅适用于Nginx Plus)
    map指令和split_clients模块可以实现基于客户端IP地址的会话亲和性。这在需要将特定用户群分配到特定服务器的场景中非常有用。需要注意的是,这个功能仅适用于Nginx Plus版本。

首先,需要在编译Nginx时启用split_clients模块:

bash 复制代码
--with-http_split_clients_module # 在configure命令中添加该选项,然后重新编译Nginx

然后,在配置文件中使用map指令和split_clients模块:

bash 复制代码
http {
    ...
    map $remote_addr $backend { # 根据客户端IP地址映射到后端服务器组名的变量值,例如:192.168.1.1 -> "backend1",192.168.1.2 -> "backend2" ... } # 根据实际需求自定义映射关系 split_clients "$backend"; # 根据上一步定义的变量值进行会话亲和性分配 ... server { ... } ... } } } } } } } } } } } } } } } } } } } } } } } } } } } } ... server { ... } ... } } } } } } } ... } } ... } ... } ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... # 根据实际需求自定义后端服务器组和相关配置信息... server { listen 80; server_name example.com; location / { root /var/www/example.com; index index.html index.htm; try_files $uri $uri/ =404; } location /api { map $backend $backend_host { default "backend1"; ~^backend[1-9]$ "backend2"; ~^backend[1-9][0-9]$ "backend3"; ~^backend[1-9][0-9][0-9]$ "backend4"; ~^backend[1-9][0-9][0-9][0-9]$ "backend5"; ~^backend[1-9][0-9][0-9][0-9][0-9]$ "backend6"; ~^backend[1-9][0-9][0-9][0-9][0-9][0-9]$ "backend7"; ~^backend[1-9][0-9][0-9][0-9][0-9][0-9][0-9]$ "backend8"; ~^backend[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$ "backend9"; } set $backend "${backend}${remote_addr}"; set $backend_host "${backend_host}:8080"; proxy_pass http://$backend_host; }}}'d

结尾

以上就是本期的全部内容!一键三连拜谢!

相关推荐
Escalating_xu3 小时前
【Linux 网络编程】手写序列化与反序列化:从 x op y 到能校验的文本协议
linux·运维·网络
润滑卫士3 小时前
油液多参数融合故障诊断:数据级融合与决策级融合方法
运维
美狐美颜SDK开放平台4 小时前
准备开发直播APP?视频美颜SDK接入前的十项检查清单
android·ios·音视频·直播美颜sdk·视频美颜sdk
传奇开心果编程4 小时前
【Jetpack Compose娓娓道来】第26课:Repository模式与数据层设计——数据的唯一入口
android·移动开发·1024程序员节·jetpack compose·编程语言理论·编程框架·声明式ui
李纲明4 小时前
WordPress 后台登录马上被踢回登录页:Cookie 域、HTTPS、盐值和页面缓存怎么查
运维·缓存·https·php·wordpress·cookie
todoitbo5 小时前
在 Ubuntu ARM64 上运行 Q1 V3.0 MuJoCo 模型:加载、步进和单执行器响应
linux·运维·ubuntu·ai·机器人·仿真教程·启元
AR-26710-5 小时前
Linux Day26——传输层与三次握手
linux·运维
额额额对了6 小时前
嵌入式 Linux 实战:i.MX6ULL 上的 CAN 通信与摄像头采集
linux·运维·服务器
RFID科技的魅力7 小时前
2026 年 RFID 资产标签批量制作怎么做?RFID 标签打印机实操指南
运维·人工智能·嵌入式硬件·物联网
灯澜忆梦7 小时前
【Linux】#10 | Linux 终端实用快捷键 + 安装应用
linux·运维·服务器