ajax - 带有 AJAX 返回 403 (nginx) 之类的 WordPress 网站
问题描述
我在 Linode 上启动并运行了一个 WordPress 网站。遵循一些关于安装 LEMP 堆栈和设置 WordPress 的指南。
我遇到了任何 AJAX 请求返回 403 的问题。REST API 的东西也返回 403 错误,所以我认为这些问题是相关的。
值得一提的是,该网站在我的 MAMP 上本地运行,以及 Pantheon 上的测试服务器。直到我设置了他们的 linode,这些问题才出现。
这是有问题的页面 - https://www.gaudenzia.org/locations/检查控制台,您将在https://www.gaudenzia.org/wp-admin/admin-ajax.php 上看到 403
奇怪的是,您可以直接访问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 或其他)的新手。
*** 编辑
歌剧是问题所在。
经过我所有的努力试图找出服务器出了什么问题,结果证明服务器不是问题所在。意识到该站点在同事的计算机上运行。我在使用 Opera 时只遇到过 403。其他浏览器工作得很好。因此,Opera 将 XHR 请求发送到 admin-ajax.php 的方式似乎有些奇怪,结果服务器/WordPress 返回了 403。我不知道 Opera 正在做些什么来搞砸这一切,但它确实存在。
解决方案
推荐阅读
- python - Python KeyError:对于 flow_from_dataframe 中的 x_col 值
- batch-file - 批量等待,直到 Windows 10 复制完成
- java - AnyLogic 循环作为退出动作
- html - Bootstrap Navbar:导航栏品牌意图
- javascript - SyntaxError:当前未启用对实验语法“jsx”的支持,我该怎么办?
- php - 学说从反面替换onetoone关系
- javascript - 使用 json 处理应用程序的表单和所见即所得数据
- python - 带返回值的多处理
- amazon-web-services - Cloudformation 到 CodeDeployApplication 的 terraform 转换
- azure - Azure 服务主体 - 将成员添加到 AD 组的权限