Bagaimanakah Nginx melarang akses merentas domain ke fail PHP?
世界只因有你
世界只因有你 2017-05-16 17:24:55
0
3
931

Sebagai contoh, terdapat laman web a.com, dan terdapat fail ajax.php dalam direktori Sekarang diperlukan bahawa hanya akses kepada a.com (iaitu, terikat kepada nama domain ini) dibenarkan untuk menerima POST. data. Nama domain lain seperti b.com ingin POST data ke ajax.php terus mengembalikan 503 atau sebagainya, bagaimana untuk menulisnya? Saya tidak biasa dengan nginx, lebih baik jika anda boleh memberi contoh khusus, terima kasih~

世界只因有你
世界只因有你

membalas semua(3)
为情所困

Saya membaca dokumen dan menulis beberapa baris kod untuk menyelesaikan masalah saya akan menggunakan penyelesaian ini buat masa ini. Jika anda mempunyai penyelesaian yang lebih baik, sila tinggalkan mesej.

Kod disiarkan di bawah

        location ~ \.php$ {

        #新增代码 start

        # 假设 ajax.php 文件路径是 /includes/ajax.php 和网站域名是 www.a.com
        # 新增一个变量 $nolocal 值为1,也就是真

        set $nolocal 1;

        #下面开始判断,不是 POST 或者请求路径不是 ajax.php 的路径或者请求来源属于本站域名时,都设为0,也就是假
        #为什么是三个 if 呢?因为 nginx 居然不支持多条件判断,真是醉了~
        if ($request_method != POST) {
                set $nolocal 0;
        }
        if ($request_uri != /includes/ajax.php) {
                set $nolocal 0;
        }
        if ($http_referer ~* "www.a.com") {
            set $nolocal 0;
        }

        #经过上面的筛选,值是真的,也就是其他来源POST数据过来了,直接返回 403 拒绝处理
        #这样,其他来源的请求就浪费不了你的PHP进程了。
        if ($nolocal) {
            return 403;
        }

        #新增代码 end

        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME /var/www/a/$fastcgi_script_name;
        include        fastcgi_params;
    }
左手右手慢动作

Nginx boleh mencipta berbilang tapak. Itulah pelayan{}

dalam Nginx

Buat tapak lalai dahulu:

pelayan {
nama_pelayan _;
root /var/nginx/html;
}

Buat tapak lain a.com:

pelayan {
nama_pelayan a.com www.a.com;
root /data/www/a.com;
}

Dengan cara ini, hanya a.com akan dapat mengakses fail di bawah laluan a.com, dan nama domain lain akan mengakses fail di bawah tapak lalai /var/nginx/html.

阿神
if ($host != 'XXX.com' ) {
    这里写规则。
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan