Rumah >Operasi dan penyelenggaraan >Nginx >Bagaimana untuk mengkonfigurasi dan menggunakan protokol proksi 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 diperlukanhttp { #... server { listen 80 proxy_protocol; listen 443 ssl proxy_protocol; #... } } stream { #... server { listen 112233 proxy_protocol; #... } }
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
--with-http_realip_moduleJika 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 pemajuanSama 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. LogLog 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!