Nginx-Standortkonfiguration
Freigeben: 2016-08-08 09:27:16
Original
1367 Leute haben es durchsucht
Grammatikregeln: Ort [=|~|~*|^~] /uri/ { … }
= bedeutet eine genaue Übereinstimmung
^~ Beginnend mit
bedeutet, dass die URI mit einer regulären Zeichenfolge beginnt, die als Übereinstimmung mit dem URL-Pfad verstanden werden kann. Nginx kodiert die URL nicht, daher lautet die Anfrage /static/20%/aa, was durch die Regel^~ geregelt werden kann
/static/ /aa stimmt überein (beachten Sie das Leerzeichen).
~ Der Anfang von
bedeutet, dass die Groß-/Kleinschreibung beachtet wird.
~* Der Anfang von
bedeutet, dass bei regulären Übereinstimmungen zwischen Groß- und Kleinschreibung nicht unterschieden wird
!~
und !~* bei Übereinstimmungen zwischen Groß- und Kleinschreibung
Nichtübereinstimmung
und Groß- und Kleinschreibung
stimmt nicht mit
regulärem Ausdruck
/
universeller Übereinstimmung überein, jede Anfrage wird abgeglichen.
Im Falle mehrerer Standortkonfigurationen lautet die passende Reihenfolge (stammt aus Referenzmaterialien, wurde nicht tatsächlich überprüft, probieren Sie es einfach aus und Sie werden wissen, seien Sie nicht starr, es dient nur als Referenz):
Zuerst Übereinstimmung =, dann ^~, dann reguläre Übereinstimmung in der Reihenfolge in der Datei und schließlich / universelle Übereinstimmung. Wenn ein Abgleich erfolgreich ist, wird der Abgleich gestoppt und die Anfrage gemäß den aktuellen Abgleichsregeln verarbeitet.
Zum Beispiel gibt es folgende Matching-Regeln: location = / {
#规则A
}
location = /login {
#规则B
}
location ^~ /static/ {
#规则C
}
location ~ \.(gif|jpg|png|js|css)$ {
#规则D
}
location ~* \.png$ {
#规则E
}
location !~ \.xhtml$ {
#规则F
}
location !~* \.xhtml$ {
#规则G
}
location / {
#规则H
}
Nach dem Login kopieren
Dann ist der Effekt wie folgt:
Zugriff auf das Stammverzeichnis/, z. B. http://localhost/ entspricht der Regel A
Zugriff auf http:/ /localhost/login entspricht der Regel B, http://localhost/register entspricht der Regel H
und http://localhost/static/a.html entspricht der Regel C
Beim Besuch von http://localhost/a.gif stimmt http://localhost/b.jpg mit Regel D und Regel E überein, aber die Reihenfolge von Regel D hat Vorrang, Regel E funktioniert nicht und http://localhost/static/c.png wird zuerst mit Regel C abgeglichen.
Beim Zugriff auf http://localhost/a.PNG, Regel E wird abgeglichen, Regel D jedoch nicht, da Regel E nicht zwischen Groß- und Kleinschreibung unterscheidet.
Der Zugriff auf http://localhost/a.xhtml entspricht nicht Regel F und Regel G. http://localhost/a.XHTML entspricht nicht Regel G, da es keine Größe hat empfindlich. Schreiben. Regel F und Regel G gehören zur Eliminierungsmethode, die den Übereinstimmungsregeln entspricht, aber nicht abgeglichen wird. Denken Sie also darüber nach, wo sie in tatsächlichen Anwendungen verwendet werden.
Der Zugriff auf http://localhost/category/id/1111 wird schließlich mit Regel H übereinstimmen. Da keine der oben genannten Regeln zutrifft, sollte nginx die Anfrage an den Back-End-Anwendungsserver weiterleiten Derzeit gibt es FastCGI (PHP), Tomcat (JSP) und Nginx als direktionale Proxy-Server.
Im tatsächlichen Gebrauch habe ich persönlich das Gefühl, dass es mindestens drei übereinstimmende Regeldefinitionen gibt, wie folgt: #直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。
#这里是直接转发给后端应用服务器了,也可以是一个静态首页
# 第一个必选规则
location = / {
proxy_pass http://tomcat:8080/index
}
# 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {
root /webroot/static/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
root /webroot/res/;
}
#第三个规则就是通用规则,用来转发动态请求到后端应用服务器
#非静态文件请求就默认是动态请求,自己根据实际把握
#毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了
location / {
proxy_pass http://tomcat:8080/
}
Nach dem Login kopieren
Weitere Informationen, die nicht getestet wurden: 3. ReWrite-Syntax
zuletzt – verwenden Sie grundsätzlich dieses Flag.
break – Umleitung abbrechen und Abgleich nicht mehr fortsetzen
redirect – HTTP-Status 302 der temporären Umleitung zurückgeben
permanent – HTTP-Status 301 der permanenten Umleitung zurückgeben
Hinweis: Der größte Unterschied zwischen last und break ist
- break dient dazu, die Neuschreiberkennung des aktuellen Standorts zu beenden und keinen Standortabgleich mehr durchzuführen. - Letzter dient dazu, die Neuschreiberkennung des aktuellen Standorts zu beenden, aber den Standort erneut zu versuchen Anpassen und Verarbeiten der Block-Rewrite-Regeln
1. Die folgenden Ausdrücke können verwendet werden, um zu bestimmen:
-f und !-f werden verwendet, um zu bestimmen, ob die Datei vorhanden ist.
-d und !-d werden verwendet, um zu bestimmen, ob die Datei vorhanden ist Bestimmen Sie, ob das Verzeichnis vorhanden ist
-e und !-e werden verwendet, um festzustellen, ob eine Datei oder ein Verzeichnis vorhanden ist
-x und !-x werden verwendet, um zu bestimmen, ob eine Datei ausführbar ist
2 globale Variablen, die zur Beurteilung verwendet werden können
$args #Diese Variable entspricht dem Parameter in der Anforderungszeile.
$content_length #Feld „Inhaltslänge“ im Anforderungsheader.
$content_type #Content-Type-Feld im Anforderungsheader.
$document_root #Der in der Root-Direktive angegebene Wert wird derzeit angefordert.
$host #Host-Header-Feld anfordern, andernfalls ist es der Servername.
$http_user_agent #Kundenagenteninformationen
$http_cookie #Kunden-Cookie-Informationen
$limit_rate #Diese Variable kann die Verbindungsrate begrenzen.
$request_body_file #Der temporäre Dateiname der Client-Anfragetextinformationen.
$request_method #Die vom Client angeforderte Aktion, normalerweise GET oder POST.
$remote_addr #Die IP-Adresse des Clients.
$remote_port #Port des Clients.
$remote_user #Benutzername, der vom Auth Basic Module überprüft wurde.
$request_filename #Der Dateipfad der aktuellen Anfrage, generiert durch die Root- oder Alias-Direktive und die URI-Anfrage.
$query_string # Gleich wie $args.
$scheme #HTTP Methode (z. B. http, https).
$server_protocol #Das von der Anfrage verwendete Protokoll, normalerweise HTTP/1.0 oder HTTP/1.1.
$server_addr #Serveradresse, dieser Wert kann nach Abschluss eines Systemaufrufs ermittelt werden.
$server_name #Servername.
$server_port #Die Portnummer, über die die Anfrage den Server erreicht.
$request_uri #Enthält den ursprünglichen URI der Anforderungsparameter, ausgenommen den Hostnamen, wie zum Beispiel: „/foo/bar.php?arg=baz“ .
$uri #Der aktuelle URI ohne Anforderungsparameter, $uri enthält nicht den Hostnamen, z. B. „/foo/bar.html“.
$document_uri #Das Gleiche wie $uri. Beispiel: http://localhost:88/test1/test2/test.php
$host: localhost
$server_port:88
$request_uri: http ://localhost:88/test1/test2/test.php
$document_uri:/test1/test2/test.php
$document_root:D:nginx/html
$request_filename:D:nginx/html /test1/test2/test.php
4. Umleitungssyntax
Mehrere Verzeichnisse in Parameter umwandeln
abc.domian.com/sort/2 => abc.domian.com/index.php?act= sort&name=abc&id=2
1. if
($host ~* (.*).domain.com) {
2. einstellen
$sub_name $1;
3. umschreiben
^/sort/(d+)/?$ /index.php?act=sort&cid=$sub_name&id=$1 last;
4. }
Verzeichnistausch
/123456/xxxx -> /xxxx?id=123456
1. umschreiben
^/(d+)/(.+)/ /$2?id=$1 last;
Zum Beispiel leitet die folgende Einstellung nginx zum Verzeichnis /nginx-ie um, wenn der Benutzer es verwendet dh als Nächstes:
1. if
($http_user_agent ~ MSIE) {
2. umschreiben
^(.*)$ /nginx-ie/$1 break;
3. } Das Verzeichnis fügt automatisch „/“ hinzu
1. wenn
(-d $request_filename){
2. umschreiben
^/(.*)([^/])$ http://$host/$1$2/ permanent;
3. }
HTaccess verboten
1. Standort
~/.ht {
2.
Alles ablehnen;
3.
}
Mehrere Verzeichnisse verbieten
1. Standort
~ ^/(cron|templates)/ {
2.
alles leugnen;
3. brechen;
4.
}
Dateien verbieten, die mit /data beginnen
Sie können Anfragen für .log.txt und andere Anfragen in mehrstufigen Verzeichnissen unter /data/; verbieten
1. Standort
~ ^/data {
2.
Alles ablehnen;
3.
}
Ein einzelnes Verzeichnis blockieren
.log.txt kann nicht gesperrt werden, kann angefordert werden
1. Standort
/searchword/cron/ {
2.
Alles ablehnen;
3.
}
Eine einzelne Datei blockieren
1. Speicherort
~ /data/sql/data.sql {
2.
Alles ablehnen;
3.
}
Legen Sie die Ablaufzeit für favicon.ico und robots.txt fest;
Hier beträgt favicon.ico 99 Tage, robots.txt 7 Tage und kein 404-Fehlerprotokoll aufgezeichnet
1. Ort
~(favicon.ico) {
2.
log_not_found off;
3. läuft ab
99d;4.
Pause;5.
}6.
Standort ~(robots.txt) {
8.
log_not_found off;9. läuft ab
7d;
10.Pause;
11 eine bestimmte Datei; hier sind es 600 Sekunden, und es wird kein Zugriffsprotokoll aufgezeichnet
1.
Speicherort
^~ /html/scripts/loadhead_1.js {
2.
access_log off;
3.
root /opt/lampp/htdocs/web;
4.
600;5.
Pause;6.
}Datei-Anti-Hotlinking und Ablaufzeit festlegenDie Rückgabe 412 ist hier ein benutzerdefinierter HTTP-Statuscode, der Standardwert ist 403, was praktisch ist, um die richtige Hotlinking-Anfrage zu finden
„rewrite ^/ http://leech.c1gstudio.com/leech.gif;“ Zeigt ein Anti-Hotlink-Bild an
„access_log off;“ Keine Zugriffsprotokolle aufzeichnen und Stress reduzieren
„expires 3d“ Alle Browser-Cache-Dateien für 3 Tage
1.
Speicherort
~* ^.+.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {2.
valid_referers
keine blockiert *.c1gstudio.com *.c1gstudio.net localhost 208.97.167.194;3.
if
($invalid_referer) {4.
umschreiben ^/ http://leech.c1gstudio.com/leech.gif;5.
return 412;6.
Pause;7.
}8.
access_log off;9.
root /opt/lampp/htdocs/web;10
läuft 3d ab;
11 Pause;
12.
}
Nur feste IP-Adressen für den Zugriff auf die Website zulassen und ein Passwort hinzufügen
1.
Wurzel
/opt/htdocs/www;
2.
erlauben
208.97.167.194;
3.
erlauben
222.33.1.2;
4.
erlauben
231.152.49.4;
5. ablehnen
alle;
6. auth_basic
"C1G_ADMIN";
7. auth_basic_user_file
htpasswd;
Dateien in mehrstufigen Verzeichnissen in eine Datei konvertieren, um den SEO-Effekt zu verbessern
/job-123-456-789.html verweist auf /job/123/456/ 789.html
1. umschreiben
^/job-([0-9]+)-([0-9]+)-([0-9]+).html$ /job/$1/$2/jobshow_$3.html last;
Verweisen Sie einen Ordner im Stammverzeichnis auf das Verzeichnis der zweiten Ebene.
Zum Beispiel zeigt /shanghaijob/ auf /area/shanghai/.
Wenn Sie „Last“ auf „Permanent“ ändern, ist dies die Browseradresse Die Leiste zeigt /location/shanghai/
1.
^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;Ein Problem mit dem obigen Beispiel besteht darin, dass beim Zugriff auf / Shanghai Wird nicht übereinstimmen
1.
umschreiben
^/([0-9a-z]+)job$ /area/$1/ last;2.
umschreiben
^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;Auf diese Weise kann auch auf /shanghai zugegriffen werden, aber auf der Seite Der relative Link kann nicht verwendet werden. Die tatsächliche Adresse von ./list_1.html lautet beispielsweise /area /shanghia/list_1.html, wodurch sie zu /list_1.html wird.
Es funktioniert nicht, wenn ich einen automatischen Sprung hinzufüge (-d $request_filename) Es gibt eine Bedingung, dass es sich um ein echtes Verzeichnis handeln muss, aber mein Umschreiben ist nicht so es gibt keine Wirkung
1.
wenn
(-d $request_filename){2.
umschreiben
^/(.*)([^/])$ http://$host/$1$2/ permanent;3.
}Es wird einfacher, sobald Sie den Grund kennen, lassen Sie mich manuell springen
1.
umschreiben
^/([0-9a-z]+)job$ /$1job/ permanent;2.
umschreiben
^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;Umleiten, wenn die Datei und das Verzeichnis nicht vorhanden sind:
1.
wenn
(!-e $request_filename) {2.
proxy_pass
http://127.0.0.1;3.
}Domainnamensprung
1. Server
2.
{
3.
Hören
Servername jump.c1gstudio.com;
5.
index index.html index.htm index.php;
6.
/opt/lampp/htdocs/www;
7.
umschreiben ^/ http://www.c1gstudio.com/;8.
access_log off;
9.
}
Umleitung mehrerer Domänennamen
1.
Servername
www.c1gstudio.com www.c1gstudio.net;
2.
index index.html index.htm index.php;
3.
($host ~ "c1gstudio.net") {
5.
umschreiben
^(.*) http://www.c1gstudio.com$1 permanent;
6.
}
Sprung des Domainnamens der dritten Ebene
1.
wenn
($http_host ~* "^(.*).i.c1gstudio.com$") {
2.
umschreiben
^(.*) http://top.yingjiesheng.com$1;
3.
Pause;
4.
}
Domain Name Mirror
1. Server
2.
{
3.
Hören
aber aber
index index.html index.htm index.php;
6.
/opt/lampp/htdocs/www;
7.
rewrite ^/(.*) http://www.c1gstudio.com/$1 last;8.
access_log off;
9.
}
Das Obige stellt die Standortkonfiguration von Nginx vor, einschließlich verschiedener Aspekte. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.
Erklärung dieser Website
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
Neueste Artikel des Autors
-
2024-10-22 09:46:29
-
2024-10-13 13:53:41
-
2024-10-12 12:15:51
-
2024-10-11 22:47:31
-
2024-10-11 19:36:51
-
2024-10-11 15:50:41
-
2024-10-11 15:07:41
-
2024-10-11 14:21:21
-
2024-10-11 12:59:11
-
2024-10-11 12:17:31