Nginx + Wordpress dans le sous-répertoire

J'ai récemment déplacé notre site d'origine sur ASP.NET Core 1.0. Cela m'a permis de déplacer le site mercredi Linux. Nous avons aussi / blog Sur ce site, qui est un blog wordpress. Tout est transféré correctement sauf W3 Total Cache. C'est ce que j'ai fait.

installée PHP-FPM et DNX sont derrière le serveur de proxy inverse sur Nginx. Voici la hiérarchie des dossiers. / var / www / aspnet / var / www / wordpress

Voici tous les fichiers de configuration associés à Nginx

/etc/nginx/nginx.conf

user  nginx;
worker_processes 1;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;


events {
worker_connections 1024;
}


http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format scripts '$document_root$fastcgi_script_name > $request';
access_log /var/log/nginx/access.log main;

sendfile on;
#tcp_nopush on;

keepalive_timeout 65;

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

}

/etc/nginx/sites-available/xyz.com

server {
listen 443 ssl http2;
server_name xyz.com www.xyz.com;
ssl_certificate /etc/ssl/certs/cert_chain.crt;
ssl_certificate_key /etc/ssl/private/xyz.private.txt;
access_log /var/log/nginx/scripts.log scripts;

# Global restrictions configuration file.
# Designed to be included in any server {} block.
location = /favicon.ico {
log_not_found off;
access_log off;
}

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

# Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
# Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban)
location ~ /\. {
deny all;
}

# Deny access to any files with a .php extension in the uploads directory
# Works in sub-directory installs and also in multisite network
# Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban)
location ~* /blog/(?:uploads|files)/.*\.php$ {
deny all;
}

gzip_types text/css text/x-component application/x-javascript application/javascript text/javascript text/x-js text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
location ~ ^/blog/\.(css|htc|less|js|js2|js3|js4)$ {
expires 31536000s;
add_header Pragma "public";
add_header Cache-Control "max-age=31536000, public";
}
location ~ \.(html|htm|rtf|rtx|svg|svgz|txt|xsd|xsl|xml)$ {
expires 3600s;
add_header Pragma "public";
add_header Cache-Control "max-age=3600, public";
}
location ~ \.(asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|json|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|otf|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|svg|svgz|swf|tar|tif|tiff|ttf|ttc|wav|wma|wri|woff|xla|xls|xlsx|xlt|xlw|zip)$ {
expires 31536000s;
add_header Pragma "public";
add_header Cache-Control "max-age=31536000, public";
}
location / {
proxy_pass [url=http://unix:/var/www/aspnet/kestrel.sock;]http://unix:/var/www/aspnet/kestrel.sock;[/url]
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache_bypass $http_upgrade;
}
location /phpmyadmin/ {
alias /var/www/phpMyAdmin/;
index index.php;
}

location ~ ^/phpmyadmin/(.+\.php)$ {

alias /var/www/phpMyAdmin/$1;
fastcgi_pass unix:/run/php/phpmyadmin.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;

# From 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_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT /var/www/phpMyAdmin;
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 REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param REDIRECT_STATUS 200;
}

location /blog/ {
try_files $uri $uri/ index.php?q=$request_uri;
alias /var/www/wordpress/;
index index.php;
}

location ~ \.php$ {
include /var/www/wordpress/nginx.conf;
try_files $uri $uri/ index.php?q=$request_uri =404;
alias /var/www/wordpress/$1;
fastcgi_pass unix:/run/php/phpmyadmin.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(/.+)$;


# From 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_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT /var/www/wordpress;
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 REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param REDIRECT_STATUS 200;
}
}

/var/www/wordpress/nginx.conf - Ceci est un fichier créé par le plugin. W3 Total Cache.

# BEGIN W3TC Page Cache core
set $w3tc_rewrite 1;
if ($request_method = POST) {
set $w3tc_rewrite 0;
}
if ($query_string != "") {
set $w3tc_rewrite 0;
}
if ($request_uri !~ \/$) {
set $w3tc_rewrite 0;
}
if ($http_cookie ~* "(comment_author|wp\-postpass|w3tc_logged_out|wordpress_logged_in|wptouch_switch_toggle)") {
set $w3tc_rewrite 0;
}
if ($http_cookie ~* "(w3tc_preview)") {
set $w3tc_rewrite _preview;
}
set $w3tc_ssl "";
if ($scheme = https) {
set $w3tc_ssl _ssl;
}
set $w3tc_enc "";
if ($http_accept_encoding ~ gzip) {
set $w3tc_enc _gzip;
}
set $w3tc_ext "";
if (-f "$document_root/var/www/wordpress/wp-content/cache/page_enhanced/$http_host/$request_uri/_index$w3tc_ssl$w3tc_rewrite.html$w3tc_enc") {
set $w3tc_ext .html;
}
if (-f "$document_root/var/www/wordpress/wp-content/cache/page_enhanced/$http_host/$request_uri/_index$w3tc_ssl$w3tc_rewrite.xml$w3tc_enc") {
set $w3tc_ext .xml;
}
if ($w3tc_ext = "") {
set $w3tc_rewrite 0;
}
if ($w3tc_rewrite = 1) {
rewrite .* "/var/www/wordpress/wp-content/cache/page_enhanced/$http_host/$request_uri/_index$w3tc_ssl$w3tc_rewrite$w3tc_ext$w3tc_enc" last;
}
# END W3TC Page Cache core

Dès que j'ai effectué la configuration ci-dessus. Je peux exécuter des liens permanents wordpress. Cependant, quand j'ouvre / blog / ou / blog / wp-admin /, Il montre qu'il n'est pas trouvé. Pour dépanner, j'ai ajouté plusieurs journaux d'utilisateur dans nginx de la manière suivante.

log_format scripts '$document_root$fastcgi_script_name > $request';

C'est ce que les journaux ont montré.

/var/www/wordpress//blog/wp-admin/index.php> GET /blog/wp-admin/index.php HTTP / 2.0 /var/www/wordpress//blog/index.php> GET / blog / HTTP / 2.0

J'ai essayé beaucoup de solutions. Ils suggèrent tous que le site parent wordpress. Dans mon cas, le site parent est construit sur DotNet Core 1. / blog - Mon blog sur wordpress. Le problème doit être dans l'une des règles erronées de réécriture.

Résumer, je peux dire que le cache global I W3 n'est pas un problème. Je peux vivre sans elle. Le problème est lié aux règles de réécriture lorsque vous placez le site WordPress Comme sous-domaine du site statique. Partie de la configuration du cache commun W3 Vous pouvez ignorer. J'ai posté un tel site comme mydomain.com/blog, Et les règles de réécriture ne s'appliquent pas. Pour le moment, j'ai essayé beaucoup d'alternatives. Si quelqu'un est mis en œuvre Wordpress En tant que sous-répertoire pur, pas un sous-répertoire avec plusieurs sites. Ils peuvent fournir leur configuration réussie.
Invité:

Emilie

Confirmation de:

Il ne donne pas une réponse directe à votre question, mais c'est probablement la meilleure option que vous n'ayez peut-être pas pensé. Au lieu d'utiliser un plugin en cache, utilisez la mise en cache de page Nginx. C'est beaucoup plus rapide parce que vous n'avez pas besoin d'appeler PHP, Qui élimine de nombreux frais généraux.

Le côté opposé est la complexité de l'annulation du cache Nginx, Si vous ne payez pas la version commerciale Nginx. Vous pouvez collecter Nginx Avec des plugins qui effectuent ce travail, mais l'intégration de la mise en cache Wordpress / Nginx Pas très bien. Je n'ai pas trouvé de travail approprié. Par conséquent, vous devez définir soigneusement la durée de vie maximale du cache. Fait intéressant, sur le site téléchargé, la mise en cache même pendant quelques secondes peut avoir des avantages. Mes sites changent rarement et si j'ai besoin, je peux juste rm -rf Spécifiez les bons annuaires dans lesquels la page de cache est nginx, Qui est en fait en mémoire.

J'ai un guide à ce sujet
https://www.photographerstechs ... tion/
, Et il y aura beaucoup d'autres autour. Il y a un excellent article sur
https://www.nginx.com/blog/ben ... ginx/
.

SF Aime les données topiques sur une page au cas où les sites disparaissent.

Dans votre nginx.conf

fastcgi_cache_key "$scheme$request_method$host$request_uri";

En haut du fichier de site ou de la configuration nginx

fastcgi_cache_path /dev/shm/nginxcache levels=1:2 keys_zone=CACHENAME:10m inactive=1440m; # Centos / Amazon Linux in RAM, 1440 minutes = 24 hours

Dans votre bloc de localisation causant PHP

fastcgi_pass php56-fpm;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
fastcgi_cache CACHENAME;
fastcgi_cache_valid 200 1440m;
fastcgi_cache_valid 403 404 405 410 414 301 302 307 60m;
add_header X-Cache $upstream_cache_status; # This can be removed if desired

fastcgi_cache_methods GET HEAD;
fastcgi_keep_conn on;

Dans ce guide, que j'ai mentionné, il y a beaucoup plus d'informations et d'explications.

Hannah

Confirmation de:

Vous devez effectuer quelques étapes pour corriger le problème (De la situation actuelle) ...

Dans le système de fichiers ...

Voir:
https://codex.wordpress.org/Gi ... ctory

Déplacer les fichiers principaux WordPress de

/var/www/wordpress

à

/var/www/wordpress/blog

. (Indice:

mv /var/www/wordpress /var/www/blog && mkdir /var/www/wordpress && mv /var/www/blog /var/www/wordpress

)

Copie

/var/www/wordpress/blog/index.php

dans le catalogue

/var/www/wordpress/

.

Éditer

/var/www/wordpress/index.php

fichier et changer la chaîne

require( dirname( __FILE__ ) . '/wp-blog-header.php' );

à

require( dirname( __FILE__ ) . '/blog/wp-blog-header.php' );

.

Nginx:

Maintenant O. Nginx. Voici des changements dans les parties respectives ...

location /blog {           
root /var/www/wordpress;
index index.php;
try_files $uri $uri/ /blog/index.php?q=$request_uri;
}

location ~ \.php$ {
root /var/www/wordpress;
index index.php;
try_files $uri $uri/ /blog/index.php?q=$request_uri =404;

# other configuration directives
}

Il y a deux changements principaux:

DANS

alias

La directive devient

root

DANS

try_files

La directive contient

/blog/

de face

index.php

.

J'espère que cela aidera!

Pour répondre aux questions, connectez-vous ou registre