Heim > Artikel > Backend-Entwicklung > Nginx: Leitfaden für Anfänger
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.
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 Herunterfahrenreload
– Neuladen der Konfigurationsdateireopen
– erneutes Öffnen der ProtokolldateienFü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“.
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.
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 server
block, 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.png
request 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/www
directory. 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 inaccess.log
anderror.log
files in the directory/usr/local/nginx/logs
or/var/log/nginx
.
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.
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教程有兴趣的朋友有所帮助。