2016-02-28 24 views
6

Quando cerco di delega questa richiesta http://localhost:9000/rpc, riceverò:Come posso proxy per un endpoint SSL con il proxy webpack-dev-server di

cannot proxy to https://example.appspot.com:80 
    (write EPROTO 101057795:error:140770FC:SSL routines: 
    SSL23_GET_SERVER_HELLO:unknown protocol:openssl\ssl\s23_clnt.c:794:) 

webpack-dev-derver config:

devServer: { 
    contentBase: "./", 
    hostname: 'localhost', 
    port: 9000, 
    proxy: { 
     '/rpc': { 
      target: 'https://example.appspot.com', 
      secure: false, 
      changeOrigin: true  // **Update-2 SOLVED** 
     } 
    } 
} 

Io uso fetch: fetch('/rpc' ... per effettuare la richiesta e Windows 10 professional per eseguire il webpack.

Senza il proxy: fetch('https://example.com/rpc' ... la richiesta SSL funziona correttamente.

Aggiornamento . Ho dovuto usare la porta SSL 443 (vedi la risposta di Steffen).
Ora in uso: https://example.appspot.com:443

Ma ancora non funziona con secure: true. Il registro della console mostra:

cannot proxy to https://example.appspot.com:443 
(Hostname/IP doesn't match certificate's altnames: "Host: localhost. 
is not in the cert's altnames: DNS:*.appspot.com, DNS:*.thinkwithgoogle.com, 
DNS:*.withgoogle.com, DNS:*.withyoutube.com, DNS:appspot.com, 
DNS:thinkwithgoogle.com, DNS:withgoogle.com, DNS:withyoutube.com") 

E con secure: false. La console riporta: 404 (Not Found)

Aggiornamento: SOLVED utilizzando changeOrigin: true. Documenti here.

+2

Grazie per la soluzione "changeOrigin: true'! – alecdwm

risposta

2
 target: 'https://example.com:80', 

E 'molto improbabile che la porta 80 è utilizzata per HTTPS. Di solito la porta 443 viene utilizzata

SSL23_GET_SERVER_HELLO:unknown protocol:openssl\ssl\s23_clnt.c:794:) 

E 'molto probabile che il server sulla porta 80 non rispose con HTTPS ma con qualche errore HTTP perché il messaggio dal client è stato l'inizio di una stretta di mano TLS e non la richiesta HTTP prevista. Ma il cliente si aspettava la risposta all'handshake TLS e non un errore HTTP. Ecco perché ottieni questo errore.

Senza il proxy: fetch ('https://example.com/rpc' ... la richiesta SSL funziona bene

Questo perché si utilizza in questo caso https://example.com e non https://example.com:80 Perché non date un esplicito.. porta userà la porta predefinita per https, cioè 443.

+0

Sì, thnx. Continua a non funzionare. Ho aggiornato la mia ricerca. – voscausa

+0

@voscausa: il messaggio di errore indica chiaramente qual è il problema: il certificato è per * *. Appspot.com, ... 'ma si sta accedendo con il nome' localhost'. Poiché il nome che utilizzi non corrisponde ai nomi nel certificato, il certificato non può essere convalidato. –

+0

OK. Thnx di nuovo. Ho trovato un'opzione per cambiare l'origine e SOLVED. Ho aggiornato la mia domanda con l'opzione. – voscausa

0

Mentre sto usando la configurazione corretta con changeOrigin: true ecc., ma ancora incontro 301 e richiesta di opzione, e non posso raggiungere il vero server di backend. per pulire la cache del browser, funziona correttamente.