我一直在拔头发试图让它发挥作用。我正在尝试在端口 8080(或任何高于 1024 的端口)上托管 Cloud9 SDK (Node.js) 应用程序,并使用 Apache 作为 HTTPS 上的反向代理。它不应该是相关的,但我也使用 PM2 来确保服务器在重新启动或类似的情况下恢复。
现在,这在 Apache 中通过 HTTP 进行反向代理时有效。在 Nginx 中通过 HTTPS 进行反向代理时,它也可以工作。我不想使用 Nginx 的唯一原因是因为同一台服务器也托管 Zoneminder,这对于使用 Nginx 来说是一件令人头疼的事情(已经尝试过)。所以我知道 Node.js 应用程序本身没有问题。
我最初是关注这篇文章的。在那之后,我做了一些广泛的谷歌搜索。但是,我尝试过的一切都没有奏效。在根目录 ( /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 上。
好的,我弄清楚了问题所在。我意识到还有其他启用的站点需要删除。我不得不
a2dissite 000-default-le-ssl.conf
并且a2dissite default-le-ssl.conf
没有意识到 apache 也在查看这些配置。我之前没有考虑过,因为我对 000-default.conf 文件所做的其他更改正在反映。只是不是ProxyPass。