应用访问列表时,NGINX会导致下载index.php

时间:2012-11-27 12:28:06

标签: php apache nginx

我正在尝试限制对某个管理页面的访问。 不过我在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.但是,当我从访问限制中删除注释时,我的index.php正在下载而不是处理。也许有人之前见过这个?

3 个答案:

答案 0 :(得分: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/

答案 1 :(得分:1)

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

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

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");
    }
}

答案 2 :(得分:0)

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

请参阅: