¿Cómo configuro el archivo conf de Nginx para forzar SSL en solo una de las rutas en mi sitio y no SSL en el resto?
Por ejemplo, quiero que todas las URL en / user sean https, pero el resto de las URL sean http.
Para la primera parte tengo:
rewrite ^/user(.*) https://$http_host$request_uri?;
No quiero usar "si". Supongo que aprovecharía el orden de operación, pero no quiero terminar en un bucle.
/user
y no ssl para todas las demás urls. Como resultado, incluso el usuario escribe explícitamentehttps://www.example.com/
en la barra de direcciones del navegador, la página resultante eshttp://www.example.com/
. ¿Hay alguna manera de implementar la reescritura automática de url entre ssl / non-ssl como se logra mediante la configuración descrita en esta respuesta, pero aún así respetar la solicitud ssl explícita si el usuario la escribe explícitamente en la barra de direcciones? ¡Gracias!Nginx permite procesar tanto HTTP como HTTPS dentro del mismo
server
bloque. Por lo tanto, no tiene que duplicar las directivas para ambos y puede redirigir la ruta que desea protegerAsegúrese de no poner
ssl on
línea allí porque romperá HTTP simple.Opcionalmente, puede redirigir todas las demás solicitudes de HTTPS a HTTP de la misma manera:
ACTUALIZACIÓN : como Alexey Ten señala amablemente en la sección de comentarios, verificar
scheme
cada solicitud no es una idea muy brillante. Debe seguir la forma declarativa de configurar su nginx. En este caso, declare dos bloques de servidor con redireccionamientoslocation
, mueva la lógica común a un archivo separado yinclude
en ambos. Entonces la respuesta de GruffTech es mejor.fuente
include
directiva para directivas comunes. Alguna duplicación está bien.