web:nginx Beginner’s Guide

本文介绍了Nginx的基本配置方法,包括启动、停止、重新加载配置等操作,以及如何配置Nginx提供静态内容和设置简单代理服务器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【水平有限,欢迎指错】
原文地址:http://nginx.org/en/docs/beginners_guide.html

首先你需要将 nginx 安装到你的机器上,这篇指南将教会你如何启动、停止 nginx、重载配置、说明配置文件的结构、如何设置 nginx 使其可以提供静态内容、如何配置 nginx 作为代理服务以及如何将其与 FastCGI 应用程序连接。

nginx 有一个主进程和一些工作进程,主进程的只要任务就是读取和评估配置,以及维持工作线程。工作线程做实际的请求处理工作。nginx 采用基于事件的模型和OS依赖的机制在工作进程之间有效地分配请求。工作线程的数量在配置文件中定义,可以设置固定值或者自动调整为可用的CPU 核心数。

nginx 及其模块的工作方式是在配置文件中定义的。默认情况下配置文件被命名为 nginx.conf 被放在 /usr/local/nginx/conf, /etc/nginx,或者 /usr/local/etc/nginx.中。

一、启动,停止和重新加载配置

# 启动
nginx -c nginx配置文件路径

启动后,就可以使用如下命令:

stop — fast shutdown # 快速停止nginx
quit — graceful shutdown # 正常停止nginx
reload — reloading the configuration file # 重新加载配置文件
reopen — reopening the log files # 重新打开日志文件

例如,等待工作进程处理完成当前的请求再停止nginx进程( to stop nginx processes with waiting for the worker processes to finish serving current requests),可以使用如下指令:

nginx -s quit
* 这个命令应该在启动nginx的同一个用户下执行

在配置文件中作出的更改只有运行了重新加载配置文件命令或者重启了 nginx 之后才可以被执行。使用如下命令重载配置文件:

nginx -s reload

一旦主进程收到重新加载配置文件的命令,就会检查新配置文件的语法的有效性,并尝试应用新配置文件提供的配置。如果成功的话,主进程会开启新的工作进程并且向老的工作进程发消息,要求他们关闭。失败的话,主进程会回滚更改继续执行老的工作进程。老的工作进程接收到关闭命令,停止接受新连接并处理当前的请求直到所有的请求被处理完毕。之后,老的工作进程退出。

也可以使用 Unix 工具将信号发送到 nginx 进程,比如 kill utility 。在这种情况下,信号通过进程ID被发送给进程。默认情况下,nginx 主进程ID文件(nginx.pid)是在 /usr/local/nginx/logs or /var/run。举个例子,如果主进程ID是1628,发送QUIT 信号导致nginx主进程正常停止,可以执行:

kill -s QUIT 1628

可以使用 ps 命令工具得到正在运行的 nginx 进程:

ps -ax | grep nginx

二、配置文件结构

nginx 由在配置文件中被指定指令控制的模块组成。指令分为 简单指令 和 块指令 。一个简单指令包含名称和参数,以空格分隔,以 ;结尾。块指令和简单指令有相同的结构,不同的是块指令是以 { } 结束而不是以;结束。如果块指令可以在大括号内有其他指令,它被称为上下文(例如: events, http, server, and location)

配置文件中,在任何上下文之外的指令被认为是在主上下文中的指令。events 和 http 指令在主上下文中,server 在 http 中、location 在 server中。

三、提供静态内容

一个重要的web服务器的任务就是提供静态文件,比如网页、图片…。你将会实现一个例子,根据请求,文件将从不同的文件夹提供。/data/www (包含html文件) 、 /data/images (包含图片)。为了实现这个例子,你需要编辑配置文件,在配置文件中设置一个http块包含一个server块包含两个location块。像这样

http {
    server {
    2个location
    }
}

通常来说,配置文件中包含很多个 server 块,是通过监听的端口和服务的名字来区分的。一旦 nginx 决定哪个 server 处理请求,它会根据在服务器块中定义的位置指令的参数来测试请求头中指定的URI。

把下面的 location 块添加到 server 块中:

location / {
    root /data/www;
}

这个 location 块指定 “/” 前缀和请求的URI作对比。为了匹配请求,这个URI会被添加到root指令的指定路径,也就是 /data/www, 以形成本地文件系统上所请求的文件的路径。如果有好几个匹配的location块,nginx就选择有最长的前缀的那个,上面的location块是最短的前缀,长度是1,其他的 location 块都匹配不上,这个location块才会被使用。

接下来,添加第二个location块:

location /images/ {
    root /data;
}

它将会匹配以 /images/ 开头的请求(location / 也会匹配,但是它最短)。

最终的server块长得像这样:

server {
    location / {
        root /data/www;
    }

    location /images/ {
        root /data;
    }
}

这已经是一个服务器的工作配置,它监听标准端口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 -s reload
如果某些东西不能按预期工作,您可以尝试在/usr/local/nginx/logs或var/log/nginx目录中的access.log和error.log文件中找出原因.

四、设置简单代理服务器

nginx 的一个常见用途是将其设置为代理服务器,这意味着接收请求的服务器,将它们传递到代理服务器,检索来自它们的响应,并将它们发送到客户端。

我们将配置一个基本代理服务器,它向本地目录中的文件提供图像请求,并将所有其他请求发送到代理服务器。在此示例中,两个服务器都将在单个nginx实例上定义。

首先,通过向nginx的配置文件中添加一个服务器块来定义代理服务器,其配置文件包含以下内容:

server {
    listen 8080;
    root /data/up1;

    location / {
    }
}

这是一个简单的服务器,侦听端口8080(之前,未指定listen指令,是因为使用标准端口80),并将所有请求映射到本地文件系统上的/data/up1目录。创建此目录并将index.html文件放入其中。注意,root指令放在服务器上下文中。当为服务请求选择的 location 块不包括自己的根指令时,使用这种根指令。

接下来,使用上一节中的服务器配置,并将其修改为代理服务器配置。在第一个位置块中放入 proxy_pass 指令(我们的示例为http://localhost:8080):

server {
    location / {
        proxy_pass http://localhost:8080;
    }

    location /images/ {
        root /data;
    }
}

我们将修改第二个位置块,它将带有/images/前缀的请求映射到/data/images目录下的文件,以使其与特定文件扩展名的 图像请求相匹配。修改的位置块如下所示:

location ~ \.(gif|jpg|png)$ {
    root /data/images;
}

该参数是一个正则表达式,匹配以.gif,.jpg或.png结尾的所有URI。正则表达式应该以 〜 开头。相应的请求将映射到/data/images目录。

当nginx选择一个位置块来提供请求时,它首先检查指定前缀的位置指令,记住具有最长前缀的位置,然后检查正则表达式。如果存在与正则表达式的匹配,nginx选择此位置,否则,它选择先前记住的位置。

代理服务器的配置将如下所示:

server {
    location / {
        proxy_pass http://localhost:8080/;
    }

    location ~ \.(gif|jpg|png)$ {
        root /data/images;
    }
}

他的服务器将过滤以.gif,.jpg或.png结尾的请求,并将它们映射到/data/images目录(通过向 root 指令添加URI),并将所有其他请求传递到上面配置的代理服务器。

要应用新配置,请将重新加载信号发送到nginx,就像上一节说的那样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值