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
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/


Versions of Apache and Node:

  • node 8.11.2
  • Apache 2.4.7

Any support is greatly appreciated, thanks.


1 Answer 1


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 ( and then change your Proxy directives to connect to localhost:3030 instead of api.example.com.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .