Rumah >Operasi dan penyelenggaraan >Nginx >Konfigurasi ACL berdasarkan tingkah laku pengguna dalam proksi terbalik Nginx

Konfigurasi ACL berdasarkan tingkah laku pengguna dalam proksi terbalik Nginx

王林
王林asal
2023-06-10 09:07:391263semak imbas

Nginx ialah pelayan web berprestasi tinggi dan perisian pelayan proksi terbalik. Ia adalah perisian sumber terbuka yang boleh dijalankan pada pelbagai sistem pengendalian, seperti Linux, Windows, FreeBSD, dll. Nginx biasanya digunakan dalam proksi terbalik, pengimbangan beban, cache HTTP, pengesahan keselamatan dan senario lain. Dalam senario proksi terbalik, Nginx boleh memajukan permintaan pengguna kepada berbilang pelayan belakang untuk meningkatkan prestasi dan kebolehpercayaan sistem. Artikel ini akan memperkenalkan cara mengkonfigurasi ACL berdasarkan tingkah laku pengguna dalam proksi terbalik Nginx.

ACL ialah singkatan dari Access Control List, iaitu teknologi yang digunakan untuk kawalan akses. Dalam rangkaian, teknologi ACL digunakan secara meluas dalam tembok api, penghala, pelayan proksi dan peralatan lain. ACL boleh menyekat atau membenarkan akses pengguna berdasarkan keadaan yang berbeza, seperti alamat IP, nombor port, jenis protokol, dsb. Dalam proksi terbalik Nginx, ACL boleh mengehadkan atau membenarkan pemajuan permintaan berdasarkan ciri permintaan pengguna.

Sintaks konfigurasi ACL Nginx adalah seperti berikut:

location / {
    # allow或deny用于定义访问控制规则,如:
    allow ip; # 允许IP地址访问
    deny ip; # 禁止IP地址访问
    allow all; # 允许所有访问
    deny all; # 禁止所有访问
}

Antaranya, ip boleh menjadi alamat IP tunggal, segmen alamat IP atau alamat IP dalam format CIDR, seperti:

allow 192.168.1.1; # 允许单个IP地址访问
allow 192.168.0.0/16; # 允许IP地址段访问
allow 192.168.1.0/24; # 允许CIDR格式的IP地址访问

Selain IP Selain alamat, ACL juga menyokong syarat lain, seperti pengepala permintaan HTTP, kaedah permintaan, laluan permintaan, dsb. Dalam proksi terbalik Nginx, pengepala permintaan HTTP amat penting kerana ia boleh mewakili ciri tingkah laku pengguna.

Dalam aplikasi web moden, ciri tingkah laku pengguna menjadi semakin kompleks, memerlukan konfigurasi ACL yang lebih fleksibel dan pintar untuk kawalan akses. Sebagai contoh, kami mungkin perlu mengehadkan atau membenarkan pemajuan permintaan berdasarkan faktor seperti status log masuk pengguna, kekerapan permintaan, sumber permintaan, dsb. Dalam Nginx, kami boleh melaksanakan konfigurasi ACL berdasarkan tingkah laku pengguna dengan cara berikut.

  1. Berdasarkan pengepala permintaan

Dalam Nginx, kita boleh menggunakan pernyataan if untuk menyemak pengepala permintaan HTTP dan melaksanakan membenarkan atau menafikan arahan seperti yang diperlukan. Sebagai contoh, kami boleh menyekat akses kepada penyemak imbas atau sistem pengendalian tertentu dengan menyemak medan Ejen Pengguna dalam pengepala permintaan. Konfigurasi sampel adalah seperti berikut:

location / {
    if ($http_user_agent ~* MSIE) {
        deny all;
    }
    allow all;
}

Konfigurasi di atas bermakna semua pengguna yang Agen Penggunanya mengandungi "MSIE" dilarang mengakses dan pengguna lain dibenarkan mengakses.

  1. Berdasarkan Kuki

Dalam aplikasi web moden, pengguna biasanya perlu log masuk untuk mengakses sumber tertentu. Untuk mengehadkan akses kepada pengguna yang tidak log masuk, kami perlu menyemak medan Kuki dalam permintaan dan melaksanakan arahan membenarkan atau menolak seperti yang diperlukan. Sebagai contoh, kami boleh menyekat akses kepada pengguna yang tidak log masuk dengan menyemak medan Kuki dalam pengepala permintaan. Konfigurasi sampel adalah seperti berikut:

location /protected {
    if ($http_cookie !~* "access_token=.*") {
        return 401; # 请求未携带access_token
    }
    allow all;
}

Konfigurasi di atas bermakna jika permintaan tidak membawa medan "access_token", ralat 401 akan dikembalikan jika tidak, semua pengguna akan dibenarkan untuk mengakses.

  1. Berdasarkan kekerapan akses

Dalam sesetengah senario, kami perlu mengehadkan atau membenarkan akses pengguna berdasarkan kekerapan akses pengguna. Sebagai contoh, dalam senario antara muka API, kita boleh mengelakkan serangan DDoS dengan menyemak kekerapan permintaan. Dalam Nginx, kita boleh menggunakan arahan limit_req untuk melaksanakan konfigurasi ACL berdasarkan kekerapan akses. Konfigurasi contoh adalah seperti berikut:

http {
    # 定义限制访问频率的配置
    limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
    # 定义反向代理配置
    server {
        location /api/ {
            limit_req zone=api burst=20 nodelay;
            proxy_pass http://api.example.com/;
        }
    }
}

Konfigurasi di atas menunjukkan bahawa setiap alamat IP boleh mengakses laluan /api/ sehingga 10 kali sesaat dan membenarkan 20 akses pecah. Jika kekerapan akses pengguna melebihi had, ralat 503 akan dikembalikan.

  1. Berdasarkan sumber permintaan

Dalam sesetengah senario, kami perlu menyekat atau membenarkan akses pengguna berdasarkan alamat IP sumber atau nama domain permintaan itu. Contohnya, dalam beberapa senario pengesahan keselamatan, kami boleh melaksanakan kawalan akses dengan menyemak IP sumber permintaan atau nama domain. Dalam Nginx, kita boleh menggunakan arahan geo untuk melaksanakan konfigurasi ACL berdasarkan sumber permintaan. Konfigurasi sampel adalah seperti berikut:

http {
    # 定义IP地址库文件
    geoip_country /usr/share/GeoIP/GeoIP.dat;
    # 定义反向代理配置
    server {
        location / {
            # 根据请求IP的国家代码进行访问控制
            if ($geoip_country_code != CN) {
                deny all;
            }
            proxy_pass http://proxy.example.com/;
        }
    }
}

Konfigurasi di atas bermakna jika negara tempat IP yang diminta terletak bukan China, akses adalah dilarang. Jika anda perlu mengawal akses berdasarkan nama domain, anda boleh menggunakan arahan geoip_host.

Ringkasnya, konfigurasi ACL Nginx adalah sangat fleksibel dan berkuasa, dan boleh melaksanakan kawalan akses berdasarkan tingkah laku pengguna mengikut keperluan yang berbeza. Apabila menggunakan ACL, anda perlu berhati-hati untuk tidak menyalahgunakan pernyataan if, kerana pernyataan if akan menjejaskan prestasi dan kestabilan Nginx. Adalah disyorkan untuk menggunakan arahan terbina dalam Nginx dan pembolehubah sebanyak mungkin untuk melaksanakan konfigurasi ACL. Pada masa yang sama, ujian prestasi dan pengoptimuman juga perlu dijalankan berdasarkan keadaan sebenar untuk memastikan konfigurasi ACL mempunyai kesan yang sedikit terhadap prestasi sistem yang mungkin.

Atas ialah kandungan terperinci Konfigurasi ACL berdasarkan tingkah laku pengguna dalam proksi terbalik Nginx. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn