我有一个在端口 3030 上运行的节点应用程序,用于我想通过 HTTPS 访问的 API。
如果我访问http://api.example.com:3030/*** 我可以毫无问题地加载 200 响应,因此节点应用程序肯定正在运行,但是如果我访问https://api.example.com/**** 我在浏览器中收到以下错误:
Proxy Error
The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request GET /api/posts.
Apache 错误日志中的内容如下:
[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 /***
这是我的 Apache 配置:
<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>
Apache 和 Node 的版本:
- 节点 8.11.2
- Apache 2.4.7
非常感谢任何支持,谢谢。
答案1
您的 nodejs 需要在其端口上使用 HTTP,这从您的工作测试中可以看出:
如果我访问http://api.example.com:3030/我可以毫无问题地加载 200 响应
但你将 Apache 配置为通过 https 访问
ProxyPass / https://api.example.com:3030/
ProxyPassReverse / https://api.example.com:3030/
将您的 Apache 配置更改为使用 http 并且它将会工作。
ProxyPass / http://api.example.com:3030/
ProxyPassReverse / http://api.example.com:3030/
补充说明:
通常的做法是不将应用服务器的端口公开。您应该将 nodejs 配置为仅监听您的环回设备 ( 127.0.0.1
),然后将您的代理指令更改为连接到localhost:3030
而不是api.example.com
。