NGINX, farklı port numaraları için ters proxy olarak nasıl yapılandırılır?


15
I have NGINX configured like this as a reverse proxy for http requests:

server {
    listen 80;
    server_name 203.0.113.2;

    proxy_set_header X-Real-IP  $remote_addr; # pass on real client IP

    location / {
        proxy_pass http://203.0.113.1:3000;
    }
}

Ayrıca ssh (Port 22) isteklerini proxy yapmak istiyorum. Aynı yapılandırma dosyasına böyle başka bir sunucu bloğu ekleyebilir miyim:

server {
    listen 22;
    server_name 203.0.113.2;

    proxy_set_header X-Real-IP  $remote_addr; # pass on real client IP

    location / {
        proxy_pass http://203.0.113.1:22;
    }
}

Öyle ki sonuç şu:

server {
    listen 80;
    server_name 203.0.113.2;

    proxy_set_header X-Real-IP  $remote_addr; # pass on real client IP

    location / {
        proxy_pass http://203.0.113.1:3000;
    }
}
server {
    listen 22;
    server_name 203.0.113.2;

    proxy_set_header X-Real-IP  $remote_addr; # pass on real client IP

    location / {
        proxy_pass http://203.0.113.1:22;
    }
}

TIA,
Ole


2
nginxhttpvekil olarak hareket ediyor . Proxy bağlantı noktası 22'yi tersine ayarlarsanız, SSH trafiğini geçirmenize izin vermez - yalnızca httpSSH sunucusuna giden trafik, bu kesinlikle başarısız olur.
garethTheRed

Git HAProxy'yi kontrol et .

Yanıtlar:


13

SSH protokolü böyle düzenli vekalet edilemez olarak, HTTP dayanır ve olmayan proxy_passarasındangx_http_proxy_module

Ancak, son zamanlarda, nginx 1.9.0 (2016-04-26'da 1.10.0 ile kararlı olarak piyasaya sürüldü) ile başlayarak, nginx TCP akışı proxy'si yapmak için destek kazanmıştır , yani son zamanlarda yeterli bir nginx sürümünüz varsa, Aslında, proxy ssh bağlantılarını bununla yapabilirsiniz (ancak, X-Real-IPHTTP'ye dayanmadığı için proxy bağlantıya benzer bir şey ekleyemeyeceğinizi unutmayın ).

Daha fazla bilgi ve örnek için aşağıdaki konulara göz atın:


8

Nginx 1.9.0 sürümünden beri NGINX, ngx_stream_core_module modülünü desteklediğinden, --with-stream ile etkinleştirilmelidir. Akış modülü etkinleştirildiğinde, ssh protokolü tcp proxy'si mümkündür

stream {
    upstream ssh {
        server 192.168.1.12:22;
    }
        server {
        listen        12345;
        proxy_pass    ssh;

    }

}

https://www.nginx.com/resources/admin-guide/tcp-load-balancing/


Nginx'in hepsi güzel bir özelliktir - ancak nginx gibi gerçek ters proxy'ye sahip olmak istediğinizde IMHO işe yaramaz, HTTP için mükemmel bir iş çıkarır. Akışları yaklaşım basit NAT şey - bu yüzden kenar görev üzerinde bu görevi yapmak istiyorum. Ne istiyorum / burada olmasını istiyorum - HTTP ters proxy ile tam olarak aynı özellik ayarlanır. Başka bir deyişle, yalnızca bir genel IP adresim var - bu nedenle bağlantı noktası 22 yalnızca bir makine için kullanılabilir - ancak bir formdaki istekleri ayırt etmenin bir yolu olsaydı ssh me@srv1.my.netve ssh me@srv2.my.net- harika olurdu. Protokol sınırlaması (SSH, DNS adı istemcisinin kullandığı
verileri vermeyecektir

@stamster, farklı bağlantı noktası numaralarını (ör. 122 için srv1ve 222 için srv2) kullanarak veya ilk olarak ortak sunucuya / IP'ye ssh yaptığınız iç içe ssh oturumlarını kullanarak ve oradan neredeyse aynı şeyi yapabilirsiniz. yapraklara ssh; Örneğin,ssh user@example.org 'ssh user@192.168.5.1' .
cnst

1
Hayır, gereksinim / fikir varsayılan bağlantı noktasını (22 veya başka bir hizmet ..) hedef bağlantı noktası olarak kullanmak ve ardından trafiği DNS adına göre yönlendirmektir. Hepimiz nginx'i ters web http proxy sunucusu olarak kullandığımız gibi, her etki alanı varsayılan bağlantı noktaları 80, 443'ü hedefliyor ve nginx, trafiği proxy kurallarına bağlı olarak yönlendiriyor. Tabii ki istemcinin HOSTbaşlığı vardır, bu yüzden hangi siteyi hedeflediğini ayırt etmek kolaydır ... İç içe geçmiş SSH oturumları bir çeşit çözümdür, ancak dağınık bir oturumdur - yine de çalışır. Son ağımızda farklı portlarla karşılaştım - en eski KISS ve güvenilir çözüm olarak iyi eski NAT.
stamster
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.