Web 服务器一项重要的任务是提供静态文件访问(例如:图像、静态HTML页面、CSS、JS等)。
下面将实现一个示例:根据客户端请求,从不同的本地目录提供文件:/data/www(可能包含 HTML 文件)和 /data/images(包含图像)。
这需要编辑 nginx.conf 配置文件并在 http 块内设置一个带有两个 locations 块的 server 块。
首先,创建 /data/www 目录并将包含任何文本内容的 index.html 文件放入其中,然后创建 /data/images 目录并在其中放置一些图像。
接下来,打开 nginx.conf 配置文件。默认配置文件已经包含了 server 块的几个示例,大部分都被注释掉了。现在注释掉所有这些块并启动一个新的 server 块:
http { server { } }
通常,配置文件可能包含多个 server 块,这些 server 块由它们侦听的端口和服务器名称来区分。一旦 nginx 决定哪个 server 处理请求,它就会根据 server 块中定义的 location 指令的参数测试请求标头中指定的 URI。
将以下 location 块添加到 server 块:
location / { root /data/www; }
此 location 块指定与来自请求的 URI 相比的 “/” 前缀。对于匹配请求,URI 将被添加到 root 指令中指定的路径,即 /data/www,以形成本地文件系统上所请求文件的路径。如果有多个匹配的位置块,nginx 会选择前缀最长的那个。上面的位置块提供最短的前缀,长度为 1,因此只有当所有其他位置块都无法提供匹配时,才会使用此块。
接下来,添加第二个 location 块:
location /images/ { root /data; }
它将匹配以 /images/ 开头的请求(位置 / 也匹配此类请求,但前缀较短)。
server 块的结果配置应如下所示:
server { location / { root /data/www; } location /images/ { root /data; } }
上面配置已经是一个 server 的工作配置,它侦听标准端口 80,并且可以在本地机器上访问 http://localhost/。为了响应以 /images/ 开头的 URI 的请求,服务器将从 /data/images 目录发送文件。例如,为了响应 http://localhost/images/example.png 请求,nginx 将发送 /data/images/example.png 文件。 如果这样的文件不存在,nginx 将发送一个响应,指示 404 错误。 URI 不以 /images/ 开头的请求将映射到 /data/www 目录。例如,为了响应 http://localhost/some/example.html 请求,nginx 将发送 /data/www/some/example.html 文件。
要应用新配置,请在 nginx 尚未启动时启动它,或者通过执行以下命令将重新加载信号发送到 nginx 的主进程:
nginx -s reload
如果某些事情没有按预期工作,您可以尝试在 /usr/local/nginx/logs 或 /var/log/nginx 目录中的 access.log 和 error.log 文件中找出原因。