Saltar al contenido

Configuración de Nginnx para la plantilla de aplicación avanzada de Yii 2

Te damos la bienvenida a proyecto on line, en este sitio vas a encontrar la solucíon que necesitas.

Solución:

En pocas palabras: utilice el primer método que se proporciona a continuación.

El resto de la respuesta es una lista de recomendaciones.

Voy a separar mi respuesta en dos secciones. En la primera parte, le diré la forma más fácil y rápida de lograr su objetivo de acuerdo con las solicitudes de URL deseadas, pero rompe parcialmente la estructura de la aplicación, aunque nada serio.

En la segunda parte, le describiré dónde cometió errores en su archivo de configuración y le mostraré una configuración mal escrita para sus necesidades que funciona.

I. Implementación de alojamiento compartido

Te animo a que uses esto. Esta es una forma oficial de la documentación de Yii 2 para hacer que el backend funcione en el mismo dominio, aunque ayuda a implementar un proyecto en un alojamiento compartido. Y no requiere ninguna configuración adicional de nginx, solo una básica para la raíz del frontend.

Déjame escribir una lista simple de acuerdo con esta guía:

  1. Mover contenido de /backend/web para /frontend/web/admin.
  2. Corregir las rutas de los scripts en /frontend/web/admin/index.php (y index-test.php, si lo usas)

Eso es todo, tienes tu backend en el mismo dominio en /admin URL. Además, lea la última sección de la guía sobre cookies. La plantilla avanzada fue diseñada para usar diferentes dominios para cada entorno, por lo tanto, la guía describe la configuración del backend para el alojamiento compartido para mantener las cookies del frontend y del backend por separado.

Por supuesto, no olvide modificar su /environments archivos para la inicialización adecuada de su proyecto con /init texto.

II. Configuración de Nginx

Errores

No soy un administrador profesional de nginx, pero puedo describir lo que está mal en su configuración según mi experiencia personal y la documentación. Desafortunadamente, no podré proporcionar enlaces a la documentación porque mi calificación actual no me permitirá publicar más de 2 enlaces.

Contexto del servidor root

Usted no tiene root directiva en el contexto de su servidor. Por lo tanto, cuando ~ .php$ la ubicación coincide, no tiene raíz en absoluto y usa la raíz nginx predeterminada. Intente establecer común root directiva en el server contexto, todas las ubicaciones lo tendrán de forma predeterminada. Por ejemplo:

server 
    # Beginning of your configuration
    # ...

    root /srv/http/yii2/public/frontend/web;

    # The rest of your configuration
    # ...

No tener una raíz de contexto más alta es un error común.

root en lugar de alias

En segundo lugar, cuando una ubicación coincide, el uri se adjunta a la raíz de la ubicación y esa es la ruta que el servidor intenta buscar. Por lo tanto, tu /admin ubicación sugiere que el servidor busca $host_path/backend/web/admin. En su situación, debe usar alias directiva que le dice al servidor que la ubicación coincidente uri se refiere a la ruta de alias, no adjunta a la raíz:

location /admin 
    alias          $host_path/backend/web;

    # The rest of location
    # ...

Te recomiendo que leas la documentación relacionada con nginx sobre location, root y alias directivas.

Configuración funcional pero mal escrita

Publico esta configuración de muestra con comentarios solo para su comprensión, no para uso de producción, Te recomiendo que lo apliques para tu producción. (hasta que esté seguro de que está sano y salvo).

Funciona, pero tiene un defecto molesto: el backend no puede encontrar el script de entrada de Yii2 si lo solicita directamente (como /admin/index.php), por lo que debe usarse con enablePrettyUrl ajustado a true y showScriptName ajustado a false, sin embargo, encuentra cualquier otro script PHP en la raíz web del backend.

server 
    # The beginning of your configuration
    # ...

    # By default we will provide frontend
    root /srv/http/yii2/public/frontend/web;
    index index.php;

    location / 
        try_files $uri $uri/ /index.php?$args;
    

    location /admin 
        # We use /web/index here to make backend call to php scripts
        # distinct from frontend call
        index /web/index.php;
        alias $root_base/backend/web;
        try_files $uri $uri/ /web/index.php?$args;

        # Rewrite PHP requests from /admin to /web
        # However, Yii2 entry script returns 404
        location ~ ^/admin/.*.php$ 
            rewrite ^/admin/(.*)$ /web/$1;
        

    

    location ~ ^/web/.*.php$ 
        # Make sure this location cannot be called externally
        internal;

        # Remember, that the uri of this location
        # will be appended to this root!
        root $root_base/backend;

        # PHP settings for backend
    

    location ~ .php$ 
        # PHP settings for frontend
    

    # The rest of your configuration
    # ...

Además, agregue baseUrl propiedad a la request componente en su configuración de backend Yii2 y configúrelo en /admin.

Espero que mi respuesta lo ayude a implementar su proyecto avanzado Yii2 y a comprender más nginx, sin embargo, su pregunta tiene 6 meses de antigüedad.

Aquí está mi configuración de trabajo, basada en la respuesta aceptada. Mi proyecto backend se cambia el nombre del directorio a admin

# Example config for nginx
# frontend is available on yii-application.local/
# backend (admin) is available on yii-application.local/admin
# make sure that @app/frontend/config/main.php and @app/admin/config/main.php components sections are configured properly
# e.g. @app/frontend/config/main.php
#   'homeUrl' => '',
#   ...
#   'components' => [
#         'request' => [
#              'baseUrl' => '',
#          ],
#          'urlManager' => [
#              'enablePrettyUrl' => true,
#              'showScriptName' => false,
#          ],
#   ]
#
# e.g. @app/admin/config/main.php
#   'homeUrl' => '/admin',
#   ...
#   'components => [
#        'request' => [
#            'baseUrl' => '/admin',
#        ],
#        'urlManager' => [
#            'enablePrettyUrl' => true,
#            'showScriptName' => false,
#        ],
#   ]
server htpasswd

valoraciones y reseñas

Si haces scroll puedes encontrar las referencias de otros desarrolladores, tú de igual manera tienes la opción de mostrar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *