【问题标题】:NGINX causes index.php to be downloaded when an access list is appliedNGINX 导致 index.php 在应用访问列表时被下载
【发布时间】:2012-11-27 12:28:06
【问题描述】:

我正在尝试限制对某个管理页面的访问。 但是,我的 nginx.conf 中有以下配置:

server {
    listen   80; ## listen for ipv4; this line is default and implied

    root /var/www;
    server_name asdf;

    location / {
            proxy_pass http://192.168.1.1:88/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
    }
    #location /server/administrator/ {
    #       allow 127.0.0.0/24;
    #       allow my.ip/32;
    #}
}

一切都与这个配置一起工作,请求被传递到我的 apache2 监听端口 88。然而,当我从我的访问限制中删除 cmets 时,我的 index.php 正在被下载而不是被处理。也许有人以前见过这个?

【问题讨论】:

  • 你能测试一下,哪个指令给你这个问题?我怀疑/32 是错误的。

标签: php apache nginx


【解决方案1】:

如果您的管理页面位于 192.168.1.1 后端,那么您的位置块也需要如下所示

location /server/administrator/ {
    proxy_pass http://192.168.1.1:88;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    allow 127.0.0.0/24;
    allow my.ip/32;
    deny all;
}

你想拒绝除了允许的两个之外的所有,你需要告诉 nginx,在特定位置代理你的请求到哪里

编辑:

如果管理页面在您的 nginx 机器上,并且您希望它被执行,您需要运行 fastcgi 或 php-fpm。 与 Apache 不同,nginx 自身不提供 php 或其他服务器端脚本,但它可以使用 fastcgi_pass 而不是 proxy_pass 与类似 fastcgi 的后端通信。

查看此内容以了解如何使用 php-fpm 让 nginx 运行

http://www.lifelinux.com/how-to-install-nginx-and-php-fpm-on-centos-6-via-yum/

【讨论】:

  • 谢谢,proxy_pass 确实解决了我的问题,但是我必须在 pass 中指定确切的路径 - proxy_pass 192.168.1.1:88//server/administrator。否则我得到一个 index.html 找不到。无论如何,它奏效了。再次感谢。
  • @Involar 您不需要指定确切的路径。您只需要在此答案中删除 proxy_pass http://192.168.1.1:88/ 末尾的 / 即可。请阅读文档:nginx.org/r/proxy_pass
【解决方案2】:

您的第一个位置正在传递给 Apache,但第二个位置由不知道 PHP 是什么的 NginX 处理,因此允许您将其作为二进制文件下载。

您可以通过检查 NginX 提供的 X-REAL-IP 标头来简单地在 server/administrator/index.php 中设置访问控制。

if ($_SERVER["HTTP_X_REAL_IP"] != 'my IP')
{
    if (false === strpos($_SERVER["HTTP_X_REAL_IP"], '127.0.0.'))
    {
        // 302 redirect to home
        Header("Location: http://yoursite/");
        die("Access denied");
    }
}

【讨论】:

    【解决方案3】:
    server {
        listen   80;
    
        location / {
            proxy_pass http://192.168.1.1:88;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
    
            location /server/administrator/ {
                allow 127.0.0.0/24;
                allow my.ip/32;
                proxy_pass http://192.168.1.1:88;
            }
        }
    }
    

    您在新位置忘记了proxy_pass

    见:

    【讨论】:

      猜你喜欢
      • 2012-01-09
      • 1970-01-01
      • 2018-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多