1

I have a node application running on port 3030 for an API which I want to access over HTTPS.

If I visit http://api.example.com:3030/*** I can load a 200 response with no problem so the node application is definitely running, however if I visit https://api.example.com/**** I get the following error in the browser:

Proxy Error The proxy server received an invalid response from an upstream server. The proxy server could not handle the request GET /api/posts. 

and the following in the apache error log:

[Sun Jun 03 15:30:47.942229 2018] [proxy_http:error] [pid 30884] (103)Software caused connection abort: [client xx.xx.xx.xx:xxxxx] AH01102: error reading status line from remote server api.example.com:3030 [Sun Jun 03 15:30:47.942414 2018] [proxy:error] [pid 30884] [client xx.xx.xx.xx:xxxxx] AH00898: Error reading from remote server returned by /*** 

This is my Apache config:

<IfModule mod_ssl.c> <VirtualHost *:443> ServerName www.api.example.com ServerAlias api.example.com ServerAdmin webmaster@localhost DocumentRoot /var/www/html/xxxxxx/ ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/html/xxxxxx/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> RewriteEngine on SetEnv proxy-initial-not-pooled 1 SSLEngine On SSLProxyEngine on SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem ProxyPreserveHost On ProxyPass / https://api.example.com:3030/ ProxyPassReverse / https://api.example.com:3030/ </VirtualHost> </IfModule> 

Versions of Apache and Node:

  • node 8.11.2
  • Apache 2.4.7

Any support is greatly appreciated, thanks.

2
  • 1
    Change the https in your proxy lines to http Commented Jun 3, 2018 at 20:06
  • did you try with KeepAlive On ? serverfault.com/questions/185894/… Commented Feb 19, 2019 at 1:47

1 Answer 1

2

Your nodejs expects HTTP on it's port, as is evident by your working test:

If I visit http://api.example.com:3030/ I can load a 200 response with no problem

But you configured your Apache to access it via https

ProxyPass / https://api.example.com:3030/ ProxyPassReverse / https://api.example.com:3030/ 

Change your Apache configuration to use http and it will work.

ProxyPass / http://api.example.com:3030/ ProxyPassReverse / http://api.example.com:3030/ 

An additional note:
It is common practice not to make the ports of application servers public. You should configure nodejs to only listen on your loopback device (127.0.0.1) and then change your Proxy directives to connect to localhost:3030 instead of api.example.com.

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.