Estoy tratando de servir una ruta específica de Rails para la página predeterminada de Nginx. Tengo una aplicación que permite a los usuarios crear sitios, pero el sitio solo está disponible bajo ciertas condiciones, por lo que hasta que se cumplan esas condiciones, no se crea el bloqueo del servidor Nginx para ese sitio, lo que significa que si intentan visitar su sitio usando su dominio terminan viendo la página predeterminada de Nginx (Bienvenido a Nginx).
Lo que estoy tratando de hacer es hacer que Nginx sirva una de las rutas de Rails para que sea un poco más fácil de usar y evitar preguntas de soporte innecesarias para aquellos que no leen las instrucciones (que son básicamente todas).
He estado probando diferentes configuraciones en el archivo de configuración predeterminado de Nginx, pero fue en vano, Nginx siempre termina sirviendo la página raíz de la aplicación Rails en lugar de la ruta específica que quiero (/ casi allí):
/etc/nginx/sitios-disponibles/predeterminado
server { listen 80 default_server; listen [::]:80 default_server; root /var/www/railsapp/public; passenger_enabled on; rails_env production; index almost-there.html; server_name _; location / { index almost-there.html; } } Tenga en cuenta que almost-there.html es una ruta de rieles, no un archivo html estático real.
No uso este marco, pero probablemente necesite redirigir a los visitantes a /almost-there.html pero servir el /index.html como de costumbre.
Por ejemplo:
index index.html; location = / { return 302 /almost-there.html; } location / { try_files $uri $uri/ /index.html; }Alternativamente, para redirigir todas las rutas:
index index.html; location / { try_files $uri $uri/ @redirect; } location @redirect { rewrite ^/almost-there\.html$ /index.html last; return 302 /almost-there.html; }Entonces, lo que terminé haciendo fue eliminar el bloque de location por completo, así como la directiva index y, en su lugar, redirigir / a la ruta de Rails que quería mostrar:
rewrite ^/$ /almost-there redirect;Es importante tener en cuenta que este es un redireccionamiento temporal en lugar de uno permanente, ya que no queremos que los navegadores almacenen en caché este redireccionamiento para evitar problemas una vez que el sitio real esté listo para mostrarse.