Code前端首页关于Code前端联系我们

Nginx 教程:基本配置和操作以及简单的代理服务器任务

terry 2年前 (2023-09-28) 阅读数 74 #未命名

本教程介绍了如何启动和停止 nginx,以及重置其配置,解释了配置文件的结构,并描述了如何安装 nginx 来提供静态内容,如何将 nginx 配置为代理服务器,以及如何将其连接到 FastCGI 应用程序。

nginx 有一个主进程和几个工作进程。主流程的主要目的是读取和评估确认,并维护员工的流程。工作进程实际处理请求。 nginx 使用基于事件的模型和依赖于操作系统的架构来有效地在工作进程之间分发请求。工作进程的数量在配置文件中定义,可以针对给定软件进行更改,也可以根据可用 CPU 核心的数量自动设置(请参阅worker_processes)。

了解 nginx 的工作原理以及它如何在配置文件中进行修改。默认情况下,配置文件名为 nginx.conf,放置在以下目录:/usr/local/nginx/conf, ♸ , ♷♸ /usr/local/etc/nginx

在前面的安装文本配置中,使用的安装配置目录是:/usr/local/nginx/conf。所以这个配置文件就位于这个目录下。

1。启动、停止和重置 Nginx 配置

要启动 nginx,请运行可执行文件。一旦nginx启动,就可以通过调用带有参数-s的可执行文件来控制它。使用以下语法:

nginx -s signal

signal (

signal) 的值可以是以下之一:

  • stop - 立即停止服务
  • 下载服务良好
  • restart - 重新启动文件
  • restart - 重新打开日志文件

例如,要停止

进程以立即结束服务,您可以运行以下命令:

nginx -s quit

注意:此命令应在启动 nginx 的同一用户下运行。

在将重新配置命令发送到 nginx 或重新运行之前,配置文件中的更改不会应用。要恢复配置文件,请键入:

nginx -s reload

当主进程收到恢复配置的信号时,它将验证新配置文件的正确性,并尝试应用其中提供的配置。如果成功,主进程将启动一个新的工作进程,并向旧的工作进程发送消息,要求它们关闭。否则,主进程将恢复更改并继续使用旧的更改。旧的工作进程在收到关闭命令后,将停止接受新连接并继续保留当前请求,直到所有此类请求都停止。之后,旧的工作进程退出。

您还可以借助 Kill 实用程序等 Unix 工具向 nginx 进程发送信号。在这种情况下,信号将直接发送到具有给定进程 ID 的进程。默认情况下,nginx主进程的进程ID写入/usr/local/nginx/logs/var/run目录下的nginx.pid中。例如,如果主进程 ID 为 1628,则发送 QUIT 信号会使 nginx 正常关闭,请:

kill -s QUIT 1628

要获取所有正在运行的 nginx 进程的列表,可以使用 ps例如,按以下方式排序:

ps -ax | grep nginx

2。

nginx 配置文件的结构包含由配置文件中指定的指令控制的模块。指令分为简单指令和块指令。一个简单的指令由由空格分隔的名称和参数组成,并以斜杠结尾 (;)。块指令与简单指令具有相同的结构,只不过它们不是以箭头结尾,而是以大括号括起来的附加指令结尾({} )。如果块指令在大括号内包含其他指令,则称为上下文(例如:eventshttp、 和 place )。放置在文件

任何上下文之外的指令均被视为 真实上下文 事件http位于基地›和››侧位于http 地方 位于 http 区块。

# 之后的行部分被视为注释。

3。提供静态内容(静态网页)

Web 服务器的主要功能是提供文件(例如图像或静态 HTML 页面)。在这里,我们学习如何实现一个示例,根据请求提供来自不同本地目录的文件:/data/www(可能包含 HTML 文件)和 /data/images(其中可能包含 HTML 文件)图像)。这需要编辑配置文件并使用两个位置块将服务器块放置在 http 块内。

首先,创建/data/www目录并添加index.html,其中包含任何文本内容,然后创建

y并在其中放入一些图像。创建两个文件夹 -

[root@localhost ~]# mkdir -p /data/www
[root@localhost ~]# mkdir -p /data/images
[root@localhost ~]#

将两个文件放入上面创建的两个文件夹中:/data/www/index.html/data/images/logo.png ›、 、 /data/www/index.html文件内容只有一行,如下-

<h2> New Static WebSite Demo.</h2>

接下来,打开配置文件(/usr/local/nginx /conf/nginx.conf)会议)。已经有几个服务器阻止默认配置文件的示例,其中大多数已被注释掉。注释掉所有这些块并启动一个新的服务器块:

http {
    server {
    }
}

通常,配置文件可以包含 server 块,用于指定服务器正在侦听的端口和服务器名称。当 nginx 决定由哪个服务器处理请求时,它会根据服务器块中定义的 location 指令来测试请求标头中指定的 URI。 ?后缀为“/”。对于匹配请求,URI(即其中/)是请求文件在本地文件系统中的路径。如果有多个位置块,nginx会选择后缀最长的一个来匹配位置position。上面的position块给出了最短的前缀长度1,所以如果没有,这个块将不会被使用 location 所有其他都无法提供匹配。location 块:

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

它将匹配 /image/(location/)同样的请求,与请求a类似,但请求也很短。“/images/”比“/”长)匹配。

server 块的最终配置应如下所示:

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

    location /images/ {
        root /data;
    }
}

这已经是一个在标准端口 80 上侦听的服务器,并且可以从本地计算机 ( / http://localhost )工作配置。为了响应以 /images/ 开头的 URI 请求,服务器将从目录 /data/images 提供文件。例如,为了响应 http://localhost/images/logo.png 的请求,nginx 会将 /data/images/logo.png 发送到服务。如果文件不存在,nginx会返回错误信息404。不以 /images/ 开头的请求 URI 将发送到目录 /data/www。例如,为了响应请求 http://localhost/about/example.html,nginx 将发送 /data/www/about/example.html

要应用新的更改,请启动 nginx(如果尚未启动),或者通过运行以下命令向 nginx 主进程发送重新加载信号:

[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload

如果出现错误或异常导致其无法正常工作,您可以可以尝试检查文件夹/usr/,在local/nginx或/log/nginx中的access.logerror.log文件中查找原因。

打开浏览器或使用CURL访问Nginx服务器,如下图 -

Nginx教程:基本配置和操作及简单任务代理服务器

nginx.conf完整内容如下:

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    # '$status $body_bytes_sent "$http_referer" '
    # '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;

    ## 新服务(静态网站)
    server {
        location / {
            root /data/www;
        }
        location /images/ {
            root /data;
        }
    }
}

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

nginx 常见的用途是将其设置为代理服务器,这意味着它充当接收请求的服务器,将请求转发到代理服务器,接收代理服务器的响应,并将其发送给客户。

我们将配置一个基本的代理服务器,用于处理本地文件夹中文件的图像请求,并将所有其他请求转发到代理服务器。在此示例中,将定义两个服务器,例如 nginx

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

server {
    listen 8080;
    root /data/up1;

    location / {
    }
}

这将是一个监听端口 的简单服务器 默认端口 指定了 ,因此没有指定 listen 指令),并且所有请求都放置在位置上的 /data/up1 文件目录中。创建此文件夹并将文件 index.html 放入其中。请注意,指令 root 位于 server 上下文块中。为服务请求选择的此位置不包括root说明。使用本指南root

将其放入上面创建的文件夹/data/up1/data/www/demo.html。文件内容为一行,如下 -

<h2>About proxy_pass Page at port 8080</h2>

接下来,使用上一节中的服务器配置,并将其更改为代理服务器配置。在第一个位置块中,将指令 proxy_pass 与参数中指定的代理服务器的协议、名称和端口相结合(在本例中为 http: //localhost:8080):

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

    location /images/ {
        root /data;
    }
}

我们将更改第二个位置位置我们当前使用/images/prefix将请求修复到♺下的文件,使其与图像请求兼容常见的文件扩展名。修改后的位置宽度如下:

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

参数是一个正则表达式,匹配以 .gif.jpg 或 或 ♺ 结尾的任何内容。正则表达式前面应带有字符 ~。相应的请求将发送到目录/data/images

当nginx选择一个块发送请求时,nginx首先检查指定前缀的位置指令,记住最长前缀的,然后查看常见的表达式。如果正则表达式匹配,nginx就会选择这个位置,否则会选择旧内存。

代理服务器的最终配置将是:

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

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

此服务器将过滤到 .gif.jpg

nginx -s quit

End of request ,然后输入目录 /data/images(通过将 URI 添加到 root 指令的符号),并转发配置代理服务器之上的所有其他请求。

要应用新的更改,请启动 nginx(如果尚未启动),或者通过运行以下命令向 nginx 主进程发送重新加载信号:

[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload

首先在上面配置的端口 8080 上测试服务,输入服务的8080端口,得到如下结果:
Nginx教程:基本配置和操作及简单任务代理服务器
再次输入端口80(这只是一个代理,它会将请求传输到服务8080,由服务处理。 8080端口并返回响应给客户端),得到如下结果 -
Nginx教程:基本配置和操作及简单任务代理服务器

完成配置nginx.conf文件内容如♸5. FastCGI代理安装

nginx可用于使用各种FastCGI服务器来运行以PHP等编程语言构建的系统和应用程序的请求。
使用 FastCGI 服务器的最基本的 nginx 配置涉及使用 fastcgi_pass 命令(而不是 proxy_pass› 指令)和 › _param 指令通过设置服务器的 FastCGI 参数。假设可以通过 localhost:9000 访问服务器 FastCGI。根据上一节中的代理设置,将proxy_pass指令替换为fastcgi_pass指令,并将指令更改为::在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;
    }
}

这将设置一个服务器,通过 FastCGI 协议将除静态图像请求之外的所有请求转发到在 localhost:9000 运行的代理服务器。

关于Nginx+PHP+FastCGI服务器,我们会在单独的文章中讲解:LANM安装与配置从左侧菜单进入,请看左侧菜单进入。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门