【问题标题】:.htaccess to force SSL and also point to NodeJS.htaccess 强制 SSL 并指向 NodeJS
【发布时间】:2018-08-21 04:18:49
【问题描述】:

我有一个 GoDaddy VPS 托管服务器。我已经成功安装了 Node/NPM、SSL 证书等,但在 .htaccess 中遇到了一些问题。我可以使用 .htaccess 中的以下代码强制 http 到 https:

RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

我还可以通过将以下内容添加到 .htaccess 来绕过必须执行 Apache 反向代理,以便服务器/域使用 NodeJS 而不是 Apache:

RewriteEngine on
RewriteRule  (.*)  http://localhost:3000/$1  [P,L] 

我遇到的问题是让两者同时工作。强制 SSL 并指向服务器的 NodeJS。

我不确定 .htaccess 是否是实现这两个目标的最佳途径。

【问题讨论】:

  • 您可以访问 apache .conf 文件吗?
  • 我愿意。我有 root 访问权限。

标签: node.js linux apache .htaccess


【解决方案1】:

如果您有权访问 Apache 配置文件 (detailed explanation here),则根本不应该使用 .htaccess。

在您的 http (:80) 虚拟主机配置中,您可以放置​​您的 https 强制规则,在您的 https (:443) 虚拟主机中,您可以放置​​您的反向代理规则。此外,使用ProxyPass 指令而不是带有[P] 标志的RewriteRule 可能会给出一些performance benefit

ProxyPass         / http://localhost:3000/
ProxyPassReverse  / http://localhost:3000/

【讨论】:

    【解决方案2】:

    如果您可以访问 Apache .conf 文件,请尝试使用以下代码创建虚拟主机:

    <VirtualHost *:80>
        ServerName www.example.com
        Redirect permanent / https://www.example.com/
    </VirtualHost>
    
    
    <VirtualHost *:443>
        ServerName www.example.com
        SSLEngine on
        SSLCertificateFile /etc/path/to/fullchain.pem
        SSLCertificateKeyFile /etc/path/to/privkey.pem
    
        ProxyRequests off
        SSLProxyEngine on
    
        ErrorLog /var/log/nodejs/errorLog443.log
        TransferLog /var/log/nodejs/transferLog443.log
    
        <Location />
            ProxyPass http://localhost:3000/
    
            Order deny,allow
            Deny from all
            Allow from all
        </Location>
    
    </VirtualHost>
    

    然后启用刚刚创建的 apache 虚拟主机,不要忘记安装所有必需的子模块:

    sudo a2enmod ssl
    sudo a2enmod proxy
    sudo a2enmod proxy_balancer
    sudo a2enmod proxy_http
    
    sudo a2ensite example.apache.host.conf
    
    sudo service apache2 restart
    

    如果您需要创建一个新的 apache .conf 文件,请按照以下几个步骤操作:

    1. 导航到 apache vhost 默认目录 /etc/apache2/sites-avaliable 并使用示例代码创建新的虚拟主机配置文件。

    2. 启用此配置文件使用linux符号链接或使用apache工具a2ensite

    3. 重启或重新加载apache服务。

    例子:

    cd /etc/apache2/sites-avaliable
    vim new-virtual-host.conf
    

    将上面描述的示例配置放到这个文件中。

    创建符号链接:

    cd /etc/apache2/sites-enabled/
    ln -s ../sites-available/new-virtual-host.conf new-virtual-host.conf
    

    sudo a2ensite new-virtual-host.conf
    

    最后通过重启 apache 服务重新加载新配置:

    sudo service apache2 restart
    

    管理/创建 Web 主机 ssl 证书的最佳方法是使用 Let’s Encrypt 服务。 Please follow guide here

    如果您已经有有效证书,当然可以通过this gude.将其转换为pem格式

    为 Centos 操作系统更新:

    对于 Centos 操作系统,只需在位置打开 apache2 配置文件 /etc/httpd/conf/httpd.conf,向下滚动到最底部 文档到称为虚拟主机的部分。在那里你可以编辑/添加 具有您需要的适当配置的虚拟主机部分。

    有关如何在 Centos 操作系统上配置 Apache 服务的更多信息,请阅读指南How To Set Up Apache Virtual Hosts on CentOS 6

    【讨论】:

    • 我正在尝试您的解决方案,但有几个问题。 1. 我应该创建一个 .conf 文件来添加 Apache 将包含的虚拟主机信息,还是应该将它放在主 httpd.conf 文件中? 2. 我有证书的 .crt 文件而不是 .pem。我需要转换证书吗? 3. sudo a2enmod 命令返回 a2enmod: command not found。我以 root 身份运行这些,所以我认为这不是权限问题。还有其他需要启用的吗?
    • 能写出你安装的apache版本吗?只需在linux上写一个命令apache2 -v
    • 我正在运行 2.4.34
    • 另外,您能告诉我们您的 VPS 中使用的是什么 linux 发行版吗?
    • WHM 说我有 CENTOS 6.10 virtuozzo
    猜你喜欢
    • 1970-01-01
    • 2014-06-19
    • 2018-05-23
    • 2012-02-02
    • 2013-04-28
    • 2012-04-22
    • 2011-11-03
    • 1970-01-01
    • 2017-08-22
    相关资源
    最近更新 更多