当前位置: 首页 > news >正文

nginx配置文件详解

一 配置文件结构

Nginx 配置文件的结构是层次化的,它由多个上下文(contexts)和指令(directives)组成。每个上下文可以包含其他上下文或指令。下面是 Nginx 配置文件的基本结构详解:

1. 主配置文件

主配置文件通常命名为 nginx.conf,位于 /etc/nginx/ 目录下。这个文件定义了全局设置,并且可以包含其他的配置文件。

全局块
  • user:指定运行 Nginx 进程的用户。
  • worker_processes:设置工作进程的数量。
  • error_log:定义错误日志的位置及严重性级别。
  • pid:指定存放 Nginx 主进程 ID 的文件路径。
user  nginx;
worker_processes  auto;error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

2. 事件模块

events 块用于配置连接处理的特性,比如使用哪种 I/O 模型、每个工作进程的最大连接数等

events {worker_connections  1024; # 单个工作进程允许的最大客户端连接数use epoll; # 在Linux上建议使用epoll模型
}

3. HTTP模块

http 块包含了所有与HTTP相关的设置,包括虚拟主机、缓存、代理、重写规则等。

HTTP全局设置
  • include:用来包含其它配置文件。
  • default_type:默认响应内容类型。
  • log_format:自定义日志格式。
  • access_log:访问日志位置。
  • sendfile:开启高效文件传输模式。
  • keepalive_timeout:保持活动连接的超时时间。
http {include       mime.types; # 包含MIME类型文件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  logs/access.log  main;sendfile        on;keepalive_timeout  65;
}

4. 服务器块 (server)

http 块内,可以有多个 server 块,每个 server 块定义了一个虚拟主机。

  • listen:监听的端口。
  • server_name:服务名或域名。
  • root:网站根目录。
  • index:默认首页文件。
  • location:基于请求的URI来匹配不同的配置。
  • proxy_pass:反向代理设置。
  • try_files:尝试按顺序加载文件。
http {...server {listen       80;server_name  example.com;root   /usr/share/nginx/html;index  index.html index.htm;location / {try_files $uri $uri/ =404;}location /images/ {root /data/images;}location ~ \.php$ {fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;include        fastcgi_params;}}...
}

5. 其他上下文

除了上述主要上下文之外,还有 mailstream 上下文,分别用于邮件代理和TCP/UDP流协议处理。

6. 注释

Nginx 支持使用 # 来注释掉配置行。

二 配置文件组成

Nginx 配置文件由多个上下文(contexts)和指令(directives)组成,每个上下文可以包含一个或多个指令以及其他上下文。下面详细解释 Nginx 配置文件的组成部分:

1. 上下文(Contexts)

上下文定义了配置项的作用范围。Nginx 的主要上下文包括:

  • 主上下文 (main context):这是最外层的上下文,它包含了影响整个 Nginx 进程的设置。
  • 事件上下文 (events context):这个上下文用于定义如何处理连接、保持连接等事件相关的参数。
  • HTTP上下文 (http context):这个上下文包含了所有与 HTTP 服务器相关的配置。
  • 邮件上下文 (mail context):这个上下文用于配置 IMAP/POP3/SMTP 代理服务器。
  • 流上下文 (stream context):这个上下文用于配置 TCP 和 UDP 代理。

2. 指令(Directives)

指令是具体的配置选项,它们告诉 Nginx 如何工作。指令可以在不同的上下文中使用,并且有的指令只能在特定的上下文中出现。

主上下文中的常见指令
  • user:指定 Nginx 工作进程运行的身份。
  • worker_processes:设置 Nginx 工作进程的数量。
  • error_log:指定错误日志的位置及严重性级别。
  • pid:指定存放 Nginx 主进程 ID 的文件路径。
事件上下文中的常见指令
  • worker_connections:单个工作进程允许的最大客户端连接数。
  • use:指定使用的 I/O 多路复用模型,如 epoll 或 select
HTTP上下文中的常见指令
  • include:用来包含其他配置文件。
  • server:定义虚拟主机。
  • location:基于请求的 URI 来匹配不同的配置。
  • root:设定网站根目录。
  • index:定义默认首页文件。
  • proxy_pass:设置反向代理的目标地址。
  • fastcgi_pass:设置 FastCGI 服务器的地址。
  • sendfile:开启高效文件传输模式。
  • keepalive_timeout:保持活动连接的超时时间。

3. 块(Blocks)

块是由一对大括号 {} 包围的一组指令,这些指令属于同一个上下文。例如,server 块定义了一个虚拟主机,而 location 块则定义了针对特定 URL 路径的处理规则。

4. 注释

Nginx 使用 # 符号来表示注释,从 # 开始到行尾的所有内容都会被 Nginx 忽略。

5. 变量(Variables)

Nginx 支持使用变量来存储信息并在配置中引用。变量通常以 $ 开头,比如 $host$uri 等。

示例配置

# 主上下文
user  nginx;
worker_processes  auto;error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;# 事件上下文
events {worker_connections  1024;
}# HTTP上下文
http {include       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;keepalive_timeout  65;# 定义虚拟主机server {listen       80;server_name  localhost;# 网站根目录root   /usr/share/nginx/html;index  index.html index.htm;location / {try_files $uri $uri/ =404;}location /images/ {root /data/images;}# PHP 处理location ~ \.php$ {fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;include        fastcgi_params;}}
}

http://www.mrgr.cn/news/57516.html

相关文章:

  • 接口测试(六)jmeter——参数化(配置元件 --> 用户定义的变量)
  • 初始JavaEE篇——多线程(2):join的用法、线程安全问题
  • LabVIEW提高开发效率技巧----图像处理加速
  • 【电子元件】光通量和色温 (欧司朗LED灯珠 KW3 CGLNM1.TG命名规则)
  • qt QNetworkProxy详解
  • linux运行openfoam并行会报错:attempt to run parallel on 1 processor
  • tesseract-ocr 文本识别开发指南
  • Vue2中几个目录
  • 1024:只为遇见更好的自己
  • NumPy 与 Pandas 数据操作对比:从高效计算到灵活分析的转变
  • 基于大模型的Milvus向量数据库的背景与实战应用,计算与索引机制,Python代码实现
  • 如何在浏览器中打开预览pdf,而不是下载
  • 基于neo4j的疫情信息管理系统
  • C# 委托简述
  • 基于SSM健身国际俱乐部系统的设计
  • 好的代码——个人观点
  • 2024怎么保护企业办公文件?10款企业常用的文件加密软件排行榜!
  • docker部署SQL审核平台Archery
  • 【Python学习】Python基础,对于库和框架的讲解(优点缺点)小白必备的!!!
  • 邦芒干货:职场中这三种人值得深交
  • 手持无人机飞手执照,会组装调试入伍当兵有多香!
  • 发现创新的力量:我们的网址专利检索平台
  • 文心一言 VS 讯飞星火 VS chatgpt (376)-- 算法导论24.4 8题
  • Leetcode3. 无重复字符的最长子串
  • 【网络协议栈】Tcp协议(下)的可靠性和高效性(超时重传、快速重传、拥塞控制、流量控制)
  • Spring Boot植物健康系统:智能农业的春天