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:
- Mover contenido de
/backend/web
para/frontend/web/admin
. - Corregir las rutas de los scripts en
/frontend/web/admin/index.php
(yindex-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.