托管 Node.js 应用程序 (Cloud9 SDK) 并使用 Apache 作为反向代理(通过 HTTPS)不起作用

托管 Node.js 应用程序 (Cloud9 SDK) 并使用 Apache 作为反向代理(通过 HTTPS)不起作用

我一直在绞尽脑汁试图让它工作。我试图在端口 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.confa2dissite default-le-ssl.conf没有意识到 apache 也在查看这些配置。我之前没有想到这一点,因为我对 000-default.conf 文件所做的其他更改也得到了反映。只是没有反映 ProxyPass。

相关内容