Redirecciones mediante Nginx

428 views
Skip to first unread message

Adrian

unread,
Oct 30, 2014, 4:50:12 PM10/30/14
to men...@googlegroups.com
Buenas,

Estoy tratando de hacer funcionar las redirecciones mediante nginx en lugar de Apache, pero no lo consigo. Según he visto en un comentario del propio Galli en Menéame:


No usamos htaccess ni Apache, en NGInx las reglas son (ejecuta el dispatcher.php si no se especifica un .php):

location / {
try_files $uri /dispatcher.php$uri?$args;
}

location ~ .php {
include php_fastcgi;
}

Ese php_fastcgi supongo que contendrá la configuración de los fastcgi_params, pero no está disponible en el repositorio.

He estado haciendo pruebas con el siguiente código y así no logro que funcione, cambia la dirección en el navegador pero sigue mostrando el index.php:

location / {
      try_files $uri $uri/ /dispatcher.php?$args;
    }

 location ~ \.php$ {
      include       fastcgi_params;
      fastcgi_index dispatcher.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_pass  127.0.0.1:19761;
    }

¿Alguien sabe dónde puede estar el error?

Un saludo

Ricardo Galli

unread,
Oct 31, 2014, 12:58:12 PM10/31/14
to men...@googlegroups.com
En nginx (common_params):

    rewrite /v_\d+/(.+)$ /$1 last;

    location / {
        try_files $uri /dispatcher.php$uri?$args;
    }

    location ~ \.php {
        include php_fastcgi;
    }


El php_fastcgi:

fastcgi_pass unix:/tmp/fast-cgi.socket;
set $script $1;
fastcgi_index  index.php;
fastcgi_intercept_errors  off;
fastcgi_split_path_info ^(.+\.php)(.*)$;
include        fastcgi_params;

El fastcgi_params

fastcgi_param   QUERY_STRING        $query_string;
fastcgi_param   REQUEST_METHOD      $request_method;
fastcgi_param   CONTENT_TYPE        $content_type;
fastcgi_param   CONTENT_LENGTH      $content_length;

fastcgi_param  SCRIPT_FILENAME      $document_root$fastcgi_script_name;
fastcgi_param  PATH_INFO        $fastcgi_path_info;

fastcgi_param   SCRIPT_NAME     $fastcgi_script_name;
fastcgi_param   REQUEST_URI     $request_uri;
fastcgi_param   DOCUMENT_URI        $document_uri;
fastcgi_param   DOCUMENT_ROOT       $document_root;
fastcgi_param   SERVER_PROTOCOL     $server_protocol;

fastcgi_param   GATEWAY_INTERFACE   CGI/1.1;
fastcgi_param   SERVER_SOFTWARE     nginx/$nginx_version;

fastcgi_param   REMOTE_ADDR     $remote_addr;
fastcgi_param   SERVER_PORT     $server_port;
fastcgi_param   SERVER_NAME     $server_name;

fastcgi_param   HTTPS           $https if_not_empty;




--
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a men...@googlegroups.com
Para anular la suscripción a este grupo, envíe un mensaje a meneame-u...@googlegroups.com
Para obtener más opciones, visita este grupo en http://groups.google.com/group/meneame?hl=es.
Preguntas inteligentes y buenos modales:
http://es.wikipedia.org/wiki/Netiquette
http://sindominio.net/ayuda/preguntas-inteligentes.html
Wiki de meneame:
http://meneame.wikispaces.com/
Blog de meneame:
http://blog.meneame.net/
---
Has recibido este mensaje porque estás suscrito al grupo "Meneame desarrollo" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a meneame+u...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Adrian

unread,
Oct 31, 2014, 2:27:05 PM10/31/14
to men...@googlegroups.com
Gracias Ricardo. Lo del rewrite lo vi en el config.php y lo de las redirecciones había conseguido que "medio funcionara" de la forma que yo lo había hecho cambiando en el dispatcher.php el 'PATH_INFO' por 'REQUEST_URI', aunque cuando había parámetros en la redirección fallaba.. Ahora funciona perfectamente, gracias de nuevo.

Ahora lo único que no consigo es crear el "sub general". He intentado hacerlo de la misma manera que en versiones anteriores en las que solamente había subs como ediciones. En subs he insertado uno nuevo con los siguientes valores:
 
id -> 1
name -> mnm                //Igual que site_shortname
enabled -> 1
parent -> 0
server_name -> NULL   //Esto según vi es para el subdominio
base_url->  dominio       //Ej: meneame.net
name_long-> general
visible-> 1                      //Hace visible el link en el header
sub-> 1                          //Esto según veo en el header.html debe estar a 1 para que aparezca edición y el nombre
meta-> 0    
owner-> 0                      // ID del poseedor
nsfw-> 0    
created_from ->  0        // ID del creador
allow_main_link -> 0    // Para poner url de la forma m/nombre
color1 -> NULL
color2 -> NULL
private -> 0

Después le he asociado alguna categoría en subs_category.
Pero con esto no sale seleccionado en el header ni aparece el nombre de la edición. ¿Es necesario algo más al darlo de alta?

Una vez que tenga esto listo ya podré ponerme con la documentación que te comenté por mail para la instalación de menéame. Y una vez tenga lista la parte de instalación y puesta en marcha, ir añadiendo configuración de Sphinx, Oauth y demás.

Un saludo

Ricardo Galli

unread,
Oct 31, 2014, 4:18:36 PM10/31/14
to men...@googlegroups.com
Los que tenemos en Menéame por defecto:

+-----+-------------+---------+--------+-----------------+----------+---------------------------------+---------+------+------+-------+------+--------------+-----------------+--------+--------+---------+
| id  | name        | enabled | parent | server_name     | base_url | name_long                       | visible | sub  | meta | owner | nsfw | created_from | allow_main_link | color1 | color2 | private |
+-----+-------------+---------+--------+-----------------+----------+---------------------------------+---------+------+------+-------+------+--------------+-----------------+--------+--------+---------+
|   1 | mnm         |       1 |      0 | www.meneame.net | /        | general                         |       1 |    0 |    1 |     0 |    0 |            0 |               0 |        |        |       0 |
|   2 | emnm        |       1 |      0 | www.meneame.net | /        | cultura y tecnología            |       1 |    1 |    1 |     0 |    0 |            0 |               0 |        |        |       0 |
|   3 | gatos       |       1 |      0 | www.meneame.net | /        | internet es para gatos          |       0 |    1 |    0 |     0 |    0 |            1 |               0 | NULL   | NULL   |       0 |
|   4 | dmnm        |       1 |      0 | www.meneame.net | /        | deportes                        |       1 |    1 |    1 |     0 |    0 |            1 |               0 |        |        |       0 |
|  37 | tecnología  |       1 |      0 | www.meneame.net | /        | tecnología, internet, juegos    |       0 |    1 |    0 |     0 |    0 |            1 |               1 | NULL   | NULL   |       0 |
|  38 | ocio        |       1 |      0 | www.meneame.net | /        | ocio, entretenimiento, humor    |       0 |    1 |    0 |     0 |    0 |            1 |               1 |        |        |       0 |
|  39 | cultura     |       1 |      0 | www.meneame.net | /        | cultura, ciencia, divulgación   |       0 |    1 |    0 |     0 |    0 |            1 |               1 | NULL   | NULL   |       0 |
|  40 | actualidad  |       1 |      0 | www.meneame.net | /        | actualidad, politica y sociedad |       0 |    1 |    0 |     0 |    0 |            1 |               1 | NULL   | NULL   |       0 |

Adrian

unread,
Oct 31, 2014, 6:13:03 PM10/31/14
to men...@googlegroups.com
Así había probado yo antes, pero no era fallo de la base de datos. Acabo de encontrar que el fallo es que la variable this_site, así como this_site_properties están vacias. He visto en el libs/html1.php que se les da valor con lo siguiente:

$this_site = SitesMgr::get_info();
$this_site_properties = SitesMgr::get_extended_properties();

Y estas funciones están en libs/sites.php:
static public function get_info($id = false, $force = false) {
        global $db;

        if ($id == false || $id == self::$id) {
            if (! self::$id || $force) self::__init($id);
            return self::$info;
        } else {
            return $db->get_row(SitesMgr::SQL_BASIC."where subs.id = $id");
        }
    }

Y:

static public function get_extended_properties($id = false) {
        static $properties = array(), $last_id = false;
        if ($id == false) {
            $id = self::my_id();
        }

        if (! empty($properties) && $last_id == $id) return $properties;

        $last_id = $id;
        $properties = self::$extended_properties;

        $key = self::PREFERENCES_KEY.$id;
        $a = new Annotation($key);
        if ($a->read() && !empty($a->text)) {
            $res = json_decode($a->text, true); // We use associative array
            if ($res) {
                foreach ($res as $k => $v) {
                    $properties[$k] = $v;
                }
            }
        }
        return $properties;
    }


Y según las pruebas que he estado haciendo (prints) el fallo está en sites.php, ya que tanto self::$info como $db->get_row(SitesMgr::SQL_BASIC."where subs.id = $id") son valores vacíos al ejecutarse. ¿A qué puede ser debido?

Adrian

unread,
Oct 31, 2014, 10:07:20 PM10/31/14
to men...@googlegroups.com
El problema está al obtener los datos de la base de datos:


$db->get_row(SitesMgr::SQL_BASIC."where subs.id = $id");

Esto no lo realiza y no se el porqué. Me he dado cuenta que en el nótame tampoco lo realiza, ya que aunque deja escribir notas (y se añaden a la base de datos como he podido comprobar), al actualizar la página desaparecen, y no se puede acceder tampoco a un comentario concreto a través del permalink.

Aunque en el perfil del usuario si recoge bien los datos de la db http://178.62.100.107/user/adrianmugnoz

Por lo que no entiendo qué puede estar pasando...

Adrian

unread,
Nov 1, 2014, 6:26:06 AM11/1/14
to men...@googlegroups.com
Acabo de arreglarlo. He estado mirando el log de Mysql y si ejecutaba la consulta, por lo que probando a ejecutar la sentencia SQL directamente desde Phpmyadmin me he dado cuenta de que faltaba un campo en la tabla media, el campo extension.

He agregado a la tabla media la columna extension como int de longitud 10 por probar y ya funciona todo perfectamente. ¿Cómo tienes tu definida esta columna Ricardo?

Un saludo

Ricardo Galli

unread,
Nov 1, 2014, 7:05:43 AM11/1/14
to men...@googlegroups.com
Esa columna "ext" es de unas modificaciones hace pocos días, no generé el dump del esquema (lo siento). Está aquí el par de cambios 

--

Rafa Soler

unread,
Nov 5, 2014, 5:01:06 AM11/5/14
to men...@googlegroups.com
Muchas gracias a los dos.

Una pregunta, ¿el tema del short tag de php está resuelto? me falta revisarlo pero creo que hemos hecho todas las sustituciones necesarias, por mandar un diff con los cambios.

Ricardo Galli

unread,
Nov 5, 2014, 6:07:36 AM11/5/14
to men...@googlegroups.com

2014-11-05 11:01 GMT+01:00 Rafa Soler <ras...@gmail.com>:
Muchas gracias a los dos.

Una pregunta, ¿el tema del short tag de php está resuelto? me falta revisarlo pero creo que hemos hecho todas las sustituciones necesarias, por mandar un diff con los cambios.

No, es sólo cambiarlo en cientos de ficheros ;)


--
  ricardo galli
  http://gallir.wordpress.com/

Rafa Soler

unread,
Nov 25, 2014, 11:06:50 AM11/25/14
to men...@googlegroups.com
Hola a ver si me podéis ayudar que no acabo de localizar que he puesto mal.

Tengo copiada la configuración que propuso Ricardo, y sin embargo me da este error.

2014/11/25 15:58:00 [error] 22116#0: *1 rewrite or internal redirection cycle while internally redirecting to "/dispatcher.php/dispatcher.php/dispatcher.php/dispatcher.php/dispatcher.php/dispatcher.php/dispatcher.php/dispatcher.php/dispatcher.php/dispatcher.php/dispatcher.php/", client: 81.203.151.219, server: ras.rafaelsoler.es, request: "GET / HTTP/1.1", host: "ras.rafaelsoler.es", referrer: "http://ras.rafaelsoler.es/register"

imagino que algo tengo mal configurado, pero por más que lo repaso no lo encuentro.

Mi configuración de nginx
# HTTP server

    server {
        listen       80;
        server_name  ras.rafaelsoler.es;
#Incluimos la configuración para location /
location / {
    root   html;
    index  index.php index.html index.htm;
try_files $uri /dispatcher.php$uri?$args;
rewrite /v_\d+/(.+)$ /$1 last;
}
#Incluimos la configuración para phpfastcgi.conf";

location ~ \.php$ {
    root           html;
    fastcgi_pass   unix:/opt/bitnami/php/var/run/www.sock;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $request_filename;
#Configuración de meneame

set $script $1;
fastcgi_intercept_errors  off;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_read_timeout 300;
   

    include fastcgi_params;
}

#Incluimos la configuración para fastcgi_params

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

        include "/opt/bitnami/nginx/conf/bitnami/bitnami-apps-prefix.conf";
    }

Muchas gracias si podéis ayudarme.

RamSys

unread,
Dec 30, 2015, 6:12:35 PM12/30/15
to Meneame desarrollo
Rafa, hace más de un año de tu post, así que no sé si ya te servirá de algo, pero bueno... he tenido el mismo problema que tú.

Fíjate en el dólar ($) que tienes al final en location ~ \.php$ ; no debería estar ahí.

Un saludo :)

-- 
Jordi S.

Rafa Soler

unread,
May 27, 2016, 7:10:28 AM5/27/16
to Meneame desarrollo
Lo solucioné de otro modo, pero gracias ;)
Reply all
Reply to author
Forward
0 new messages