Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Bagaimana untuk mengkonfigurasi dan menggunakan protokol proksi dalam nginx

Bagaimana untuk mengkonfigurasi dan menggunakan protokol proksi dalam nginx

王林
王林ke hadapan
2023-05-18 08:47:262739semak imbas

    protokol proksi digunakan dalam nginx

    Kami tahu bahawa nginx ialah pelayan web dan pelayan proksi Ia biasanya berfungsi dalam pelayan proksi atau perisian pengimbangan beban (. Haproxy , di belakang Amazon Elastic Load Balancer (ELB)

    Pertama, pelanggan memulakan permintaan kepada pelayan proksi atau perisian pengimbangan beban, dan kemudian permintaan itu dimajukan kepada nginx untuk akses web sebenar berbilang lapisan perisian, beberapa maklumat pelanggan seperti alamat IP, nombor port, dll. mungkin disembunyikan, yang menjejaskan analisis masalah dan statistik data kami 🎜>

    Dalam kes ini, anda perlu menggunakan protokol PROXY

    Jika proksi atau LSB yang disebutkan di atas melaksanakan protokol PROXY, sama ada HTTP atau SSL , HTTP/2, SPDY, WebSocket atau Protokol TCP, nginx boleh mendapatkan alamat IP asal pelanggan dan melakukan beberapa operasi khas berdasarkan alamat IP asal, seperti menyekat akses daripada IP berniat jahat dan memaparkan bahasa atau halaman yang berbeza berdasarkan IP yang berbeza, atau pengelogan yang lebih mudah statistik, dll., sangat berkesan

    Sudah tentu, jika anda ingin menyokong protokol PROXY, terdapat juga keperluan untuk versi nginx Keperluan versi khusus adalah seperti berikut:

    Untuk menyokong protokol PROXY v2, NGINX Plus R16 atau NGINX Open Source 1.13.11 diperlukan
    • Untuk menyokong protokol ROXY untuk HTTP, NGINX Plus R3 atau NGINX Open Source 1.5. .12.
    • Untuk menyokong protokol PROXY sisi klien TCP, NGINX Plus R7 atau NGINX Open Source 1.9.3 diperlukan untuk menyokong protokol PROXY untuk TCP, NGINX Plus R11 atau NGINX Open Source 1.11.4 diperlukan
    • Dalam nginx, anda boleh mendapatkan maklumat klien yang sepadan melalui pembolehubah berikut , khususnya seperti berikut:
    • $proxy_protocol_addr. dan $proxy_protocol_port masing-masing mewakili alamat IP dan nombor port klien asal.

      $remote_addr dan $remote_port mewakili alamat IP dan port pengimbang beban.
    Jika anda menggunakan modul sambungan RealIP, modul ini akan menulis semula nilai $remote_addr dan $remote_port, menggantikannya dengan alamat IP dan nombor port pelanggan asal.

    Kemudian gunakan $realip_remote_addr dan $realip_remote_port untuk mewakili alamat IP dan port pengimbang beban.

    Dalam modul sambungan RealIP, makna $proxy_protocol_addr dan $proxy_protocol_port kekal tidak berubah, yang masih merupakan alamat IP dan nombor port pelanggan asal.

    Mengkonfigurasi dan menggunakan protokol proksi dalam nginx

    Di atas kami menyebut aplikasi asas protokol proksi dalam nginx. Mari kita bercakap tentang cara melaksanakan konfigurasi khusus dalam nginx.

    Dayakan protokol proksi dalam nginx

    Jika nginx anda sudah menjadi versi yang menyokong protokol proksi, maka mendayakan protokol proksi adalah sangat mudah Anda hanya perlu menambah proxy_protocol pada dengar dalam pelayan. Seperti yang ditunjukkan di bawah:

    http {
        #...
        server {
            listen 80   proxy_protocol;
            listen 443  ssl proxy_protocol;
            #...
        }
    }
       
    stream {
        #...
        server {
            listen 112233 proxy_protocol;
            #...
        }
    }

    Semua orang lebih mengenali blok http Dalam nginx, ia mewakili sokongan untuk http/https. Nginx menyediakan sokongan untuk protokol TCP/UDP Fungsi ini dilaksanakan melalui modul aliran, yang agak asing bagi ramai orang.

    Melalui konfigurasi di atas, nginx boleh menyokong protokol proksi dalam kedua-dua protokol tcp/udp dan protokol http/https.

    Gunakan modul IP Real‑IP

    Modul IP Sebenar ialah modul yang disertakan dengan nginx Anda boleh menyemak sama ada nginx mempunyai modul real-ip yang dipasang dengan menjalankan arahan berikut:

    nginx -V 2>&1 | grep -- 'http_realip_module'
    nginx -V 2>&1 | grep -- 'stream_realip_module'

    Jika versi yang anda sedang gunakan tidak mempunyai ip sebenar, jangan risau, anda mungkin perlu menyusun daripada kod sumber pada masa ini.

    Semasa proses penyusunan, kami perlu melaksanakan perintah konfigurasi Dalam arahan konfigurasi ini, anda boleh menentukan fungsi yang hendak didayakan, seperti strim atau http_ssl_module:

    $ ./configure
    --sbin-path=/usr/local/nginx/nginx
    --conf-path=/usr/local/nginx/nginx.conf
    --pid-path=/usr/local/nginx/nginx.pid
    --with-pcre=../pcre-8.44
    --with-zlib=../zlib-1.2.11
    --with-http_ssl_module
    --with-stream
    --with-mail

    Jika anda mahu. dayakan fungsi real-ip , anda boleh menambah:

    --with-http_realip_module

    Jika nginx berjalan di belakang SLB atau proksi, anda boleh menggunakan perintah set_real_ip_from untuk menentukan julat IP proksi atau pelayan pengimbangan beban, seperti yang ditunjukkan di bawah:

    server {
        #...
        set_real_ip_from 192.168.1.0/24;
       #...
    }

    Kemudian kita perlu menggantikan alamat IP proksi atau SLB dengan alamat klien sebenar, kemudian kita boleh menggunakannya seperti ini:

    http {
        server {
            #...
            real_ip_header proxy_protocol;
          }
    }

    Permintaan pemajuan

    Sama ada http atau blok strim, anda mungkin menghadapi arah permintaan Untuk pemajuan huluan seterusnya, untuk huluan, mereka berharap untuk menerima alamat IP klien sebenar dan bukannya alamat proksi atau slb Ini boleh diselesaikan dengan tetapan berikut:

    http {
        proxy_set_header X-Real-IP       $proxy_protocol_addr;
        proxy_set_header X-Forwarded-For $proxy_protocol_addr;
    }
    stream {
        server {
            listen 12345;
            proxy_pass example.com:12345;
            proxy_protocol on;
        }
    }

    http Kaedah tetapan aliran adalah berbeza.

    Log

    Log adalah fungsi yang sangat penting untuk mengesan masalah dan melakukan analisis statistik data.

    Kami boleh merekodkan log yang sepadan dalam blok http dan strim dengan menggunakan pembolehubah $proxy_protocol_addr, seperti ditunjukkan di bawah:

    http {
        #...
        log_format combined '$proxy_protocol_addr - $remote_user [$time_local] '
                            '"$request" $status $body_bytes_sent '
                            '"$http_referer" "$http_user_agent"';
    }
    stream {
        #...
        log_format basic '$proxy_protocol_addr - $remote_user [$time_local] '
                          '$protocol $status $bytes_sent $bytes_received '
                          '$session_time';
    }

    Atas ialah kandungan terperinci Bagaimana untuk mengkonfigurasi dan menggunakan protokol proksi dalam nginx. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam