Heim > Artikel > Backend-Entwicklung > Nginx-Konfiguration von Grund auf
Nachdruck von: http://oilbeater.com/nginx/2014/12/29/nginx-conf-from-zero.html
Grundlegende Konzepte
Die häufigsten Verwendungen von Nginx stellt einen Reverse-Proxy-Dienst bereit. Um welchen Reverse-Proxy handelt es sich also? Ich glaube, dass viele Landsleute auf dem Festland in diesem magischen Land einen Forward-Proxy verwendet haben. Das Prinzip ist ungefähr wie folgt:
Der Proxyserver fungiert als Vermittler auf der Clientseite, um zu akzeptieren Anfragen, verstecken Sie den echten Client und beziehen Sie Ressourcen vom Server. Wenn sich der Proxyserver außerhalb der Chinesischen Mauer befindet, kann er uns auch dabei helfen, den Zweck der Überquerung der Chinesischen Mauer zu erreichen. Wie der Name schon sagt, besteht ein Reverse-Proxy darin, den Proxy-Server als Vermittler für den Server zu verwenden und den Server zu verbergen, der tatsächlich Dienste bereitstellt. Das Prinzip ist ungefähr wie folgt:
Natürlich geschieht dies nicht, um die Große Mauer zu umgehen, sondern um eine Reihe von Funktionen wie Sicherheit und Lastausgleich zu erreichen. Die sogenannte Sicherheit bedeutet, dass die Anfrage des Clients nicht direkt auf den Intranetserver gelangt, sondern über einen Proxy weitergeleitet wird. Auf dieser Ebene können eine Reihe von Strategien wie Sicherheitsfilterung, Flusskontrolle und DDOS-Prävention implementiert werden. Lastausgleich bedeutet, dass wir die Anzahl der Server, die tatsächlich Dienste im Backend bereitstellen, horizontal erweitern können. Der Agent leitet Anforderungen gemäß den Regeln an jeden Server weiter, sodass die Last jedes Servers nahezu ausgeglichen ist.
Und Nginx ist ein so beliebter Reverse-Proxy-Dienst.
Installation
Unter Ubuntu können Sie den Kompilierungs- und Installationsprozess überspringen und apt-get direkt verwenden
<code>sudo apt-get install nginx </code>
Nach der Installation ist dies möglich Verwenden Sie direkt :
<code>sudo service nginx start </code>
, um den Nginx-Dienst standardmäßig auf Port 80 zu setzen. Wir können dies überprüfen, indem wir http://locallhost im Browser aufrufen.
Erstkonfiguration
Die Standardkonfigurationsdatei von nginx befindet sich unter
<code>/etc/nginx/nginx.conf </code>
Der beste Weg, die Konfiguration zu lernen, besteht darin, mit Beispielen zu beginnen Beginnen Sie mit Um andere Konfigurationen anzuzeigen, schauen Sie sich direkt die Konfiguration an, die sich auf die Nginx-Standardseite bezieht. In der Konfigurationsdatei gibt es eine Zeile:
<code>include /etc/nginx/sites-enabled/*; </code>
Diese Zeile lädt eine externe Konfigurationsdatei. Es gibt nur eine Standarddatei im Sites-Enabled-Ordner verantwortlich für unseren Standard-Proxy für Nginx. Nach dem Verkleinern des Konfigurationsinhalts erhalten wir die folgenden Zeilen:
<code>server { server_name localhost; listen 80 default_server; listen [::]:80 default_server ipv6only=on; root /usr/share/nginx/html; index index.html index.htm; location / { try_files $uri $uri/ =404; } } </code>
Eine große Website verfügt normalerweise über viele untergeordnete Websites, von denen jede über einen eigenen Server verfügt, der entsprechende Dienste bereitstellt. In Nginx können wir isolieren Diese verschiedenen Dienstkonfigurationen werden über ein Konzept namens „virtueller Host“ gesteuert. Dies ist die Bedeutung von „Server“ in der obigen Konfiguration. Beispielsweise verfügt Google über zwei Produkte: Übersetzung und Academic. Die Servernamen lauten „translate.google.com“ und „stipendiat.google.com“. Die Anfrage entspricht den entsprechenden Einstellungen von Nginx und wird an verschiedene Back-End-Server weitergeleitet. Hier ist ServerName wird mit der Hostzeile in der Client-HTTP-Anfrage abgeglichen.
In diesem Beispiel ist server_name localhost, weshalb wir über localhost im Browser auf die Seitenkonfiguration zugreifen können. Die folgenden beiden Listen entsprechen den Listening-Ports unter IPv4 bzw. IPv6. Wenn sie auf 8080 eingestellt sind, können wir nur über localhost:8080 auf die Standardseite zugreifen. default_server bedeutet, dass die Konfiguration dieses Servers verwendet wird, wenn andere HTTP-Anforderungshosteinstellungen vorhanden sind, die in Nginx nicht vorhanden sind. Wenn wir beispielsweise auf 127.0.0.1 zugreifen, erfolgt die Verarbeitung ebenfalls auf diesem Server. Jede URL-Anfrage entspricht einem Dienst, und Nginx verarbeitet sie und leitet sie entweder an einen lokalen Dateipfad oder einen Dienstpfad anderer Server weiter. Der Abgleich dieses Pfades erfolgt über den Standort. Wir können uns einen Server als die Konfiguration vorstellen, die einem Domänennamen entspricht, und einen Standort als die Konfiguration eines detaillierteren Pfads unter einem Domänennamen. Alle Anfragen, die mit dem Standortabgleich /, also /xxx oder /yyy unter localhost, beginnen, müssen die folgende Konfiguration durchlaufen. Zusätzlich zu diesem einfachen und groben Abgleich unterstützt Nginx auch reguläre Ausdrücke, vollständige Gleichheit und andere Feinanpassungsmethode. Und tryfiles bedeutet, dass Nginx in der folgenden Reihenfolge auf die Dateien zugreift und die erste passende zurückgibt. Wenn Sie beispielsweise „localhost/test“ anfordern, wird nach der Datei „/test“ gesucht. Wenn sie nicht gefunden wird, wird nach „/test/“ gesucht. Darüber hinaus können wir auch Proxyin der Standortkonfiguration verwenden Implementieren Sie Reverse-Proxy und Lastausgleich, diese einfachste Konfiguration ist jedoch nicht erforderlich.
Wobei sich root auf einen lokalen Ordner als Root-Pfad für alle URL-Anfragen bezieht. Wenn der Benutzer beispielsweise einen localhost/test anfordert, sucht nginx im Ordner /usr/share/nginx/html nach der Testdatei und gibt sie zurück. Und Index ist die Standardzugriffsseite. Wenn wir auf localhost zugreifen, wird automatisch nach index.html und index.htm im Stammdateipfad gesucht und das erste gefundene Ergebnis zurückgegeben. Erweiterte Standortkonfiguration上面的配置只是将用户的 url 映射到本地的文件,并没有实现传说中的反向代理和负载均衡(当然 nginx 做静态文件的分发也是想到的厉害),下面我们就来进一步配置 location 看看怎么实现。
配置起来很简单比如我要将所有的请求到转移到真正提供服务的一台机器的 8080 端口,只要这样:
<code>location / { proxy_pass 123.34.56.67:8080; } </code>
这样所有的请求就都被反向代理到 123.34.56.67 去了。这样我们反向代理的功能是实现了,可是就能代理到一台服务器上哪有什么负载均衡呀?这就要用到 nginx 的 upstream 模块了。
<code>upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; server backend3.example.com; server backend4.example.com; } location / { proxy_pass http://backend; } </code>
我们在 upstream 中指定了一组机器,并将这个组命名为 backend,这样在 proxypass 中只要将请求转移到 backend 这个 upstream 中我们就实现了在四台机器的反向代理加负载均衡。其中的 iphash 指明了我们均衡的方式是按照用户的 ip 地址进行分配。
要让配置生效,我们不必重启 nginx 只需要 reload 配置即可。
<code>sudo service nginx reload </code>
总结
以上是最简单的通过 nginx 实现静态文件转发、反向代理和负载均衡的配置。在 nginx 中所有的功能都是通过模块来实现的,比如当我们配置 upstream 时是对 upstream 模块,而 server 和 location 是在 http core 模块,其他的还有流控的 limt 模块,邮件的 mail 模块,https 的 ssl 模块。他们的配置都是类似的可以再 nginx 的模块文档中找到详细的配置说明。
以上就介绍了nginx 配置从零开始,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。