Primesc un proiect în care proxy-ul invers al socket-ului exterior este implementat de fluxul nginx.
Cu toate acestea, steam înseamnă doar „TCP” și a pierdut funcțiile http, cum ar fi scrierea numai a IP-urilor pe ruta.
Iată configurația stratului exterior în SSL criptat:
curent{
în amonte mysvr {
server 10.3.3.7:1111;
}
Server {
asculta 3331;
ssl_preread on;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass mysvr;
}
......
cel proxy_set_header
clauza trebuie comentată, deoarece nginx nu o permite aici dacă nu:
Directiva „proxy_set_header” nu este permisă aici
Și iată configurația lui nginx pe mașina 10.3.3.7:
http{
Server {
asculta 1111 ssl;
nume_server gazdă locală;
ssl_certificate /etc/nginx/cert/server.crt;
ssl_certificate_key /etc/nginx/cert/server.key;
ssl_session_timeout 5m;
ssl_verify_client dezactivat;
Locație / {
proxy_pass http://10.3.3.5:8888;
proxy_http_versiunea 1.1;
proxy_set_header Actualizare $http_upgrade;
proxy_set_header Conexiune „upgrade”;
}
......
Așa că am încercat să rescriu primul proxy invers și exterior la tipul http 1.1, proxy-ul websocket real în loc de conexiunea TCP sau „stream”. Am mutat totul din curent
suport și puneți-l înăuntru http
paranteză și eliminați comentariul de dinainte proxy_set_header
, în cele din urmă adăugați în cele trei clauze specifice pentru websocket la sfârșitul celui de-al doilea proxy invers interior:
http {
în amonte mysvr {
server 10.3.3.7:1111;
}
Server {
asculta 3331;
ssl_preread on;
proxy_set_header Gazdă $http_host;
proxy_http_versiunea 1.1;
proxy_set_header Actualizare $http_upgrade;
proxy_set_header Conexiune „upgrade”;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass mysvr;
}
......
Dar de data aceasta nginx aruncă o eroare:[emerg] Directiva „ssl_preread” nu este permisă
Deci conflictul este:
Sub abur nu pot folosi proxy_set_header
;
în timp ce sub http 1.1 nu pot folosi ssl_preread
.
Dar ambele sunt caracteristici importante în acest scenariu:
Serverul backend real trebuie să cunoască IP-ul clientului real, deci trebuie să ștampile IP-ul de la serverul exterior în antet;
Serverului proxy extern îi este interzis să citească traficul transparent, dar permite proxy-ului invers interior să-l decodifice cu SSL. Astfel, traficul dintre backend-ul real 10.3.3.5 și reverse-proxy-ul interior 10.3.3.7 este transparent, în timp ce traficul de la reverse-proxy-ul interior prin reverse-proxy-ul exterior către client este codificat cu același SSL de către nginx pe reverse-ul interior. -proxy.
Caracteristica suplimentară este că backend-ul real 10.3.3.5 rutează prin 10.3.3.7 proxy-ul invers interior, care direcționează prin proxy-ul invers exterior. Deci, rutele proxy vpn și proxy invers sunt coerente.
În această setare, există o modalitate de a realiza cele 2 caracteristici în același timp?
Multumesc pentru lectura.