NGINX 限制 wordpress 上的管理区域但允许 wp-admin/admin-ajax.php?

NGINX restrict admin area on wordpress but allow wp-admin/admin-ajax.php?

我有几个网站使用以下代码来限制管理区域。到目前为止还没有找到比这更好的解决方案。

##> COMMENT - WordPress Admin Area Passwords 
location ^~ /wp-admin/ { 
auth_basic "Restricted Access"; 
auth_basic_user_file /home/bea/panel/security/.htpasswd; 

location ~ \.php$ { 
include snippets/fastcgi-php.conf; 
fastcgi_pass unix:/var/run/php/php7.3-fpm-website123.com.sock; 
} 
} 

我们使用的插件允许用户查看和正在建设中的页面,但提供登录以允许网站所有者在网站建设期间查看他们的网站。看看下面的图片。

正如您在下面看到的,系统提示用户填写密码以访问该网站,同时还提示他们填写用户名和密码以访问管理区域。此弹出窗口仅在用户输入访问网站的密码并单击“访问网站”时出现。

联系插件制作者后,他们建议排除wp-admin/admin-ajax.php?

或者是否有更好的做法可以遵循。我不时注意到某些插件需要访问管理区域才能正常运行。

我可能找到了解决办法:

##> 评论 - WordPress 管理区域密码,通常用于实时站点

location /wp-admin {
        location ~ /wp-admin/admin-ajax.php$
        {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.3-fpm-WEBSITE.tv.com.sock;
        }

        location ^~ /wp-admin/ {
        auth_basic "Restricted Access";
        auth_basic_user_file /home/user/panel/security/._htpasswd;
        }
        location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.3-fpm-WEBSITE.tv.sock;
        }
}

我只是希望有人验证上面的代码并检查它是否安全?我仍然愿意提供赏金来验证其安全级别。

我认为像下面这样的东西应该适合你

location ^~ /wp-admin/ {
   auth_basic "Restricted Access";
   auth_basic_user_file /home/bea/panel/security/.htpasswd;

   location ~ \.php$ {
      include snippets/fastcgi-php.conf;
      fastcgi_pass unix:/var/run/php/php7.3-fpm-website123.com.sock;
   }
}

location = /wp-admin/admin-ajax.php {
   include snippets/fastcgi-php.conf;
   fastcgi_pass unix:/var/run/php/php7.3-fpm-website123.com.sock;
}

玩了几个小时后,我找到了一个可行的解决方案,但我不太确定它是否安全?

location /wp-admin {
        location ~ /wp-admin/admin-ajax.php$
        {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.3-fpm-WEBSITE.tv.com.sock;
        }

        location ^~ /wp-admin/ {
        auth_basic "Restricted Access";
        auth_basic_user_file /home/user/panel/security/._htpasswd;
        }
        location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.3-fpm-WEBSITE.tv.sock;
        }
}

但这是一个可行的解决方案