Bagaimana cara menggunakan Nginx sebagai server proxy HTTP / HTTPS? [Tutup]

16

Apakah mungkin menggunakan Nginx sebagai proxy HTTP / HTTPS?

vlad
sumber

Jawaban:

14

Setelah beberapa pengujian, saya menemukan bekerja untuk saya konfigurasi berikut.

server {
  server_name ~^(www\.)?(?<domain>.+)$;
  access_log /var/log/nginx/proxy.access.log main;
  error_log /var/log/nginx/proxy.error.log crit;
  listen 10.255.1.13:8080;
  resolver 8.8.8.8;
  location / {
    proxy_pass http://$domain;
    proxy_redirect off;
    proxy_set_header Host $host;
    # Optional headers 
    # proxy_set_header X-Real-IP $remote_addr;
    # proxy_set_header X-Forwarded-For
    # $proxy_add_x_forwarded_for;
  }
}

Konfigurasi ini hanya berfungsi untuk HTTP, bukan untuk HTTPS.

vlad
sumber
4
Kerja bagus! Beberapa petunjuk. 1: listen ... default_server. 2: server_name ""atau server_name _. 2: proxy_pass $scheme://$http_host. Batasannya: poxying ke upstreams dengan port 80 saja; tidak memproses pengalihan sendiri.
Alexander Azarov
Skema $ hanya berguna jika vhost mendengarkan di https juga - tetapi kemudian Anda memiliki orang di tengah risiko dan https kesalahan sertifikat untuk bersaing dengan ... keduanya adalah masalah keamanan besar untuk dipertimbangkan
anthonysomerset
8

Saya pikir jawaban singkatnya adalah tidak, itu tidak ditulis untuk meneruskan proxy

MEMPERBARUI

untuk mengklarifikasi pernyataan saya di atas:

NGINX tidak pernah ditulis dengan proksi maju dalam pikiran - sementara mungkin untuk mengatur konfigurasi untuk melakukan apa yang Anda inginkan, Anda harus memahami batasan berikut:

  • Dukungan cache hampir tidak ada (salah satu alasan utama untuk menggunakan proxy)
  • Tidak dapat digunakan untuk apa pun selain lalu lintas port 80 (yaitu tidak masuk ke kotak cpanel melalui itu)
  • Tidak ada dukungan untuk lalu lintas berbasis SSL
  • Tidak ada dukungan untuk header proxy standar dan header cache http (pemahaman saya adalah bahwa ini baru saja dilewati
  • Tidak ada dukungan untuk protokol lain yang mendukung server proxy - mis. VPN, dll

Kemungkinan pertimbangan lain yang tidak diketahui saat ini:

  • Kemungkinan melakukan DoS proxy Anda karena tidak ada kemampuan nyata untuk mengontrol / otentikasi akses berbutir halus (nginx memiliki dukungan untuk metode kontrol akses yang berbeda tetapi tidak jelas bagaimana ini mungkin berperilaku dalam konteks proxy yang maju)
  • Risiko keamanan yang mungkin terjadi pada mesin yang menginstal nginx karena ada kemungkinan lubang keamanan tidak dipertimbangkan karena menggunakan cara yang tidak dirancang untuk dijalankan
anthonysomerset
sumber
Counterexample, lihat: ef.gy/using-nginx-as-a-proxy-server
kkurian
mungkin jawaban saya seharusnya lebih jelas itu tidak dirancang untuk melakukan forward proxy - upaya patch monyet tidak akan menawarkan dukungan proxy penuh seperti permintaan proxy ke port non-standar (port 80)
anthonysomerset
3

Jika Anda ingin menggunakan proxy HTTP / HTTPS, Anda harus menggunakan Squid. Itu ditulis untuk melakukan hal itu. Nginx ditulis untuk bertindak sebagai proxy terbalik dan penyeimbang beban, tetapi bukan proxy yang maju.

MikeyB
sumber
Saya tahu tentang cumi / oops / tinyproxy / dll. Saya hanya menanyakan pertanyaan ini demi kepentingan akademis
vlad