前情提要:Nginx 的编译。对于网页服务器来说,配置的说道可比编译要多不少,因此只用一篇文章可能讲不完(并不是为了多水几篇)。本文主要讲一些简单的通用配置。
Nginx 的配置文件
编译的时候有参数可以指定配置文件的位置,见这里的第 7 行。执行 nginx -V 可以看到当时的编译参数。一般来说常见的位置有 /etc/nginx/nginx.conf、/usr/local/var/nginx/nginx.conf 等。
文件结构
nginx.conf 的配置布局是块状的,结构大致如下:
| |
全局部分的内容一般可以不用改,其中有不少选项在编译参数中也指定了默认值。我们主要修改的是网页服务器,也就是 http 这部分。为了防止配置文件过大,一般采用拆分配置文件然后引用的办法,在这里就是 include 的那一行。因此我们只需要修改 conf.d 文件夹下的配置文件即可。这里提供一下我使用的 http {} 模板:
| |
server 配置
我们可以建立一个网页配置文件 conf.d/myserver.conf。
一个简单的 server 配置
| |
- 每一句配置以英文分号结束。
- listen 就是监听设置,可以是 IP:端口的形式,也可以只写端口,此时默认监听 IP 为 0.0.0.0。
- server_name 是虚拟主机名,也就是访问时所用的域名。
- location 开头的语句块就是路由规则:
- / 是指匹配访问根目录。
- root 是在文件系统里的目录。
- index 是路径下的默认主页。
- 路由规则可以有若干个,匹配的模式也不少。除了上面这种最长前缀匹配外,还有精准匹配以及正则表达式等,具体可参阅官方文档。
不是很懂?看看这几个例子
当你访问 http://www.example.com/ 时:
- 翻译成(伪)HTTP 请求就是
GET /并包含Host: www.example.com头。 - 寻找 server_name 含有 www.example.com 的 server。
- 匹配 / 规则,因此:
- 服务器的上下文目录为
/var/www/html - 没有加具体文件,自动寻找主页
index.html,如果没有就依次匹配后面的index.htm。如果都没有就返回 404 错误。 - 本质上浏览器访问到的是服务器上
/var/www/html/index.html的内容。
- 服务器的上下文目录为
- 翻译成(伪)HTTP 请求就是
当你访问 http://example.com/dir/file.txt 时:
- 翻译成(伪)HTTP 请求就是
GET /dir/file.txt并包含Host: example.com头。 - 寻找 server_name 含有 example.com 的 server。
- 匹配 / 规则,因此:
- 服务器的上下文目录为
/var/www/html - 寻找
/dir/file.txt,如果没有就返回 404 错误。 - 本质上浏览器访问到的是服务器上
/var/www/html/dir/file.txt的内容。
- 服务器的上下文目录为
- 翻译成(伪)HTTP 请求就是
当你访问 http://example.com/somewhere/foo/bar.txt 时:
- 翻译成(伪)HTTP 请求就是
GET /somewhere/foo/bar.txt并包含Host: example.com头。 - 寻找 server_name 含有 example.com 的 server。
- 根据最长前缀,匹配到 /somewhere 规则,因此:
- 服务器的上下文目录为
/tmp/nginx - 寻找
foo/bar.txt,如果没有就返回 404 错误。 - 本质上浏览器访问到的是服务器上
/tmp/nginx/foo/bar.txt的内容。
- 服务器的上下文目录为
- 翻译成(伪)HTTP 请求就是