Tengo nginx y quiero redirigir no-www a www:
Así que lo hice usando expresiones regulares, pero la redirección parece funcionar. Obtengo la redirección, pero www regresa el tiempo de espera.
¿Como puedo resolver esto?
upstream wwwapp { least_conn; server www-app:3000 weight=10 max_fails=3 fail_timeout=30s; } server { server_name ~^(?!www\.)(?<domain>.+)$; return 301 $scheme://www.$domain$request_uri; } server { listen 80; location / { proxy_pass http://wwwapp; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }Fácil.
server { listen 80; if ($host ~ ^(?!www\.)(?<domain>.+)$) { return 301 $scheme://www.$domain$request_uri; } location / { proxy_pass http://wwwapp; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }Su segundo bloque de server no tiene un server_name , por lo que es poco probable que lo seleccionen para procesar cualquier solicitud.
El primer bloque del server es el predeterminado y se seleccionará incluso si la expresión regular no coincide .
Debe cambiar el segundo bloque del server y agregar una declaración server_name o convertirlo en default_server .
Vea este documento para más detalles.