Wie verhindert Nginx den domänenübergreifenden Zugriff auf eine PHP-Datei?
世界只因有你
世界只因有你 2017-05-16 17:24:55
0
3
939

Zum Beispiel gibt es eine Website a.com und im Verzeichnis befindet sich eine ajax.php-Datei. Jetzt ist es erforderlich, dass nur der Zugriff auf a.com (dh der an diesen Domainnamen gebunden ist) POST empfangen darf Daten. Andere Domainnamen wie b.com möchten Daten direkt an ajax.php senden und 503 oder ähnliches zurückgeben. Wie schreibt man das? Ich bin mit Nginx nicht vertraut, es ist am besten, wenn Sie konkrete Beispiele nennen können, danke ~

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

Antworte allen(3)
为情所困

看下了文档,写了几行代码解决了,暂时用这个解决方法,如有更好的,也欢迎留言。

下面贴出代码

        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是可以创建多站点的。也就是Nginx中的server{}

先创建一个默认站点:

server {
server_name _;
root /var/nginx/html;
}

再创建一个站点 a.com:

server {
server_name a.com www.a.com;
root /data/www/a.com;
}

这样,将只有a.com可以访问 a.com这个路径下的文件,其他域名都将访问默认站点 /var/nginx/html 下的文件。

阿神
if ($host != 'XXX.com' ) {
    这里写规则。
}
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage