Nginx - 初学者指南

原文地址
NGINX 和 NGINX PLUS 特征对比
Nginx 开源版本官网:http://nginx.org
Nginx Plus 企业版官网:https://www.nginx.com

1. 启动,停止和重新加载配置(Starting, Stopping, and Reloading Configuration)

不同的 Linux 发行版,Nginx 启动方式不同,对于 CentOS7 的命令是 systemctl start nginx。一旦 nginx 启动,就可以通过调用 nginx -s signal 来控制。使用以下语法:

nginx -s signal

signal 可以是下列之一:

  • stop - 快速结束进程,不管是否有连接,直接关闭进程
  • quit - 平滑结束进程,如果有连接则等完成当前所有的请求,并在断开连接后再关闭进程。
  • reload - 重新加载配置文件。可以在加载前自动检查配置文件,没问题的话再平滑加载。一旦主进程(Master process)接收到重新加载配置的信号,它将检查新配置文件的语法有效性,并尝试应用其中提供的配置。如果配置文件没有问题,则主进程启动新的工作进程(Work process),并发送消息给旧工作进程,请求关闭。否则,主进程回滚更改并继续使用旧配置。旧工作进程接收到关闭命令后,停止接受新的连接,并继续服务当前的请求,直到所有已连接请求服务完成后,旧工作进程退出。
  • reopen - 重新打开日志文件。

要停止 Nginx 进程并等待工作进程完成当前请求,可以执行以下命令:

nginx -s quit

这个命令应该在启动 Nginx 的同一个用户下执行。
Nginx 配置文件更改后,需要重启 Nginx systemctl restart nginx(CentOS7 的重启命令) 或重新加载配置 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

可以通过 Linux 的 ps 程序查看所有正在运行的 nginx 进程的列表。例如:

ps -aux | grep nginx

关于将信号发送到 nginx 的详细资料请参阅 控制 nginx

2. 配置文件的结构

Nginx 由模块组成,模块由配置文件中指定的指令控制。指令分为简单指令和块指令(block directives)。简单指令由名称和参数组成,以空格分隔,并以分号(;)结束。块指令不以分号结尾,而是用一系列由大括号({})包围的附加指令来结束。如果块指令的大括号内可以有其他指令,这个块指令就被称为一个上下文(例如: eventshttpserverlocation)。

配置文件中,如果指令在任何上下文之外,则被认为是在主上下文 main context中。events 和 http 指令在主上下文 main context 中,而 server 指令在 http 中,location 指令在 server 中。

配置文件中,所有注释行用井号开头(#)。

3. 提供静态内容

Web 服务器可以提供文件(如图像或静态 HTML 页面)。

示例:根据请求,文件将从不同的本地目录 /data/www (包含HTML文件)和 /data/images (包含图像)提供。

首先,创建 /data/www 目录和 /data/images,并将 index.html 和图片放入对应的目录中。

接下来,打开配置文件。默认的配置文件已经包含了几个server块的例子,大部分都是注释掉的。现在注释掉所有这些块并开始一个新 server块:

http {
    server {
    }
}

通常,配置文件包含几个用侦听端口(listen 80;)和服务器名称(server_name admin.local.cn local.cn;)区分的 server 块 。一旦 nginx 决定哪个进程处理请求,它就会根据块内定义的指令的参数来测试请求头中指定的 URI 。
将下面的 location 块添加到 server 块中:

location / {
    root /data/www;
}

这个 location 块指定用 / 与请求中的 URI 进行比较。对于匹配请求(比如 xx.com/xx.com/test),URI 将被添加到 root 指令中指定的路径 ,构建映射到本地文件系统的 /data/www 目录的路径。如果 URI 同时匹配多个 location 块,nginx 会根据最长匹配原则,选择最长的前缀。

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

location /images/ {
    root /data;
}

如果 URI 中含有 /images/,将会匹配成功。

所得到的配置server块应该是这样的:

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

    location /images/ {
        root /data;
    }
}

这个配置会默认监听 80 端口,可以在本地机器上访问 http://localhost/。为了响应 URI 以 /images/ 开始的请求,服务器将从 /data/images 目录发送文件。例如,响应这个 http://localhost/images/example.png 请求,nginx会发送这个 /data/images/example.png 文件。如果这个文件不存在,nginx 会发送一个 404 错误的响应。对于不以 /images/ 开始的请求,将被映射到 /data/www 目录上。例如,响应这个 http://localhost/some/example.html 请求,nginx 会发送这个 /data/www/some/example.html 文件。

要应用新的配置,请启动 nginx(如果尚未启动)或将 reload 信号发送到 nginx 的主进程,执行:

nginx -s reload

如果 Nginx 不按预期工作,可以通过查看 /usr/local/nginx/logs/var/log/nginx 目录下的 access.log 和 error.log 日志文件 。

4. 设置一个简单的代理服务器

Nginx 经常被用作代理服务器。此时 Nginx 代理服务器接收请求并转发给被代理的服务器,然后从中获取响应信息并将其发送给客户端。

我们将配置一个基本的代理服务器,对于图像请求则去本地文件系统查找文件并响应,对于所有其他请求则发送给被代理的服务器。在这个例子中,两个服务器将在一个 Nginx 实例上定义。

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

server {
    listen 8080;
    root /data/up1;

    location / {
    }
}

这个简单的服务器,侦听端口 8080 并将所有请求映射到 /data/up1 本地文件系统上的目录。创建这个目录并把 index.html 文件放进去。请注意,当一个请求匹配到的 location 块中没有 root 指令时,会使用 server 上下文中的 root 指令。

接下来,使用上一节中的服务器配置并对其进行修改,使其成为代理服务器配置。在第一个 location 块中,填入 proxy_pass 指令与参数(包括代理服务器的协议,名称和端口,例如 http://localhost:8080):

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

    location /images/ {
        root /data;
    }
}

修改第二个 location 块,将带有 /images/ 前缀的请求映射到 /data/images 目录下的文件,使其与具有指定文件扩展名的图像的请求匹配。修改的 location 块如下所示:

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

该参数是一个正则表达式,匹配三种图片:gif、jpg、png。相应的请求将被映射到该 /data/images 目录。
Nginx 配置文件中的正则表达式以 ~ 开头。

当 nginx 选择 location 块来为请求提供服务时,正则匹配优先,最长匹配优先。首先检查使用字符串(而不是正则表达式)前缀的 location 指令,并记住匹配到最长字符串前缀的 location,然后检查使用正则表达式前缀的 location。如果 URI 与正则表达式前缀匹配,nginx 会选择该使用正则表达式前缀的 location,否则,会选择之前记住的 location。

代理服务器的配置如下:

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

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

该服务器将指定类型的图片请求映射到 /data/images 目录并将所有其他请求传递到代理服务器。

要应用新配置,请将信号 reload 发送到 nginx。

详细资料参考 配置代理服务器

5. 设置 FastCGI 代理,处理动态内容

nginx 可将请求路由到 FastCGI 服务器(FastCGI 服务器可以运行由各种框架和编程语言(如PHP)构建的应用程序)。

与 FastCGI 服务器配合使用的最基本的 nginx 配置包括使用 fastcgi_pass 指令来设置 FastCGI 服务器的位置(比如 php-fpm 服务器通常位于 localhost:9000),以及 fastcgi_param 指令来设置传递给 FastCGI 服务器的参数。
在 PHP 中,SCRIPT_FILENAME 参数用于确定脚本名称,QUERY_STRING 参数用于传递请求参数。最终的配置将是:

server {
    location / {
        fastcgi_pass  localhost:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param QUERY_STRING    $query_string;
    }

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

这个服务器将除了静态图像请求之外的所有请求路由到监听 localhost:9000 的FastCGI 服务器。

内容概要:本文介绍了MATLAB实现DBN-RBF深度置信网络结合RBF神经网络多输入单输出回归预测的详细项目实例。项目旨在通过深度置信网络(DBN)和径向基函数神经网络(RBF)的结合,设计出一种高效的回归预测模型,以应对高维数据和非线性关系的挑战。DBN用于无监督特征提取,RBF用于快速回归,两者结合显著提升了预测精度和模型泛化能力。文中详细描述了项目的背景、目标、挑战、解决方案、模型架构、代码实现、GUI设计、性能评估及未来改进方向。 适合人群:具备一定编程基础,对机器学习和深度学习有一定了解的研发人员,尤其是从事金融预测、医疗健康、智能制造等领域的工程师和技术人员。 使用场景及目标:①解决高维数据的特征提取难题,提升非线性回归的拟合精度;②通过无监督学习与快速训练能力的结合,提高模型的预测精度和泛化能力;③应用于金融预测、医疗健康、智能制造等多个领域,提供高效的回归预测工具;④通过实时数据流处理和GPU加速推理,确保系统在实时应用中的快速响应。 其他说明:此项目不仅提供了详细的理论分析和代码实现,还涵盖了系统架构设计、模型部署与应用、安全性与用户隐私保护等方面的全面指导。通过结合其他深度学习模型、多任务学习、增量学习等技术,项目具备广阔的扩展性和应用前景。系统还支持自动化CI/CD管道、API服务与业务集成、前端展示与结果导出等功能,确保了系统的高可用性和易用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值