403 prohibido en el índice de wordpress con nginx, el resto de las páginas funcionan bien

3 minutos de lectura

avatar de usuario
alba dum

Estoy configurando mi blog en una nueva instancia de EC2 porque uno de los sitios en el servidor que actualmente lo aloja está siendo atacado por DDoS. Tengo algunos problemas con nginx, porque puedo ver bien todas las páginas pero 403 en el índice, o ver el índice pero 404 en las páginas (dependiendo de la configuración que esté usando)

Aquí está mi configuración nginx:

server {
    listen       80;

    server_name  www.test.com;
    server_name  test.com;
    root /www/blog;

    include conf.d/wordpress/simple.conf;
}

Y simple.conf:

location = /favicon.ico {
            log_not_found off;
            access_log off;
    }

    location = /robots.txt {
            allow all;
            log_not_found off;
            access_log off;
    }

    location / {
            # This is cool because no php is touched for static content. 
            # include the "?$args" part so non-default permalinks doesn't break when using query string
            try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
            #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
            include fastcgi.conf;
            fastcgi_intercept_errors on;
            fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
            expires max;
            log_not_found off;
    }

si cambio los try_files $uri $uri/ /index.php?$args; para indexar index.phpla portada funcionará bien y el resto será 404. Si lo dejo así, la portada es 403.

Aquí está el registro de errores:

2013/08/07 19:19:41 [error] 25333#0: *1 directory index of "/www/blog/" is forbidden, client: 64.129.X.X, server: test.com, request: "GET / HTTP/1.1", host: "www.test.com"

Ese directorio es 755 en el usuario nginx:

drwxr-xr-x 6 nginx nginx  4096 Aug  7 18:42 blog

¿Hay algo obvio que estoy haciendo mal?

Gracias !

avatar de usuario
Mohammad Abu Shady

Agregar index index.php; En el bloque del servidor, si no funciona, debe eliminar el $uri/ porque no quieres hacer un autoindex on


EDITAR: Acabo de darme cuenta de que ya resolviste tu problema, así que agregaré el razonamiento detrás de esto, la razón por la que necesitabas autoindex on; es porque sin él, nginx seguirá el try_files normas,

  1. Compruebe si hay un archivo llamado /y por supuesto falla.
  2. Compruebe si hay un directorio llamado / (al agregar raíz sería = /www/blog/), esta comprobación tendrá éxito, por lo que intenta enumerar el contenido de la carpeta.
  3. Como no especificaste autoindex on; por lo que, de forma predeterminada, nginx debería prohibir la lista de directorios, por lo que devolvería un error prohibido 403.
  4. El resto del sitio funciona bien porque falla el $uri/ test o no lo alcanza, porque probablemente no tengas una carpeta llamada image.jpg o stylesheet.css etc.

Parece que necesitaba el index.php inded en la definición del servidor {} y no en la ubicación {}

  • lol me acabo de dar cuenta de que ya lo respondiste después de que respondí, no me di cuenta, supongo que editaré mi respuesta para explicar por qué.

    – Mohammad Abu Shady

    07/08/2013 a las 21:48


Parece que no está permitiendo que se envíen argumentos al CMS, por lo que no mostrará este uris que traería información de la base de datos y lo redirigirá a la página 403.

  • No estoy seguro de lo que quiere decir allí, estoy enviando los argumentos a través de ?$args ?

    – Alb dum

    7 ago 2013 a las 19:09

¿Ha sido útil esta solución?