一、Nginx 配置文件的整体结构

原笔记先给出了 /etc/nginx/nginx.conf 的典型内容:

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

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;
    keepalive_timeout  65;

    include /etc/nginx/conf.d/*.conf;
}

从这个示例可以看出,Nginx 配置通常分为:

  • 全局指令
  • events 区域
  • http 区域
  • 通过 include 引入的子配置文件

二、写 Nginx 配置时有哪些基本约定

原笔记特别提醒了几条常用规则:

  • 大多数配置行结尾要加分号 ;
  • 遇到 {}() 这种区域结构时不需要额外再加分号
  • user 这类内容属于 Nginx 指令
  • server {} 这类结构可以理解为配置区域

掌握这些基本规则之后,再看具体指令就不容易混淆。

三、主配置文件里先掌握哪些指令

原笔记把几条需要优先熟悉的指令点了出来:

  • include:文件包含,用于引用其他 Nginx 配置文件
  • user:指定 Nginx 运行用户
  • error_log:错误日志
  • access_log:访问日志

其中最重要的一条是:

include /etc/nginx/conf.d/*.conf;

它决定了网站级别的配置通常会拆到 conf.d/ 目录中去管理,而不是全部写进主配置文件里。

四、默认子配置文件长什么样

原笔记还给出了 /etc/nginx/conf.d/default.conf 的示例:

server {
    listen       80;
    server_name  localhost;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

这份默认配置已经包含了一个最基础的网站站点。

五、网站配置里最常用的几个指令

原笔记把子配置文件中的常用指令整理如下:

指令 说明
listen 指定监听端口
server_name 指定域名,多个值可用空格分隔
location 匹配请求中的 URI
root 指定站点目录
index 指定首页文件
error_page 指定错误状态码对应的页面

其中最容易和文件系统路径混淆的是 root

root /app/code/www;

如果用户访问:

http://www.baidu.com/lidao/lidao.txt

那么对应查找的文件路径就是:

/app/code/www/lidao/lidao.txt

这也正好和前面 HTTP 协议里 URI 的概念对应起来。

六、为什么首页文件很重要

原笔记提出了一个典型问题:如果删除首页文件,然后直接访问站点而不指定具体文件,会发生什么?

给出的答案是:

  • 返回 403
  • 原因通常是首页文件不存在或访问受限

这说明 index 指令并不是可有可无的装饰项,而是默认访问行为的重要组成部分。

七、修改配置后别忘了什么

原笔记在配置文件小结里强调了一点:

  • 修改了 Nginx 配置之后,要重启或重新加载 Nginx

这也是为什么在日常运维中,配置变更和服务重载总是成对出现。

八、小结

学习 Nginx 配置文件,最重要的是先把结构看清楚:

  • nginx.conf 负责全局层面的定义
  • conf.d/*.conf 负责具体网站配置
  • serverlocationrootindex 是网站配置的核心指令

把这些基础指令掌握住,后面无论是单站点、多站点还是反向代理配置,都会更容易上手。