Heim >Backend-Entwicklung >PHP-Tutorial >Nginx: Leitfaden für Anfänger

Nginx: Leitfaden für Anfänger

WBOY
WBOYOriginal
2016-08-08 09:22:19941Durchsuche

Dieser Leitfaden gibt eine grundlegende Einführung in Nginx und beschreibt einige einfache Aufgaben, die damit erledigt werden können. Es wird davon ausgegangen, dass Nginx bereits auf dem Computer des Lesers installiert ist. Ist dies nicht der Fall, lesen Sie den Abschnitt „Installieren“. Nginx-Seite. In dieser Anleitung wird beschrieben, wie Sie Nginx starten und stoppen und seine Konfiguration neu laden, die Struktur der Konfigurationsdatei erläutert und beschrieben, wie Sie Nginx für die Bereitstellung statischer Inhalte einrichten, wie Sie Nginx als Proxyserver konfigurieren und wie um es mit einer FastCGI-Anwendung zu verbinden.

nginx hat einen Master-Prozess und mehrere Worker-Prozesse. Der Hauptzweck des Masterprozesses besteht darin, die Konfiguration zu lesen und auszuwerten und Arbeitsprozesse aufrechtzuerhalten. Worker-Prozesse übernehmen die eigentliche Bearbeitung von Anfragen. Nginx verwendet ein ereignisbasiertes Modell und ist vom Betriebssystem abhängig Mechanismen zur effizienten Verteilung von Anfragen zwischen Arbeitsprozessen. Die Anzahl der Worker-Prozesse ist in der Konfigurationsdatei definiert und kann für eine bestimmte Konfiguration festgelegt oder automatisch an die Anzahl der verfügbaren CPU-Kerne angepasst werden (sieheworker_processes).

Die Funktionsweise von Nginx und seinen Modulen wird in der festgelegt Konfigurationsdatei. Standardmäßig heißt die Konfigurationsdatei nginx.conf und wird im Verzeichnis /usr/local/nginx/conf/etc/nginx oder /usr/local/etc/nginx abgelegt.

Konfiguration starten, stoppen und neu laden

Um Nginx zu starten, führen Sie die ausführbare Datei aus. Sobald Nginx gestartet ist, kann es durch Aufrufen der ausführbaren Datei mit dem Parameter -s gesteuert werden. Verwenden Sie die folgende Syntax:

nginx -s <em>signal</em>

Wobei signal eines der folgenden sein kann:

  • stop – schnelles Herunterfahren
  • quit – ordnungsgemäßes Herunterfahren
  • reload – Neuladen der Konfigurationsdatei
  • reopen – erneutes Öffnen der Protokolldateien

Für Um beispielsweise Nginx-Prozesse zu stoppen und darauf zu warten, dass die Worker-Prozesse mit der Bearbeitung aktueller Anforderungen fertig sind, kann der folgende Befehl ausgeführt werden:

nginx -s quit
Dieser Befehl sollte unter demselben Benutzer ausgeführt werden wie nginx gestartet.

Änderungen in der Konfigurationsdatei werden erst übernommen, wenn der Befehl zum Neuladen der Konfiguration an nginx gesendet oder neu gestartet wird. Um die Konfiguration neu zu laden, führen Sie Folgendes aus:

nginx -s reload

Sobald der Masterprozess das Signal zum Neuladen der Konfiguration erhält, prüft er die Syntaxgültigkeit der neuen Konfigurationsdatei und versucht, die in bereitgestellte Konfiguration anzuwenden Es. Wenn dies gelingt, startet der Master-Prozess neue Worker-Prozesse und sendet Nachrichten an alte Arbeitsprozesse, in denen sie zum Herunterfahren aufgefordert werden. Andernfalls macht der Masterprozess die Änderungen rückgängig und arbeitet weiterhin mit der alten Konfiguration. Alte Worker-Prozesse, die einen Befehl zum Herunterfahren erhalten, nehmen keine neuen Verbindungen mehr an und weiterhin aktuelle Anfragen bearbeiten, bis alle derartigen Anfragen bearbeitet sind. Danach werden die alten Arbeitsprozesse beendet.

Ein Signal kann auch mit Hilfe von Unix-Tools wie dem Dienstprogramm kill an Nginx-Prozesse gesendet werden. In diesem Fall wird ein Signal direkt an einen Prozess mit einer bestimmten Prozess-ID gesendet. Standardmäßig wird in die Prozess-ID des Nginx-Masterprozesses geschrieben das nginx.pid im Verzeichnis /usr/local/nginx/logs oder /var/run. Wenn die Master-Prozess-ID beispielsweise 1628 ist, führen Sie zum Senden des QUIT-Signals, das zum ordnungsgemäßen Herunterfahren von Nginx führt, Folgendes aus:

kill -s QUIT 1628

Um die Liste aller laufenden Nginx-Prozesse abzurufen, müssen ps Das Dienstprogramm kann beispielsweise auf folgende Weise verwendet werden:

ps -ax | grep nginx

Weitere Informationen zum Senden von Signalen an Nginx finden Sie unter „Nginx steuern“.

Struktur der Konfigurationsdatei

nginx besteht aus Modulen, die durch in der Konfigurationsdatei angegebene Anweisungen gesteuert werden. Direktiven werden in einfache Direktiven und Blockdirektiven unterteilt. Eine einfache Direktive besteht aus dem Namen und den Parametern, getrennt durch Leerzeichen und endet mit einem Semikolon (;). Eine Blockanweisung hat die gleiche Struktur wie eine einfache Direktive, endet jedoch anstelle des Semikolons mit einer Reihe zusätzlicher Anweisungen, die von geschweiften Klammern ({ und}) umgeben sind. Wenn eine Blockanweisung andere haben kann Anweisungen in geschweiften Klammern werden als Kontext bezeichnet (Beispiele: events, http,server, und Standort).

Directives placed in the configuration file outside of any contexts are considered to be in the main context. Theevents and http directives reside in the main context, server in http, and location in server.

The rest of a line after the # sign is considered a comment.

Serving Static Content

An important web server task is serving out files (such as images or static HTML pages). You will implement an example where, depending on the request, files will be served from different local directories: /data/www(which may contain HTML files) and /data/images (containing images). This will require editing of the configuration file and setting up of a server block inside the http block with two location blocks.

First, create the /data/www directory and put an index.html file with any text content into it and create the/data/images directory and place some images in it.

Next, open the configuration file. The default configuration file already includes several examples of the serverblock, mostly commented out. For now comment out all such blocks and start a new server block:

http {
    server {
    }
}

Generally, the configuration file may include several server blocks distinguished by ports on which they listento and by server names. Once nginx decides which server processes a request, it tests the URI specified in the request’s header against the parameters of the location directives defined inside the server block.

Add the following location block to the server block:

location / {
    root /data/www;
}

This location block specifies the “/” prefix compared with the URI from the request. For matching requests, the URI will be added to the path specified in the root directive, that is, to /data/www, to form the path to the requested file on the local file system. If there are several matching location blocks nginx selects the one with the longest prefix. The location block above provides the shortest prefix, of length one, and so only if all otherlocation blocks fail to provide a match, this block will be used.

Next, add the second location block:

location /images/ {
    root /data;
}

It will be a match for requests starting with /images/ (location / also matches such requests, but has shorter prefix).

The resulting configuration of the server block should look like this:

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

    location /images/ {
        root /data;
    }
}

This is already a working configuration of a server that listens on the standard port 80 and is accessible on the local machine at http://localhost/. In response to requests with URIs starting with /images/, the server will send files from the /data/images directory. For example, in response to the http://localhost/images/example.pngrequest nginx will send the /data/images/example.png file. If such file does not exist, nginx will send a response indicating the 404 error. Requests with URIs not starting with /images/ will be mapped onto the /data/wwwdirectory. For example, in response to the http://localhost/some/example.html request nginx will send the/data/www/some/example.html file.

To apply the new configuration, start nginx if it is not yet started or send the reload signal to the nginx’s master process, by executing:

nginx -s reload
In case something does not work as expected, you may try to find out the reason in access.log anderror.log files in the directory /usr/local/nginx/logs or /var/log/nginx.

Setting Up a Simple Proxy Server

One of the frequent uses of nginx is setting it up as a proxy server, which means a server that receives requests, passes them to the proxied servers, retrieves responses from them, and sends them to the clients.

We will configure a basic proxy server, which serves requests of images with files from the local directory and sends all other requests to a proxied server. In this example, both servers will be defined on a single nginx instance.

First, define the proxied server by adding one more server block to the nginx’s configuration file with the following contents:

server {
    listen 8080;
    root /data/up1;

    location / {
    }
}

This will be a simple server that listens on the port 8080 (previously, the listen directive has not been specified since the standard port 80 was used) and maps all requests to the /data/up1 directory on the local file system. Create this directory and put the index.html file into it. Note that the root directive is placed in theserver context. Such root directive is used when the location block selected for serving a request does not include own root directive.

Next, use the server configuration from the previous section and modify it to make it a proxy server configuration. In the first location block, put the proxy_pass directive with the protocol, name and port of the proxied server specified in the parameter (in our case, it is http://localhost:8080):

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

    location /images/ {
        root /data;
    }
}

We will modify the second location block, which currently maps requests with the /images/ prefix to the files under the /data/images directory, to make it match the requests of images with typical file extensions. The modified location block looks like this:

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

The parameter is a regular expression matching all URIs ending with .gif.jpg, or .png. A regular expression should be preceded with ~. The corresponding requests will be mapped to the /data/images directory.

When nginx selects a location block to serve a request it first checks location directives that specify prefixes, remembering location with the longest prefix, and then checks regular expressions. If there is a match with a regular expression, nginx picks this location or, otherwise, it picks the one remembered earlier.

The resulting configuration of a proxy server will look like this:

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

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

This server will filter requests ending with .gif.jpg, or .png and map them to the /data/images directory (by adding URI to the root directive’s parameter) and pass all other requests to the proxied server configured above.

To apply new configuration, send the reload signal to nginx as described in the previous sections.

There are many more directives that may be used to further configure a proxy connection.

Setting Up FastCGI Proxying

nginx can be used to route requests to FastCGI servers which run applications built with various frameworks and programming languages such as PHP.

The most basic nginx configuration to work with a FastCGI server includes using the fastcgi_pass directive instead of the proxy_pass directive, and fastcgi_param directives to set parameters passed to a FastCGI server. Suppose the FastCGI server is accessible on localhost:9000. Taking the proxy configuration from the previous section as a basis, replace the proxy_pass directive with the fastcgi_pass directive and change the parameter to localhost:9000. In PHP, the SCRIPT_FILENAME parameter is used for determining the script name, and the QUERY_STRING parameter is used to pass request parameters. The resulting configuration would be:

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;
    }
}

This will set up a server that will route all requests except for requests for static images to the proxied server operating on localhost:9000 through the FastCGI protocol.

以上就介绍了Nginx: Beginner’s Guide,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

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