浏览 3.9k
目录
本指南对nginx进行了基本介绍,并描述了一些可以使用它执行的简单任务。假设读者的机器上已经安装了nginx。如果没有安装,请参阅安装nginx页面。本指南描述了如何启动和停止nginx,并重新加载其配置;解释了配置文件的结构,并描述了如何设置nginx以提供静态内容,如何配置nginx作为代理服务器,并如何将其连接到FastCGI应用程序。
nginx有一个主进程和多个工作进程。主进程的主要目的是读取和评估配置,并维护工作进程。工作进程负责实际处理请求。nginx采用基于事件的模型和依赖于操作系统的机制,以有效地将请求分发给工作进程。工作进程的数量在配置文件中定义,可以针对特定配置进行固定,也可以根据可用CPU核心的数量进行自动调整(参见 worker_processes)。
nginx及其模块的工作方式由配置文件决定。默认情况下,配置文件的名称为nginx.conf,位于目录/usr/local/nginx/conf、/etc/nginx或/usr/local/etc/nginx。
要启动nginx,请运行可执行文件。一旦nginx启动,可以通过使用-s参数调用可执行文件来控制它。使用以下语法:
nginx -s 信号
其中信号可以是以下之一:
stop — 快速关闭
quit — 优雅关闭
reload — 重新加载配置文件
reopen — 重新打开日志文件
例如,要停止nginx进程,并等待工作进程完成当前请求,请执行以下命令:
nginx -s quit
此命令应由启动nginx的同一用户执行。
在重新加载配置的命令发送给nginx或者重新启动nginx之前,对配置文件所做的更改不会生效。要重新加载配置,请执行以下操作:
nginx -s reload
一旦主进程接收到重新加载配置的信号,它将检查新配置文件的语法有效性,并尝试应用其中提供的配置。如果成功,主进程将启动新的工作进程,并向旧的工作进程发送消息,请求它们关闭。否则,主进程将撤销更改,并继续使用旧的配置工作。旧的工作进程在收到关闭命令后,停止接受新的连接,并继续为当前请求提供服务,直到所有这样的请求都得到服务。然后,旧的工作进程退出。
还可以使用Unix工具(如kill命令)向nginx进程发送信号。在这种情况下,信号将直接发送到具有给定进程ID的进程。nginx主进程的进程ID默认写入nginx.pid文件,该文件位于目
录/usr/local/nginx/logs或/var/run。例如,如果主进程ID为1628,则可以执行以下命令发送QUIT信号以实现nginx的优雅关闭:
kill -s QUIT 1628
要获取所有正在运行的nginx进程的列表,可以使用ps工具,例如:
ps -ax | grep nginx
有关向nginx发送信号的更多信息,请参阅Controlling nginx。
nginx由模块组成,这些模块由配置文件中指定的指令控制。指令分为简单指令和块指令。简单指令由名称和参数组成,参数之间用空格分隔,并以分号(;)结尾。块指令与简单指令具有相同的结构,但以大括号({和})包围的一组附加指令结束,而不是分号。如果块指令可以在大括号内包含其他指令,则称为上下文(例如:events、http、server和location)。
放置在配置文件中的上下文之外的指令被认为是在主上下文中。事件和http指令位于主上下文中,server位于http中,location位于server中。
#号后面的剩余部分被视为注释。
一个重要的Web服务器任务是提供文件(例如图像或静态HTML页面)。您将实现一个示例,根据请求,文件将从不同的本地目录(/data/www,其中可能包含HTML文件,和/data/images,其中包含图像)中提供。这将需要编辑配置文件,并在http块内设置一个包含两个location块的服务器块。
首先,创建/data/www目录,并在其中放置一个包含任何文本内容的index.html文件,并创建/data/images目录,并在其中放置一些图像。
接下来,打开配置文件。默认配置文件已经包含了几个服务器块的示例,大部分是注释掉的。现在注释掉所有这样的块,并启动一个新的服务器块:
http {
server {
}
}
通常,配置文件可以包含几个根据它们侦听的端口和服务器名称区分的服务器块。一旦nginx决定哪个服务器处理请求,它将对请求头中指定的URI与服务器块内定义的location指令的参数进行匹配。
将以下location块添加到服务器块中:
location / {
root /data/www;
}
此location块指定与请求中的URI进行比较的“/”前缀。对于匹配的请求,将将URI添加到root指令中指定的路径中,即/data/www,以形成本地文件系统上请求的文件的路径。如果有多个匹配的location块,nginx将选择具有最长前缀的那个。上面的location块提供了最短的前缀,长度为1,因此只有在所有其他location
块都无法提供匹配的情况下,才会使用该块。
接下来,添加第二个location块:
location /images/ {
root /data;
}
它将与以/images/开头的请求匹配(location /也与此类请求匹配,但前缀较短)。
服务器块的结果配置应如下所示:
server {
location / {
root /data/www;
}
location /images/ {
root /data;
}
}
这已经是一个工作中的服务器配置,它侦听标准端口80,并且可以在本地机器的http://localhost/上访问。对于以/images/开头的请求的响应,服务器将发送/data/images目录中的文件。例如,对于http://localhost/images/example.png的请求,nginx将发送/data/images/example.png文件。如果不存在该文件,nginx将发送一个指示404错误的响应。以非/images/开头的URI的请求将被映射到/data/www目录。例如,对于http://localhost/some/example.html的请求,nginx将发送/data/www/some/example.html文件。
要应用新的配置,请在尚未启动nginx的情况下启动nginx,或者通过执行以下操作将重新加载信号发送给nginx的主进程:
nginx -s reload
如果某些功能不按预期工作,您可以尝试在/usr/local/nginx/logs或/var/log/nginx目录中查找访问日志和错误日志文件中的原因。
nginx的常见用途之一是将其设置为代理服务器,即接收请求,将其传递给代理服务器,从代理服务器检索响应,并将其发送给客户端。
我们将配置一个基本的代理服务器,它根据请求提供图像文件的请求,并将所有其他请求发送到代理服务器。在此示例中,两个服务器将在单个nginx实例上定义。
首先,在nginx的配置文件中添加另一个服务器块,定义代理服务器的内容如下:
server {
listen 8080;
root /data/up1;
location / {
}
}
这将是一个简单的服务器,侦听端口8080(以前,未指定侦听指令,因为使用了标准端口80),并将所有请求映射到本地文件系统上的/data/up1目录。创建此目录,并将index.html文件放入其中。请注意,根指令位于服务器上下文中。当为无法提供自己的root指令的请求选择用于提供服务的location块时,将使用此类root指令。
接下来,使用上一节中的服务器配置,并将其修改为代理服务器配置。在第一个location块中,将proxy_pass指令与参数中指定的代理服务器的协议、名称和端口一起放置(在我们的示例中,它是http://localhost:8080):
server {
location / {
proxy_pass http://localhost:8080;
}
location /images/ {
root /data;
}
}
这将导致匹配的请求将被代理到指定的代理服务器。上面的配置将所有请求都发送到代理服务器,但是您可以根据需要更具体地定义location块。
启动或重新加载nginx以应用更改。
此时,对于以/images/开头的请求,nginx将仍然提供/data/images目录中的文件。对于所有其他请求,nginx将将请求发送到代理服务器,并将代理服务器的响应传递给客户端。
除了常规的代理功能,nginx还可以作为FastCGI代理服务器。FastCGI是一种通信协议,用于在Web服务器和FastCGI应用程序之间进行通信。使用FastCGI代理,nginx可以将请求发送给FastCGI应用程序进行处理,并将其响应返回给客户端。
要设置FastCGI代理,首先确保已安装所需的FastCGI应用程序并可以通过网络访问。然后,打开nginx的配置文件,并在server块中定义一个location块来处理请求。
例如,假设FastCGI应用程序运行在本地主机上的端口9000上。以下是一个示例配置:
server {
listen 80;
server_name example.com;
root /path/to/root;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
在上面的配置中,location /指定处理非PHP文件的逻辑。它使用try_files指令尝试按顺序查找请求的URI,URI加上斜杠,并将请求的URI和参数添加到index.php。如果找不到匹配的文件或目录,将返回index.php。
location ~ \.php$定义了一个正则表达式匹配所有以.php结尾的请求的location块。它使用fastcgi_pass指令将请求发送到FastCGI应用程序运行的地址和端口(127.0.0.1:9000)。其他fastcgi指令设置了FastCGI环境变量和参数。
要使用此配置,将server_name替换为您的域名或服务器的IP地址,并将root指令更改为您的网站根目录的路径。
启动或重新加载nginx以应用更改。
此配置将将所有以.php结尾的请求发送到FastCGI应用程序进行处理,并将其他请求作为静态文件进行提供。根据FastCGI应用程序的配置,它将处理PHP脚本并生成响应。响应将通过nginx返回给客户端。
请注意,FastCGI应用程序可能需要单独安装和配置。具体的安装和配置步骤取决于您使用的FastCGI应用程序。请参考相应的文档和指南。
工藤新一(柯南・江户川柯南):本作主角,是一名高中生侦探。在一次偶然事件中,被组织称为“黑衣组织”所灌下神秘药物“APTX4869”,使他的身体缩小成小学生的样子。为了隐藏身份并继续调查黑衣组织,他化名为江户川柯南,寄住在侦探园田平次家中。

按点赞数排序
按时间排序

微信公众号
加入微信群