一、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负责具体网站配置server、location、root、index是网站配置的核心指令
把这些基础指令掌握住,后面无论是单站点、多站点还是反向代理配置,都会更容易上手。