Я получил сайт WordPress, работающий на Linode. Ниже приведены некоторые инструкции по установке стека LEMP и настройке WordPress.
Я столкнулся с проблемой, когда любые AJAX-запросы возвращают 403. Материал для REST API также возвращает 403 ошибки, поэтому я предполагаю, что эти проблемы связаны.
Стоит отметить, что сайт работает локально на моем MAMP, а также на тестовом сервере в Пантеоне. Только когда я установил их линод, эти проблемы появились.
Вот эта страница вопроса - https://www.gaudenzia.org/locations/
Проверьте консоль, и вы увидите 403 на https://www.gaudenzia.org/wp-admin/admin-ajax.php
Как ни странно, вы можете перейти к https://www.gaudenzia.org/wp-admin/admin-ajax.php напрямую. По какой-то причине он не возвращает 403, а вместо этого выдает 0, что в данном случае является ожидаемым результатом запроса WP AJAX, поскольку мы не помещаем в него данные. Так что, похоже, в этом случае возвращается 200, а не 403.
Что я уже пробовал
На сервере я проверил, что для всех файлов и папок правильно установлены разрешения 644 и 755 соответственно. Они также установлены для правильного владельца.
Конечно, я пытался отключить / удалить плагины на сайте.
Я перепробовал кучу разных модификаций различных конфигурационных файлов на сервере, но все безрезультатно. В основном просто поискать что-то вроде «nginx wordpress ajax 403» и пройти первые 3 страницы результатов, чтобы попробовать возможные исправления.
Вот что у меня есть в конфигурационном файле, доступном для сайтов (мои изменения закомментированы):
# Trying something to fix AJAX
# from https://givewp.com/documentation/core/frequent-troubleshooting-issues/admin-ajax-blocked/
#add_header 'Access-Control-Allow-Origin' '*';
#add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
server {
server_name gaudenzia.org www.gaudenzia.org;
root /var/www/gaudenzia.org/public_html;
index index index.php index.html index.htm;
location / {
# try_files $uri $uri/ /index.php?$args =404;
#try_files $uri $uri/ /index.php?$args;
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/gaudenzia.org/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/gaudenzia.org/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
#include /etc/nginx/common/wpfc-php7.conf;
#include /etc/nginx/common/wpcommon-php7.conf;
#include /etc/nginx/common/locations-php7.conf;
#include /etc/nginx/common/wp-global-restrictions.conf;
#include /etc/nginx/common/wordpress.conf;
#include /var/www/gaudenzia.org/nginx_custom/*.conf;
}
server {
if ($host = www.gaudenzia.org) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = gaudenzia.org) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80 default_server;
listen [::]:80 default_server;
server_name gaudenzia.org www.gaudenzia.org;
return 404; # managed by Certbot
}
Я полагаю, что должна быть какая-то настройка / настройка сервера, о которой я не знаю. Я новичок в настройке серверов (nginx или иным образом).
*** РЕДАКТИРОВАТЬ
Опера - это проблема.
После всех моих попыток выяснить, что не так с сервером, оказалось, что проблема не в сервере. Понял, что сайт работает на компьютерах коллег. Я только столкнулся с 403 при использовании Opera. Другие браузеры работают просто отлично. Похоже, что что-то странное в том, как Opera отправляет запрос XHR в admin-ajax.php, а сервер / WordPress возвращает 403 в результате. Я не знаю, что делает Opera, чтобы все испортить, но это так.