前情提要: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 请求就是