Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Was sind die Konfigurationsblöcke des Nginx-Webservers?

Was sind die Konfigurationsblöcke des Nginx-Webservers?

coldplay.xixi
coldplay.xixiOriginal
2020-06-29 16:44:022466Durchsuche

Nginx-Webserver-Konfigurationsblöcke umfassen: 1. Einrichten des virtuellen Servers 3. Verwenden von Variablen; 5. Umschreiben des URI; HTTP-Antwort neu schreiben; 7. Fehler behandeln.

Was sind die Konfigurationsblöcke des Nginx-Webservers?

Nginx-Webserver-Konfigurationsblöcke sind:

1. Virtuellen Server einrichten

NGINX-Konfigurationsdatei muss mindestens eine Serveranweisung enthalten, um den virtuellen Server zu definieren. Wenn NGINX eine Anfrage bearbeitet, wählt es zunächst den virtuellen Server aus, der die Anfrage bedient.

Virtuelle Server werden durch Serveranweisungen im http-Kontext definiert, zum Beispiel:

http {
    server {
        # Server configuration
    }
}

Mehrere Serveranweisungen können zum http-Kontext hinzugefügt werden, um mehrere virtuelle Server zu definieren.

Empfohlenes Tutorial: Nginx-Schnellstart-Tutorial

serverDer Konfigurationsblock enthält normalerweise eine Listen-Direktive, um den Server anzugeben, der auf Anfragen lauscht IP-Adresse und Port (oder Unix-Domänen-Socket und -Pfad). Es werden sowohl IPv4- als auch IPv6-Adressen akzeptiert; schließen Sie die eckigen Klammern ein (.

Das folgende Beispiel zeigt die Konfiguration eines Servers, der die IP-Adresse 127.0.0.1 und Port 8080 überwacht: Verwenden Sie Standardports. Ebenso, wenn eine Adresse ist Wenn keine Listen-Anweisung enthalten ist, ist der „Standard“-Port

und der „Standard“-Port

Wenn es mehrere Server gibt, die mit der angeforderten IP-Adresse und dem angeforderten Port übereinstimmen, testet NGINX das angeforderte Host-Header-Feld anhand der server_name-Direktive im Serverblock. Der server_name-Parameter kann ein vollständiger (exakter) Name sein 80/tcpEin Platzhalter ist eine Zeichenfolge, die ein Sternchen (*) am Anfang, am Ende oder an beiden enthält. NGINX verwendet eine Tilde (~) davor ein genauer Name. 8000/tcp

server {
    listen 127.0.0.1:8080;
    # The rest of server configuration
}

Wenn der Host-Header mit mehreren Namen übereinstimmt, sucht NGINX nach den Namen in der folgenden Reihenfolge und verwendet den ersten gefundenen Namen, um einen auszuwählen:

Genauer Name (vollständiger genauer Name)

  • Der längste Platzhalter, der mit einem Sternchen beginnt, zum Beispiel: * .example.org

  • Der längste Platzhalter, der mit einem Sternchen endet, wie zum Beispiel: mail.*

  • Der erste passende reguläre Ausdruck (in der Reihenfolge, in der er in der Konfigurationsdatei erscheint)

  • Wenn das Host-Header-Feld nicht mit dem Servernamen übereinstimmt, leitet NGINX die Anforderung an den Standardserver für den Anforderungsankunftsport weiter. Der Standardserver ist die conf-Datei, es sei denn, Sie fügen den Parameter listen_server in die Listen-Direktive ein Um den Server explizit als Standard anzugeben, zeigen wir hier die Konfiguration zweier virtueller Maschinen: vhost1.com und vhost2.com Das Verzeichnis der Website vhost1.com befindet sich in

    und das Hauptverzeichnis der Website vhost2.com befindet sich in

    :
  • server {
        listen      80;
        server_name example.org www.example.org;
        ...
    }

2. Konfigurationsort

/data/www/vhost1NGINX kann Datenverkehr an verschiedene Proxys senden oder verschiedene Dateien basierend auf dem Anforderungs-URI bereitstellen. Diese Blöcke werden mithilfe der Standortanweisung in der Serveranweisung definiert. /data/www/vhost2Sie können beispielsweise drei Standortblöcke definieren, um den virtuellen Server anzuweisen um einige Anfragen an einen Proxyserver zu senden, andere Anfragen an einen anderen Proxyserver zu senden und die verbleibenden Anfragen durch Weitergabe von Dateien aus dem lokalen Dateisystem zu bearbeiten.

Der NGINX-Test fordert den URI basierend auf den Parametern aller Standortanweisungen an und wendet die im übereinstimmenden Standort definierten Anweisungen an. Innerhalb jedes Standortblocks ist es normalerweise (mit einigen Ausnahmen) möglich, zusätzliche Standortanweisungen zu platzieren, um die Bearbeitung einer bestimmten Gruppe von Anfragen weiter zu verfeinern. Hinweis: In diesem Tutorial-Artikel bezieht sich das Wort „Standort“ auf einen einzelnen Standortkontext. Die

location-Direktive verfügt über zwei Arten von Parametern: Präfixzeichenfolge (Pfadname) und reguläre Ausdrücke. Damit ein Anforderungs-URI mit einer Präfixzeichenfolge übereinstimmt, muss er mit der Präfixzeichenfolge beginnen.

Der folgende Beispielspeicherort mit dem Parameter pathname stimmt mit einem Anforderungs-URI überein, der mit /some/path/ beginnt, z. B.

, der nicht mit

übereinstimmt, da

nicht am Anfang von vorkommt dieser URI.

server {
    listen    80    default_server;
    ...
}

Regulären Ausdrücken wird eine Tilde (~) vorangestellt, um die Groß-/Kleinschreibung zu berücksichtigen, oder eine Tilde (~*), um die Groß-/Kleinschreibung zu berücksichtigen. Das folgende Beispiel gleicht einen URI ab, der die Zeichenfolge .html oder .html mit einem beliebigen Speicherort enthält.

server {
    listen       80;
    server_name vhost1.com www.vhost1.com;
    index index.html index.html;
    root  /data/www/vhost1;
    access_log  /var/log/vhost1.com.log;
}
server {
    listen       80;
    server_name vhost2.com www.vhost2.com;
    index index.html index.html;
    root  /data/www/vhost2;
    access_log  /var/log/vhost2.com.log;
}

Um den Ort zu finden, der am besten zum URI passt, vergleicht NGINX zunächst den URI mit dem Ort der Präfixzeichenfolge. Suchen Sie dann mit einem regulären Ausdruck nach dem Standort.

/some/path/document.htmlEs sei denn, der Modifikator ^~ wird verwendet, um dem regulären Ausdruck eine höhere Priorität zu geben. Unter den Präfixzeichenfolgen wählt NGINX die spezifischste Zeichenfolge (d. h. die längste und vollständigste Zeichenfolge) aus. Die genaue Logik für die Auswahl, wo Anfragen bearbeitet werden sollen, ist unten angegeben: /my-site/some/path/some/path

Testen Sie die Präfixzeichenfolge für alle URIs. Der Modifikator

= (Gleichheitszeichen) definiert eine genaue Übereinstimmung zwischen dem URI und der Präfixzeichenfolge. Wenn eine genaue Übereinstimmung gefunden wird, wird die Suche beendet.

  • 如果^~(插入符号)修饰符预先添加最长匹配前缀字符串,则不会检查正则表达式。

  • 存储最长匹配的前缀字符串。

  • 根据正则表达式测试URI。

  • 断开第一个匹配的正则表达式并使用相应的位置。

  • 如果没有正则表达式匹配,则使用与存储的前缀字符串相对应的位置。

  • =修饰符的典型用例是/(正斜杠)的请求。 如果请求/是频繁的,则指定=/作为location指令的参数加速处理,因为搜索匹配在第一次比较之后停止。

    location = / {
        ...
    }

    location上下文可以包含定义如何解析请求的指令 - 提供静态文件或将请求传递给代理的服务器。 在以下示例中,匹配第一个location上下文的请求将从/data/images目录中提供文件,并将匹配第二个位置的请求传递给承载 www.example.com 域内容的代理服务器。

    server {
        location /images/ {
            root /data;
        }
        location / {
            proxy_pass http://www.example.com;
        }
    }

    root指令指定要在其中搜索要提供的静态文件的文件系统路径。 与该位置相关联的请求URI将附加到路径,以获取要提供的静态文件的全名。 在上面的示例中,要响应/images/logo.png的请求,NGINX提供服务器本地实际对应文件是:/data/images/logo.png。

    proxy_pass指令将请求传递给使用配置的URL访问代理服务器。然后将代理服务器的响应传回客户端。在上面的示例中,所有不以/images/开头的URI的请求都将被传递给代理的服务器(也就是:www.example.com)。

    3. 使用变量

    可以使用配置文件中的变量,使NGINX进程的请求根据定义的情况而有所不同。 变量是在运行时计算的命名值,用作指令的参数。 一个变量由它的名字开头的$(美元)符号表示。 变量根据NGINX的状态定义信息,例如正在处理的请求的属性。

    有许多预定义的变量,如核心HTTP变量,您可以使用set,map和geo指令定义自定义变量。 大多数变量在运行时计算的,并包含与特定请求相关的信息。 例如,$remote_addr包含客户端IP地址,$uri保存当前的URI值。

    4. 返回特定状态码

    一些网站URI需要立即返回具有特定错误或重定向代码的响应,例如当页面被暂时移动或永久移动时。 最简单的方法是使用return指令。 例如返回未找到的404状态码:

    location /wrong/url {
        return 404;
    }

    返回的第一个参数是响应代码。可选的第二个参数可以是重定向的URL(代码301,302,303和307)或在响应体中返回文本。 例如:

    location /permanently/moved/url {
        return 301 http://www.example.com/moved/here;
    }

    返回指令可以包含在 location 和 server 上下文中。

    重写URI请求

    可以通过使用rewrite指令在请求处理期间多次修改请求URI,该指令具有一个可选参数和两个必需参数。 第一个(必需)参数是请求URI必须匹配的正则表达式。 第二个参数是用于替换匹配URI的URI。 可选的第三个参数是可以停止进一步重写指令的处理或发送重定向(代码301或302)的标志。例如:

     

    location /users/ {
        rewrite ^/users/(.*)$ /show?user=$1 break;
    }

    如该示例所示,用户通过匹配正则表达式捕获第二个参数。

    您可以在location 和 server上下文中包含多个rewrite指令。 NGINX按照它们发生的顺序逐个执行指令。 当选择该上下文时,server上下文中的rewrite指令将被执行一次。

    在NGINX处理一组rewrite指令之后,它根据新的URI选择一个location上下文。 如果所选location块包含rewrite指令,则依次执行它们。 如果URI与其中任何一个匹配,则在处理所有定义的rewrite指令之后,将搜索新location块。

    以下示例显示了与返回指令相结合的rewrite指令。

    server {
        ...
        rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
        rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  last;
        return  403;
        ...
    }

    此示例配置区分两组URI。 诸如/download/some/media/file之类的URI更改为/download/some/mp3/file.mp3。由于最后一个标志,所以跳过后续指令(第二次rewrite和return指令),但NGINX继续处理该请求,该请求现在具有不同的URI。类似地,诸如/download/some/audio/file的URI被替换为/download/some/mp3/file.ra。 如果URI与rewrite指令不匹配,则NGINX将403错误代码返回给客户端。

    有两个中断处理重写指令的参数:

    last - 停止执行当前服务器或位置上下文中的重写指令,但是NGINX会搜索与重写的URI匹配的位置,并且应用新位置中的任何重写指令(URI可以再次更改,往下继续匹配)。

    break - 像break指令一样,在当前上下文中停止处理重写指令,并取消搜索与新URI匹配的位置。新位置(location)块中的rewrite指令不执行。

    5. 重写HTTP响应

    有时您需要重写或更改HTTP响应中的内容,将一个字符串替换为另一个字符串。 您可以使用sub_filter指令来定义要应用的重写。 该指令支持变量和替代链,使更复杂的更改成为可能。

    例如,您可以更改引用除代理服务器之外的绝对链接:

    location / {
        sub_filter      /blog/ /blog-staging/;
        sub_filter_once off;
    }

    另一个示例将方法从http://更改为http://,并从请求头域替换本地主机地址到主机名。 sub_filter_once指令告诉NGINX在一个位置(location)内连续应用sub_filter伪指令:

    location / {
        sub_filter     'href="http://127.0.0.1:8080/'    'href="http://$host/';
        sub_filter     'img src="http://127.0.0.1:8080/' 'img src="http://$host/';
        sub_filter_once on;
    }

    请注意,如果发生另一个sub_filter匹配,则使用sub_filter修改的响应部分将不再被替换。

    处理错误

    使用error_page指令,您可以配置NGINX返回自定义页面以及错误代码,替换响应中的其他错误代码,或将浏览器重定向到其他URI。 在以下示例中,error_page指令指定要返回404页面错误代码的页面(/404.html)。

    error_page 404 /404.html;

    请注意,此伪指令并不立即返回该错误(返回指令执行该操作),而仅仅是指定发生时如何处理错误。 错误代码可以来自代理服务器,或者在NGINX处理期间发生(例如,当NGINX找不到客户端请求的文件时,显示404对应的结果)。

    在以下示例中,当NGINX找不到页面时,它会将代码301替换为代码404,并将客户端重定向http:/example.com/new/path.html。 当客户端仍尝试访问其旧URI的页面时,此配置非常有用。 301代码通知浏览器页面已经永久移动,并且需要在返回时自动替换旧地址。

    location /old/path.html {
        error_page 404 =301 http:/example.com/new/path.html;
    }

    以下配置是在未找到文件时将请求传递给后端的示例。 因为在error_page指令的等号之后没有指定状态代码,所以对客户机的响应具有代理服务器返回的状态代码(不一定是404)。

    server {
        ...
        location /images/ {
            # Set the root directory to search for the file
            root /data/www;
            # Disable logging of errors related to file existence
            open_file_cache_errors off;
            # Make an internal redirect if the file is not found
            error_page 404 = /fetch$uri;
        }
        location /fetch/ {
            proxy_pass http://backend/;
        }
    }

    当没有找到文件时,error_page指令指示NGINX进行内部重定向。 error_page指令的最终参数中的$uri变量保存当前请求的URI,该URI在重定向中被传递。

    例如,如果没有找到/images/some/file,它将被替换为/fetch/images/some/file,并且新的搜索位置(location)开始。最后请求最终在第二个location上下文中,并被代理到http://backend/

    如果没有找到文件,则open_file_cache_errors指令可防止写入错误消息。 因为丢失的文件可被正确地处理,但这不是必需的。

    Das obige ist der detaillierte Inhalt vonWas sind die Konfigurationsblöcke des Nginx-Webservers?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn