Risposte:
Ho anche guardato questo sul wiki di Nginx e su altri blog e il modo migliore in termini di prestazioni è fare quanto segue:
Per reindirizzare da www.example.com a example.com utilizzando nginx (versione 1.0.12 al momento della scrittura).
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
}
Quando le richieste arrivano a example.com, no se le dichiarazioni vengono utilizzate per le prestazioni. E usa $ request_uri invece di dover creare una corrispondenza di $ 1 che tassa la riscrittura (vedi la pagina Insidie comuni di Nginx).
fonti:
Dopo un po 'di ricerche e alcuni passi falsi, ecco la soluzione. Il gotcha in cui mi sono imbattuto è assicurarmi di usare " http://example.com $ uri". Inserendo un / davanti a $ uri si ottiene un reindirizzamento a 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;
}
}
}
Si prega di visitare questa domanda in SO: https://stackoverflow.com/a/11733363/846634
Dalla migliore risposta:
In realtà non hai nemmeno bisogno di una riscrittura.
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...
}
Poiché la mia risposta è ottenere sempre più voti, ma anche quanto sopra. Non dovresti mai usare a rewrite
in questo contesto. Perché? Perché nginx deve elaborare e avviare una ricerca. Se usi return
(che dovrebbe essere disponibile in qualsiasi versione di nginx), interrompe direttamente l'esecuzione. Questo è preferito in qualsiasi contesto.
Per reindirizzare a non www, modificare il file vhost:
server {
listen 80;
server_name www.example.com;
rewrite ^/(.*) http://example.com/$1 permanent;
}
'Permanente' trasforma il reindirizzamento in un reindirizzamento 301. Dopo questo blocco di codice, puoi configurare il dominio senza www.
Per il reindirizzamento da non www a www:
server {
listen 80;
server_name example.com;
rewrite ^/(.*) http://www.example.com/$1 permanent;
}
Thassit.
A proposito, per la configurazione VPS completa utilizzando Nginx, controlla la Bibbia VPS sul mio sito, guvnr.com, e spero sia utile!
Questo è quello che uso:
# ---------------------------------------
# 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 {}
blocco di configurazione principale .