Antworten:
Ich habe mir dies auch im Nginx-Wiki und in anderen Blogs angesehen. Der beste Weg zur Leistung besteht darin, Folgendes zu tun:
Umleiten von www.example.com zu example.com mit nginx (Version 1.0.12 zum Zeitpunkt des Schreibens).
server {
server_name www.example.com;
rewrite ^ $scheme://example.com$request_uri permanent;
# permanent sends a 301 redirect whereas redirect sends a 302 temporary redirect
# $scheme uses http or https accordingly
}
server {
server_name example.com;
# the rest of your config goes here
}
Wenn Anfragen an example.com kommen, werden keine if-Anweisungen für die Leistung verwendet. Und es verwendet $ request_uri, anstatt eine $ 1-Übereinstimmung erstellen zu müssen, die das Umschreiben besteuert (siehe Seite "Nginx Common Pitfalls").
Quellen:
Nach einigem Herumgraben und einigen Fehltritten ist hier die Lösung. Das Problem, auf das ich gestoßen bin, ist, sicherzustellen, dass " http://example.com $ uri" verwendet wird. Das Einfügen eines / vor $ uri führt zu einer Weiterleitung zu http://example.com//
server {
listen 80;
server_name www.example.com;
rewrite ^ http://example.com$uri permanent;
}
# the server directive is nginx's virtual host directive.
server {
# port to listen on. Can also be set to an IP:PORT
listen 80;
# Set the charset
charset utf-8;
# Set the max size for file uploads to 10Mb
client_max_body_size 10M;
# sets the domain[s] that this vhost server requests for
server_name example.com;
# doc root
root /var/www/example.com;
# vhost specific access log
access_log /var/log/nginx_access.log main;
# set vary to off to avoid duplicate headers
gzip off;
gzip_vary off;
# Set image format types to expire in a very long time
location ~* ^.+\.(jpg|jpeg|gif|png|ico)$ {
access_log off;
expires max;
}
# Set css and js to expire in a very long time
location ~* ^.+\.(css|js)$ {
access_log off;
expires max;
}
# Catchall for everything else
location / {
root /var/www/example.com;
access_log off;
index index.html;
expires 1d;
if (-f $request_filename) {
break;
}
}
}
Bitte besuchen Sie diese Frage in SO: /programming//a/11733363/846634
Aus der besseren Antwort:
Eigentlich brauchen Sie nicht einmal ein Umschreiben.
server {
#listen 80 is default
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
server {
#listen 80 is default
server_name example.com;
## here goes the rest of your conf...
}
Da meine Antwort immer mehr Stimmen bekommt, aber auch die oben genannten. Sie sollten rewrite
in diesem Zusammenhang niemals ein verwenden . Warum? Weil nginx eine Suche verarbeiten und starten muss. Wenn Sie verwenden return
(was in jeder Nginx-Version verfügbar sein sollte), wird die Ausführung direkt gestoppt. Dies ist in jedem Zusammenhang bevorzugt.
Ändern Sie die vhost-Datei, um zu Nicht-WWW umzuleiten:
server {
listen 80;
server_name www.example.com;
rewrite ^/(.*) http://example.com/$1 permanent;
}
'Permanent' verwandelt die Umleitung in eine 301-Umleitung. Nach diesem Codeblock können Sie die Domain ohne www konfigurieren.
Für die Umleitung von Nicht-WWW zu WWW:
server {
listen 80;
server_name example.com;
rewrite ^/(.*) http://www.example.com/$1 permanent;
}
Thassit.
Übrigens, für eine vollständige VPS-Einrichtung mit Nginx lesen Sie die VPS-Bibel auf meiner Website guvnr.com, und ich hoffe, das ist praktisch!
Das benutze ich:
# ---------------------------------------
# vHost www.example.com
# ---------------------------------------
server {
##
# Redirect www.domain.tld
##
server_name www.example.com;
rewrite ^(.*) http://example.com$1 permanent;
}
# ---------------------------------------
# vHost example.com
# ---------------------------------------
server {
# Something Something
}
server {}
.