NGinx + Wordpress Subdomain Multi with core in Subdirectory

4

Tengo una instalación de WordPress que funciona perfectamente en un servidor Apache . Actualmente estoy en el proceso de cambiar mi empresa de alojamiento (la nueva oferta NGinx) y mi pila de desarrollo (moviéndose a vvv).

Aquí es cómo se configura la instalación:

Es una instalación de varios sitios de subdominio de Wordpress, con el núcleo en una subcarpeta (/ wp-app /), wp-content en otra subcarpeta (/ wp-app-content /) y, por supuesto, mi index.php, wp-config.php y .htaccess en la carpeta raíz junto con estas 2 carpetas.

Aquí está mi problema :

En la versión de producción (apache), el administrador funciona perfectamente y la carpeta / wp-app / está completamente oculta. En la versión dev (NGinx), el administrador funciona parcialmente, pero muchas páginas devuelven un 404 y, a veces, WP reescriben la url con la aplicación wp.

Lo que creo que es la fuente del problema :

Estoy casi seguro de que mis reescrituras NGinx no son buenas. He encontrado varios comentarios que mencionan el problema, pero no respondieron o la respuesta fue parcial y no funcionó para mí.

Mi archivo .htaccess que funciona :

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) wp-app/$1 [L]
RewriteRule ^(.*\.php)$ wp-app/$1 [L]
RewriteRule . index.php [L]

# END WordPress

Mi nginx.conf que funciona parcialmente :

server {

    listen       80;
    listen       443 ssl;
    server_name  guillaumemolter.dv *.guillaumemolter.dv 

    root        /srv/www/guillaumemolter/htdocs;
    index index.php;

    if (!-e $request_filename) {
        rewrite /wp-admin$ $scheme://$host$uri/ last;
        rewrite ^/(wp-.*.php)$ /wp-app/$1 last;
        rewrite ^/(wp-(content|admin|includes).*) /wp-app/$1 last;
    }

    location / {
        #try_files $uri $uri/ /wp-app/index.php?$args ;
        try_files $uri $uri/ /index.php?$args ;
    }

    location ~ \.php$ {
        #try_files /wp-app/$uri =404;
        try_files $uri =404;
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000; 
    }

    location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
        access_log off; log_not_found off; expires max;
    }

    location = /robots.txt { access_log off; log_not_found off; }
    location ~ /\. { deny  all; access_log off; log_not_found off; }
}

Las 2 líneas comentadas son pruebas que hice de la desesperación ...

Recursos que he leído y utilizado hasta ahora:

enlace enlace Y otros, incluyendo 2 fuentes de este sitio, que no puedo publicar aquí porque no tengo suficiente reputación.

Muchas gracias por tu ayuda.

    
pregunta guillaume.molter 14.07.2015 - 03:54

1 respuesta

1

Utilizo una configuración de servidor Nginx muy similar y lo siguiente funciona muy bien para mí, sin embargo, prefiero tomar una ruta diferente y dividir la configuración de bloques del servidor para "No seguro - http" y "Seguro - https" individualmente. También según su estructura de sub directorios, le gustaría ver rtcamp artículo para ajustar su directiva location / {} de la siguiente manera:

# HTTPS Secure Server 
#
server {
    listen 443 default_server ssl;

    ssl on;
    ssl_certificate /path/to/ssl/certificate.crt;
    ssl_certificate_key /path/to/ssl/certificate.key;

    ssl_session_cache    shared:SSL:10m;
    ssl_session_timeout  10m;

   # Nginx 1.6 PCI compliance ssl directives, the first one is stronger but slower
   #It should be preferred when saving credit card and/or sensible information is needed.
   #e.g. If redirecting to payment gateways providers such as PayPal is all you need, them it can be safely disabled here.

  # ssl_ciphers  HIGH:!aNULL:!MD5;

    ssl_ciphers HIGH:!aNULL:!MD5:!kEDH;
    ssl_prefer_server_ciphers  on;

    root /srv/www/guillaumemolter/htdocs;
    index index.php;

    server_name guillaumemolter.dv *.guillaumemolter.dv;

    location / {
     try_files $uri $uri/ /wp-app/index.php?q=$uri&$args;
    }
}

    location ~ \.php$ {
            try_files      $uri = 404;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
    }

# Alternatively Pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

    #location ~ \.php$ {
            #try_files $uri =404;
            #fastcgi_split_path_info ^(.+\.php)(/.+)$;
            #fastcgi_pass unix:/var/run/php5-fpm.sock;
            #fastcgi_index index.php;
#                #include fastcgi_params;
    #}

    location ~* \.(jpg|jpeg|gif|png|bmp|ico|pdf|flv|swf|exe|html|htm|txt|css|js) {
            add_header Cache-Control public;
            add_header Cache-Control must-revalidate;
            expires 7d;
            access_log off;
    }

}

..

server {
    listen 80 default_server;
    server_name  guillaumemolter.dv *.guillaumemolter.dv 

    root   /srv/www/guillaumemolter/htdocs;
    index  index.php;

    # Simple redirect - Force non SSL site to redirect traffic to SSL
    return 301 https://guillaumemolter.dv$request_uri;
    return 301 https://guillaumemolter.dv$request_uri;


    if (!-e $request_filename) {
            rewrite /wp-admin$ $scheme://$host$uri/ permanent;         
            rewrite ^/wp-app(/[^/]+)?(/wp-.*) /wp-app$2 last;      
            rewrite ^/wp-app(/[^/]+)?(/.*\.php)$ /wp-app$2 last;
    }

    location / {
            try_files $uri $uri/ /wp-app/index.php?$args ;
    }

    location ~ \.php$ {
            try_files      $uri = 404;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
    }

# Alternatively Pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

    #location ~ \.php$ {
            #try_files $uri =404;
            #fastcgi_split_path_info ^(.+\.php)(/.+)$;
            #fastcgi_pass unix:/var/run/php5-fpm.sock;
            #fastcgi_index index.php;
#                #include fastcgi_params;
    #}

    location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
            access_log off; log_not_found off; expires max;
    }

    location = /robots.txt { access_log off; log_not_found off; }
    location ~ /\. { deny  all; access_log off; log_not_found off; }
} 

..

Y en tu archivo index.php, cambia la ruta a /wp-app/wp-blog-header.php

<?php
 /**
 * Front to the WordPress application. This file doesn't do anything, but loads
 * wp-blog-header.php which does and tells WordPress to load the theme.
 *
 * @package WordPress
 */

 /**
 * Tells WordPress to load the WordPress theme and output it.
 *
 * @var bool
 */
 define('WP_USE_THEMES', true);

 /** Loads the WordPress Environment and Template */
 require( dirname( __FILE__ ) . '/wp-app/wp-blog-header.php' );

..

Además, si se configura un certificado SSl, asegúrese de que la URL del sitio de WordPress y la URL de inicio sean correctas. Se puede cambiar en WordPress Configuración general o colocando estas dos líneas en su wp-config.php, donde "example.com" es la ubicación correcta de su sitio. Nota: Esta no es necesariamente la mejor solución, es simplemente codificar los valores en el sitio en sí. Ya no podrá editarlos en la página de configuración general cuando utilice este método.

define('WP_HOME','https://example.com');
define('WP_SITEURL','https://example.com');
    
respondido por el Adriano Monecchi 30.09.2015 - 02:45

Lea otras preguntas en las etiquetas