Apache-nginx-Combo での IP フィルタリング

Apache-nginx-Combo での IP フィルタリング

WAF クラウドの IP 範囲へのアクセスを制限してドメインを保護するというリクエストがあります。サーバーは PHP 用に Apache を実行し、リバース プロキシ サーバーとして nginx を実行するため、ブラウザーから Web サイトへのチェーンはおそらく次のようになります: クライアント <-> DNS <-> WAF <-> nginx <-> Apache

ログを調べたところ、nginx によって満たされたリクエストは WAF の IP から来ているのに対し、Apache はそうではないことがわかりました (Web サイトにアクセスすると、ログに自分の IP アドレスが表示されます)。nginx は、Plesk を使用して、スマートな静的ファイル処理を備えたプロキシ モードに設定されています。

ディレクティブを Apache (htaccess) に適用すると 403 が発生しますが、WAF サーバーからのリクエストが受信されないため、これは驚くことではありません。

Pleskを使用してnginxにディレクティブを適用できませんでした(追加のディレクティブ)。エラーメッセージが表示されます。試してみました

location / {
    allow 199.83.128.0/21;
    allow 2a02:e980::/29;
    deny all;
}

nginx: [emerg] /var/www/vhosts/system/example.co/conf/vhost_nginx.conf:1 に重複した場所 "/" があります nginx: 設定ファイル /etc/nginx/nginx.conf のテストに失敗しました

このサーバーは、Ubuntu 14.04.6 上で Plesk 17.8.11、nginx 1.14.2、Apache 2.4.7 を実行します。このサーバーは複数のドメインをホストします。

私がこの問題を解決しようとしている方法は正しいでしょうか? なぜこのエラーが発生するのでしょうか?

場所ディレクティブを含むドメインの conf ファイルを追加します。

#ATTENTION!
#
#DO NOT MODIFY THIS FILE BECAUSE IT WAS GENERATED AUTOMATICALLY,
#SO ALL YOUR CHANGES WILL BE LOST THE NEXT TIME THE FILE IS GENERATED.

server {
    listen 00.000.00.00:443 ssl http2;

    server_name example.com;
    server_name www.example.com;
    server_name ipv4.example.com;

    ssl_certificate             /opt/psa/var/certificates/scfPNclj5;
    ssl_certificate_key         /opt/psa/var/certificates/scfPNclj5;
    ssl_client_certificate      /opt/psa/var/certificates/scf58Rxns;

    client_max_body_size 128m;

    proxy_read_timeout 300;

    root "/var/www/vhosts/example.com/httpdocs";
    access_log "/var/www/vhosts/system/example.com/logs/proxy_access_ssl_log";
    error_log "/var/www/vhosts/system/example.com/logs/proxy_error_log";

    if ($host ~* ^superglass\.de$) {
        rewrite ^(.*)$ https://www.example.com$1 permanent;
    }

    #extension letsencrypt begin
    location ^~ /.well-known/acme-challenge/ {
        root /var/www/vhosts/default/htdocs;

        types { }
        default_type text/plain;

        satisfy any;
        auth_basic off;
        allow all;

        location ~ ^/\.well-known/acme-challenge.*/\. {
            deny all;
        }
    }
    #extension letsencrypt end

    location / {
        proxy_pass https://00.000.00.00:7081;
        proxy_set_header Host             $host;
        proxy_set_header X-Real-IP        $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header X-Accel-Internal /internal-nginx-static-location;
        access_log off;

    }

    location /internal-nginx-static-location/ {
        alias /var/www/vhosts/example.com/httpdocs/;
        internal;
    }

    location ~ ^/(plesk-stat|awstats-icon|webstat|webstat-ssl|ftpstat|anon_ftpstat) {
        proxy_pass https://00.000.00.00:7081;
        proxy_set_header Host             $host;
        proxy_set_header X-Real-IP        $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header X-Accel-Internal /internal-nginx-static-location;
        access_log off;

    }

    location ~ "^/files/" {
        proxy_pass https://00.000.00.00:7081;
        proxy_set_header Host             $host;
        proxy_set_header X-Real-IP        $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header X-Accel-Internal /internal-nginx-static-location;
        access_log off;

    }

    add_header X-Powered-By PleskLin;

    include "/var/www/vhosts/system/example.com/conf/vhost_nginx.conf";
}

server {
    listen 00.000.00.00:80;

    server_name example.com;
    server_name www.example.com;
    server_name ipv4.example.com;

    client_max_body_size 128m;

    proxy_read_timeout 300;

    if ($host ~* ^superglass\.de$) {
        rewrite ^(.*)$ https://www.example.com$1 permanent;
    }

    return 301 https://$host$request_uri;
}

'var/www/...' には別のファイルが含まれていますが、これは空です。おそらくそこに自分のものを追加する必要があります。

答え1

「追加の Nginx ディレクティブ」の場所設定は忘れてください。Plesk の「Apache と nginx の設定」ページで「サイトへのアクセスを拒否」セクションまでスクロールします。そこで、「許可」または「拒否」する IP アドレスまたは IP アドレス範囲を入力するだけで、Nginx のみを使用しているかプロキシ モードを使用しているかに関係なく、Plesk が適切に処理します。

関連情報