www non redirect ubuntu nginx rackspace no-www

non - nginx redirect http to https



Nginx no-www a www y www a no-www (15)

Blog de fantasmas

con el fin de hacer nginx método recomendado con return 301 $scheme://example.com$request_uri; trabaje con Ghost que necesitará agregar en su bloque de servidor principal:

proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-NginX-Proxy true; proxy_pass_header X-CSRF-TOKEN; proxy_buffering off; proxy_redirect off;

Estoy usando nginx en la nube de Rackspace siguiendo un tutorial y habiendo buscado en la red y hasta ahora no puedo solucionarlo.

Quiero que www.mysite.com vaya a mysite.com normalmente en .htaccess por SEO y otras razones.

Mi /etc/nginx/sites-available/www.example.com.vhost config:

server { listen 80; server_name www.example.com example.com; root /var/www/www.example.com/web; if ($http_host != "www.example.com") { rewrite ^ http://example.com$request_uri permanent; }

También he intentado

server { listen 80; server_name example.com; root /var/www/www.example.com/web; if ($http_host != "www.example.com") { rewrite ^ http://example.com$request_uri permanent; }

Yo también lo intenté. Tanto los segundos intentos dan errores de bucle de redirección.

if ($host = ''www.example.com'' ) { rewrite ^ http://example.com$uri permanent; }

Mi DNS se configura como estándar:

site.com 192.192.6.8 A type at 300 seconds www.site.com 192.192.6.8 A type at 300 seconds

(por ejemplo, las direcciones IP y las carpetas se han utilizado para ayudar a las personas en el futuro). Yo uso Ubuntu 11.


Solución HTTP

De la documentation , "la forma correcta es definir un servidor separado para example.org":

server { listen 80; server_name example.com; return 301 http://www.example.com$request_uri; } server { listen 80; server_name www.example.com; ... }

Solución HTTPS

Para aquellos que quieren una solución incluyendo https:// ...

server { listen 80; server_name www.domain.com; # $scheme will get the http protocol # and 301 is best practice for tablet, phone, desktop and seo return 301 $scheme://domain.com$request_uri; } server { listen 80; server_name domain.com; # here goes the rest of your config file # example location / { rewrite ^/cp/login?$ /cp/login.php last; # etc etc... } }

Nota: originalmente no incluí https:// en mi solución ya que usamos loadbalancers y nuestro servidor https: // es un servidor de pago SSL de alto tráfico: no mezclamos https: // y http: //.

Para verificar la versión nginx, use nginx -v .

Pele www de url con nginx redirect

server { server_name www.domain.com; rewrite ^(.*) http://domain.com$1 permanent; } server { server_name domain.com; #The rest of your configuration goes here# }

Así que necesitas tener DOS códigos de servidor.

Agregue el www a la url con nginx redirect

Si lo que necesita es lo contrario, para redirigir desde domain.com a www.domain.com, puede usar esto:

server { server_name domain.com; rewrite ^(.*) http://www.domain.com$1 permanent; } server { server_name www.domain.com; #The rest of your configuration goes here# }

Como puedes imaginar, esto es todo lo contrario y funciona de la misma manera que el primer ejemplo. De esta manera, no obtendrás marcas de SEO bajas, ya que se redirige y mueve por completo. ¡El WWW no es forzado y se muestra el directorio!

Algunos de mis códigos se muestran a continuación para una mejor vista:

server { server_name www.google.com; rewrite ^(.*) http://google.com$1 permanent; } server { listen 80; server_name google.com; index index.php index.html; #### # now pull the site from one directory # root /var/www/www.google.com/web; # done # location = /favicon.ico { log_not_found off; access_log off; } }


Aquí le mostramos cómo hacerlo para varios nombres de servidor www a no www (lo usé para subdominios):

server { server_name "~^www/.(sub1.example.com)$" "~^www/.(sub2.example.com)$" "~^www/.(sub3.example.com)$"; return 301 $scheme://$1$request_uri ; }


Combiné la mejor de todas las respuestas simples, sin dominios codificados.

301 redirección permanente de no-www a www (HTTP o HTTPS):

server { if ($host !~ ^www/.) { rewrite ^ $scheme://www.$host$request_uri permanent; } # Regular location configs... }

Si prefiere no HTTPS, no www a HTTPS, www redirigir al mismo tiempo:

server { listen 80; if ($host !~ ^www/.) { rewrite ^ https://www.$host$request_uri permanent; } rewrite ^ https://$host$request_uri permanent; }


En realidad, ni siquiera necesita una reescritura.

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... }

Como mi respuesta es obtener más y más votos, pero también lo anterior. Nunca debes usar una rewrite en este contexto. ¿Por qué? Porque nginx tiene que procesar e iniciar una búsqueda. Si usa return (que debería estar disponible en cualquier versión de nginx), se detiene directamente la ejecución. Esto es preferido en cualquier contexto.

Redireccione ambos, no SSL y SSL a su contraparte no www:

server { listen 80; listen 443 ssl; server_name www.example.com; ssl_certificate path/to/cert; ssl_certificate_key path/to/key; return 301 $scheme://example.com$request_uri; } server { listen 80; listen 443 ssl; server_name example.com; ssl_certificate path/to/cert; ssl_certificate_key path/to/key; # rest goes here... }

La variable $scheme solo contendrá http si su servidor solo escucha en el puerto 80 (predeterminado) y la opción de escucha no contiene la palabra clave ssl . No usar la variable no te dará ningún rendimiento.

Tenga en cuenta que necesita incluso más bloques de servidor si utiliza HSTS, porque los encabezados HSTS no deben enviarse a través de conexiones no cifradas. Por lo tanto, necesita bloques de servidor sin cifrar con redirecciones y bloques de servidor cifrados con redirecciones y encabezados HSTS.

Redirigir todo a SSL (configuración personal en UNIX con IPv4, IPv6, SPDY, ...):

# # Redirect all www to non-www # server { server_name www.example.com; ssl_certificate ssl/example.com/crt; ssl_certificate_key ssl/example.com/key; listen *:80; listen *:443 ssl spdy; listen [::]:80 ipv6only=on; listen [::]:443 ssl spdy ipv6only=on; return 301 https://example.com$request_uri; } # # Redirect all non-encrypted to encrypted # server { server_name example.com; listen *:80; listen [::]:80; return 301 https://example.com$request_uri; } # # There we go! # server { server_name example.com; ssl_certificate ssl/example.com/crt; ssl_certificate_key ssl/example.com/key; listen *:443 ssl spdy; listen [::]:443 ssl spdy; # rest goes here... }

Supongo que puedes imaginar otros compuestos con este patrón ahora solo.

¿Más de mis configuraciones? Ve here y here .


Esta solución viene de mi experiencia personal. Utilizamos varios depósitos de Amazon S3 y un servidor para redireccionar non-www nombres de dominio que non-www a www para que coincidan con la política de encabezado "Host" de S3 .

Utilicé la siguiente configuración para el servidor nginx :

server { listen 80; server_name ~^(?!www/.)(?<domain>.+)$; return 301 $scheme://www.$domain$request_uri; }

Esto coincide con todos los nombres de dominio apuntados al servidor comenzando con cualquier cosa, pero www. y redirige a www.<domain> . De la misma manera, puede hacer una redirección opuesta de www a non-www .


Formato único:

server { listen 80; server_name "~^www/.(.*)$" ; return 301 https://$1$request_uri ; }


Necesitas dos bloques de servidor.

Póngalos en su archivo de configuración, por ejemplo, /etc/nginx/sites-available/sitename

Digamos que usted decide tener http://example.com como la dirección principal a usar.

Su archivo de configuración debería verse así:

server { listen 80; listen [::]:80; server_name www.example.com; return 301 $scheme://example.com$request_uri; } server { listen 80; listen [::]:80; server_name example.com; # this is the main server block # insert ALL other config or settings in this server block }

El primer bloque de servidor contendrá las instrucciones para redirigir cualquier solicitud con el prefijo ''www''. Escucha las solicitudes de la URL con el prefijo ''www'' y las redirecciones.

No hace nada más.

El segundo bloque de servidor tendrá su dirección principal, la URL que desea usar. Todas las demás configuraciones van aquí como root , index , location , etc. Verifique el archivo predeterminado para estas otras configuraciones que puede incluir en el bloque del servidor.

El servidor necesita dos registros DNS A

Name: @ IPAddress: your-ip-address (for the example.com URL) Name: www IPAddress: your-ip-address (for the www.example.com URL)

Para ipv6, cree el par de registros AAAA usando su dirección-ipv6.


No estoy seguro si alguien notó que puede ser correcto devolver un 301 pero los navegadores se ahogan en hacerlo

rewrite ^(.*)$ https://yoursite.com$1;

es más rápido que:

return 301 $scheme://yoursite.com$request_uri;


Puede descubrir que desea utilizar la misma configuración para más dominios.

El siguiente fragmento elimina www antes de cualquier dominio:

if ($host ~* ^www/.(.*)$) { rewrite / $scheme://$1 permanent; }


Si tiene problemas para hacer que esto funcione, es posible que deba agregar la dirección IP de su servidor. Por ejemplo:

server { listen XXX.XXX.XXX.XXX:80; listen XXX.XXX.XXX.XXX:443 ssl; ssl_certificate /var/www/example.com/web/ssl/example.com.crt; ssl_certificate_key /var/www/example.com/web/ssl/example.com.key; server_name www.example.com; return 301 $scheme://example.com$request_uri; }

donde XXX.XXX.XXX.XXX es la dirección IP (obviamente).

Nota: ssl crt y la ubicación de la clave deben definirse para redirigir correctamente las solicitudes https

No olvides reiniciar nginx después de hacer los cambios:

service nginx restart


prueba esto

if ($host !~* ^www/.){ rewrite ^(.*)$ https://www.yoursite.com$1; }

Otra forma: Nginx no-www to www

server { listen 80; server_name yoursite.com; root /path/; index index.php; return 301 https://www.yoursite.com$request_uri; }

y www a no-www

server { listen 80; server_name www.yoursite.com; root /path/; index index.php; return 301 https://yoursite.com$request_uri; }


Redirigir non-www a www

Para un solo dominio:

server { server_name example.com; return 301 $scheme://www.example.com$request_uri; }

Para todos los dominios:

server { server_name "~^(?!www/.).*" ; return 301 $scheme://www.$host$request_uri; }

Redirigir www a no www para dominio único:

server { server_name www.example.com; return 301 $scheme://example.com$request_uri; }

Para todos los dominios:

server { server_name "~^www/.(.*)$" ; return 301 $scheme://$1$request_uri ; }


if ($host ~* ^www.example.com$) { return 301 $scheme://example.com$request_uri; }


location / { if ($http_host !~ "^www.domain.com"){ rewrite ^(.*)$ $scheme://www.domain.com/$1 redirect; } }