首页 > 解决方案 > 带有 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 正在做些什么来搞砸这一切,但它确实存在。

标签: ajaxwordpressnginxhttp-status-code-403linode

解决方案


推荐阅读