Я запускаю Wordpress на капле DigitalOcean, он отлично работал с сервером apache, но я поставил его за обратный прокси-сервер Nginx, чтобы лучше обслуживать статические файлы. Интерфейсный веб-сайт работает, но у меня проблемы с областью wp-admin.
Я могу без проблем получить доступ к основному разделу wp-admin (domain.com/wp-admin), а также к любой странице .php (например, /wp-admin/upload.php), однако в любое время мне нужно указать что-то по типу записи, например
/wp-admin/post-new.php?post_type=page
или
/wp-admin/edit.php?post_type=product
Я получаю сообщение "недействительный тип сообщения".
Я предполагаю, что это конфигурация nginx, я думаю, что это единственный файл .conf, который я вообще редактировал при настройке nginx (он находится в / etc / nginx / sites-available)
server {
listen 80;
listen 443;
server_name domain.com www.domain.com;
root /var/www/html;
index index.php index.htm index.html;
ssl on;
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
location / {
try_files $uri $uri/ /index.php?$request_uri$query_string$is_args$args;
}
location ~ \.php$ {
proxy_pass http://ipaddress:85$request_uri$query_string$is_args$args;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~ /\. {
deny all;
}
}
Может ли кто-нибудь помочь мне узнать, что здесь происходит? Или, по крайней мере, где искать, чтобы это отладить.
Изменить: нашел это в моем журнале доступа к apache:
10.15.0.2 - - [07/Dec/2017:17:15:05 +0000] "GET /wp-admin/edit.php?post_type=page?post_type=page HTTP/1.0" 500 3814 "www.domain.net/wp-admin/post.php?post=2&action=edit" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0"
Я обнаружил проблему, это была глупая проблема:
location ~ \.php$ {
proxy_pass http://ipaddress:port$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
вместо того
location ~ \.php$ {
proxy_pass http://ipaddress:85$request_uri$query_string$is_args$args;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
$ Is_args $ args приводил к дублированию строк запроса
Проверяйте журнал ошибок nginx обычно в /var/log/nginx/error.log. Неудачные запросы POST могут быть вызваны тем, что nginx не может записывать временные файлы.
Также попробуйте такую конфигурацию:
server {
listen 80;
server_name _;
root /var/www/html;
index index.php index.html index.htm;
error_log /var/log/nginx/error.log;
location / {
# Send requests to backend Apache
proxy_pass http://ipaddress:port;
# Send appropriate headers to the backend
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx/
proxy_set_header Proxy "";
# Hide uneeded headers from the backend
proxy_hide_header X-Powered-By;
proxy_hide_header X-Pingback;
proxy_hide_header X-Link;
# Ignore following headers
proxy_ignore_headers X-Accel-Expires;
proxy_ignore_headers Cache-Control;
proxy_ignore_headers Expires;
proxy_ignore_headers Set-Cookie;
# Set files larger than 1M to stream rather than cache
proxy_max_temp_file_size 1M;
}
# Enable browser caching for image files
location ~* \.(css|js|gif|jpe?g|png)$ {
expires 15d;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
# this prevents hidden files (beginning with a period) from being served, and
# Disable access to the wp-config | readme files
location ~ /(\.|wp-config.php|readme.html|licence.txt|readme.txt) { return 404; }
# Disable access to PHP files inside uploads/ directory
location ~* /uploads/.*\.php$ { deny all; }
location ~* (wp-includes|includes)$ { deny all; }
# Disable direct access to cache directory
location /wp-content/cache/ { deny all; }
}