![托管 Node.js 应用程序 (Cloud9 SDK) 并使用 Apache 作为反向代理(通过 HTTPS)不起作用](https://linux22.com/image/697476/%E6%89%98%E7%AE%A1%20Node.js%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%20(Cloud9%20SDK)%20%E5%B9%B6%E4%BD%BF%E7%94%A8%20Apache%20%E4%BD%9C%E4%B8%BA%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%EF%BC%88%E9%80%9A%E8%BF%87%20HTTPS%EF%BC%89%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我一直在绞尽脑汁试图让它工作。我试图在端口 8080(或任何高于 1024 的端口)上托管 Cloud9 SDK(Node.js)应用程序,并使用 Apache 作为 HTTPS 上的反向代理。这应该不相关,但我还使用 PM2 来确保服务器在重新启动或类似情况下重新启动。
现在,当在 Apache 中通过 HTTP 进行反向代理时,这种方法有效。当在 Nginx 中通过 HTTPS 进行反向代理时,这种方法也有效。我不想使用 Nginx 的唯一原因是同一台服务器还托管 Zoneminder,这在使用 Nginx 时很麻烦(已经尝试过)。所以我知道 Node.js 应用程序本身没有问题。
我原本关注的是本文之后,我进行了大量的 Google 搜索。但是,我尝试过的所有方法都没有奏效。在根目录 ( /var/www/html/
) 中,我只有默认的 Apache 登陆页面。这是我被带到的地方,而不是我的 Node.js 应用程序。
/etc/apache2/sites-available/000-default.conf
这是我现在文件里的内容:
<VirtualHost *:80>
#ServerAdmin webmaster@localhost
ServerAdmin [email protected]
DocumentRoot /var/www/html
ServerName example.com
ServerAlias www.example.com
Redirect / https://example.com/
</VirtualHost>
<VirtualHost *:443>
SSLEngine On
#SSLProxyEngine On
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
ProxyPreserveHost On
#ProxyRequests off
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>
如果你好奇的话,以下是我的/etc/nginx/sites-available/default
文件内容:
server {
listen 80;
listen [::]:80 default_server ipv6only=on;
return 301 https://$host$request_uri;
}
server {
listen 443;
server_name example.com;
ssl on;
# Use certificate and key provided by Let's Encrypt:
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_session_timeout 5m;
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 192.168.1.1 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
root /var/www/html;
# Pass requests for / to localhost:8080:
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://localhost:8080/;
proxy_ssl_session_reuse off;
proxy_set_header Host $http_host;
proxy_cache_bypass $http_upgrade;
proxy_redirect off;
}
}
另外,我不确定这是否相关,但这一切都是在 Raspberry Pi 3b 上进行的。
答案1
好的,我搞清楚了问题所在。我意识到还有其他启用的网站需要删除。我不得不这么做,a2dissite 000-default-le-ssl.conf
却a2dissite default-le-ssl.conf
没有意识到 apache 也在查看这些配置。我之前没有想到这一点,因为我对 000-default.conf 文件所做的其他更改也得到了反映。只是没有反映 ProxyPass。