2

我正在尝试限制对某个管理页面的访问。但是,我的 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;
    #}
}

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

4

3 回答 3

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/

于 2012-11-27T13:18:59.730 回答
1

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

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

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");
    }
}
于 2012-11-27T15:41:16.997 回答
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在你的新位置。

看:

于 2012-11-27T18:20:00.293 回答