Bagaimana untuk mengkonfigurasi dan menggunakan protokol proksi dalam nginx

王林
Lepaskan: 2023-05-18 08:47:26
ke hadapan
2805 orang telah melayarinya

    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;
            #...
        }
    }
    Salin selepas log masuk

    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'
    Salin selepas log masuk

    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
    Salin selepas log masuk

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

    --with-http_realip_module
    Salin selepas log masuk

    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;
       #...
    }
    Salin selepas log masuk

    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;
          }
    }
    Salin selepas log masuk

    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;
    }
    Salin selepas log masuk
    stream {
        server {
            listen 12345;
            proxy_pass example.com:12345;
            proxy_protocol on;
        }
    }
    Salin selepas log masuk

    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"';
    }
    Salin selepas log masuk
    stream {
        #...
        log_format basic '$proxy_protocol_addr - $remote_user [$time_local] '
                          '$protocol $status $bytes_sent $bytes_received '
                          '$session_time';
    }
    Salin selepas log masuk

    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!

    Label berkaitan:
    sumber:yisu.com
    Kenyataan Laman Web ini
    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
    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan