2013-09-03 10 views
24

Stavo lavorando in una rete di ritaglio dietro un server proxy. Nel mio codice posso impostare il proxy utilizzando l'approccio menzionato in questa discussione (How can I use an http proxy with node.js http.Client?).Impostazione proxy globale Node.js

Ma il problema è che la maggior parte dei moduli di terze parti non ha impostazioni proxy e non posso modificare il codice per aggiungere il proxy. Inoltre, il mio codice potrebbe essere utilizzato in un ambiente di connessione diretta, il che significa che non è possibile codificare il mio proxy in codice.

So NPM ha un'impostazione globale per il proxy che è

 
npm config set proxy http://proxy.company.com:8080 
npm config set https-proxy http://proxy.company.com:8080 

Ma non ho trovato alcuna configurazione simile a Node.js.

Node.js supporta l'impostazione del proxy globale in modo che non sia necessario modificare tutti i codici e accendere e spegnere facilmente.

risposta

4

Ho finalmente creato un modulo per risolvere questa domanda (parzialmente). Fondamentalmente questo modulo riscrive la funzione http.request, aggiunge l'impostazione proxy quindi attiva. Controlla il mio post sul blog http://blog.shaunxu.me/archive/2013/09/05/semi-global-proxy-setting-for-node.js.aspx

+0

Ottima soluzione, sto usando un middleware di terza parte, effettuerà la richiesta http, come risolvere il problema del proxy in questo scenario? – yuyue007

+0

Penso che il codice nel mio blog possa risolvere il tuo problema se il modulo di terze parti utilizza il modulo 'http' per inviare una richiesta. Assicurati di aver richiesto il mio modulo prima di quello di terze parti. –

+0

Url return 404, ho trovato questo http://geekswithblogs.net/shaunxu/archive/2013/09/05/semi-global-proxy-setting-for-node.js.aspx – haxpor

17

Sfortunatamente, sembra che le informazioni sul proxy debbano essere impostate su ogni chiamata a http.request. Il nodo non include un meccanismo per le impostazioni globali del proxy.

La global-tunnel module su NPM sembra gestire questa situazione, però:

var globalTunnel = require('global-tunnel'); 

globalTunnel.initialize({ 
    host: 'proxy.example.com', 
    port: 8080 
}); 

Dopo che le impostazioni globali sono stabilire con una chiamata a initialize, sia http.request e la libreria requests utilizzerà le informazioni proxy.

Il modulo può anche utilizzare la variabile http_proxy ambiente:

process.env.http_proxy = 'http://proxy.example.com:3129'; 
globalTunnel.initialize(); 
+0

quindi esiste un meccanismo globale per impostazioni del proxy? perché questo è fondamentalmente ciò che è env.http_proxy, no? –

+0

È possibile specificare nome utente e password nella configurazione globale del tunnel? –

0

Pur non essendo un ambiente Nodejs, vi suggerisco di utilizzare proxychains che trovo piuttosto conveniente. Probabilmente è disponibile nel tuo gestore di pacchetti.

Dopo aver impostato il proxy nel file di configurazione (/etc/proxychains.conf per me), è possibile eseguire proxychains npm start o proxychains4 npm start (cioè proxychains [command_to_proxy_transparently]) e tutte le vostre richieste saranno inoltrate automaticamente.

impostazioni di configurazione per me:

Queste sono le impostazioni minime si dovrà accodare

## Exclude all localhost connections (dbs and stuff) 
localnet 0.0.0.0/0.0.0.0 
## Set the proxy type, ip and port here 
http 10.4.20.103 8080 

(si può ottenere l'ip del proxy utilizzando nslookup [proxyurl])

Problemi correlati