it-swarm.com.de

NGinx + Wordpress Subdomain Multi mit Core im Unterverzeichnis

Ich habe eine WordPress-Installation das funktioniert perfekt auf einem Apache-Server . Ich bin gerade dabei, sowohl mein Hosting-Unternehmen (das neue Angebot von NGinx) als auch meinen Entwicklungsstack (Wechsel zu vvv) zu ändern.

So wird die Installation eingerichtet:

Es handelt sich um eine Multisite-Installation einer Wordpress-Unterdomäne mit einem Kern in einem Unterordner (/ wp-app /), wp-Inhalten in einem anderen Unterordner (/ wp-app-content /) und natürlich meiner index.php , wp-config.php und .htaccess im Root-Ordner zusammen mit diesen 2 Ordnern.

Hier ist mein Problem :

In der Produktionsversion (Apache) funktioniert der Administrator einwandfrei und der Ordner/wp-app/ist vollständig ausgeblendet. In der Dev-Version (NGinx) funktioniert der Administrator teilweise, aber viele Seiten geben 404 zurück und manchmal WP schreiben Sie die URL mit der wp-App neu.

Was ich denke, ist die Quelle des Problems :

Ich bin mir fast sicher, dass meine NGinx-Umschreibungen nicht gut sind. Ich habe mehrere Feeds gefunden, in denen das Problem erwähnt wurde, die jedoch entweder nicht beantwortet wurden oder die Antwort nur teilweise war und bei mir nicht funktionierte.

Meine .htaccess-Datei, die funktioniert :

# 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

Meine nginx.conf, die teilweise funktioniert :

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; }
}

Die 2 kommentierten Zeilen sind Tests, die ich aus Verzweiflung gemacht habe ...

Ressourcen, die ich bisher gelesen und genutzt habe:

https://codex.wordpress.org/Nginxhttps://rtcamp.com/wordpress-nginx/tutorials/multisite/ Und andere, einschließlich 2 Feeds von dieser Site, die ich nicht kann poste hier, weil ich nicht genug Ruf habe.

Vielen Dank für Ihre Hilfe.

4

Ich verwende einen sehr ähnlichen Nginx-Server und das Folgende funktioniert sehr gut. Ich bevorzuge jedoch einen anderen Weg und teile die Konfiguration der Serverblöcke für "Non Secure - http" und "Secure - https" einzeln auf. Sie sollten sich auch gemäß Ihrer Unterverzeichnisstruktur diesen rtcamp-Artikel ansehen, um Ihre location / {}-Direktive wie folgt anzupassen:

# 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; }
} 

..

Und ändern Sie in Ihrer index.php-Datei den Pfad zu /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' );

..

Wenn ein SSL-Zertifikat eingerichtet ist, stellen Sie außerdem sicher, dass die URL der WordPress-Site und der Startseite korrekt sind. Sie kann unter WordPress General Settings geändert werden, oder indem Sie diese beiden Zeilen in Ihre wp-config.php einfügen, wobei "example.com" der richtige Ort für Ihre Site ist. Hinweis: Dies ist nicht unbedingt die beste Lösung. Sie codiert lediglich die Werte in die Site selbst. Sie können sie auf der Seite Allgemeine Einstellungen nicht mehr bearbeiten, wenn Sie diese Methode verwenden.

define('WP_HOME','https://example.com');
define('WP_SITEURL','https://example.com');
1