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

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.kler.cn/news/365246.html

相关文章:

  • 微信小程序性能优化 ==== 合理使用 setData 纯数据字段
  • 服务器与普通电脑的六大区别
  • #数据结构(二)--栈和队列
  • 【Javaee】网络原理—TCP协议的核心机制
  • GPIO输入和输出
  • 如何对pdf文件进行加密?pdf文件加密全攻略与深度解析(5个方法)
  • Docker 部署 EMQX 一分钟极速部署
  • 数据结构之顺序表——王道
  • 为了数清还有几天到周末,我用python绘制了日历
  • 两个yaml转成的 excel对比
  • Redis3
  • 【C】数组(array)
  • PHP PDO:安全、灵活的数据持久层解决方案
  • 【ios】---SwiftUI开发从入门到放弃
  • 每日一题——第一百一十八题
  • TCP控制位|标志位
  • 走廊泼水节——求维持最小生成树的完全图的最小边权和
  • HUAWEI_HCIA_实验指南_Lib3.2_配置Trunk接口
  • Spring Boot整合Stripe订阅支付指南
  • 线程池——Java
  • OCR提取影印版PDF文档的中日英三种文字
  • VUE中文本域默认展示最底部内容
  • C++20中头文件ranges的使用
  • 10.25学习
  • opencv 图像翻转- python 实现
  • 网站建设中需要注意哪些安全问题?----雷池社区版