首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制SSL并指向NodeJS的.htaccess

问强制SSL并指向NodeJS的.htaccess
EN

Stack Overflow用户
提问于 2018-08-21 12:18:50
回答 2查看 873关注 0票数 0

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
RewriteEngine on
RewriteRule  (.*)  http://localhost:3000/$1  [P,L] 

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

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

EN

回答 2

Stack Overflow用户

发布于 2018-08-21 20:19:50

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

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

代码语言:javascript
复制
ProxyPass         / http://localhost:3000/
ProxyPassReverse  / http://localhost:3000/
票数 0
EN

Stack Overflow用户

发布于 2018-08-21 22:16:52

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

代码语言:javascript
复制
<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虚拟主机,不要忘记安装所有必需的子模块:

代码语言:javascript
复制
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 symlink或使用apache工具a2ensite.
  3. Restart或重新加载apache服务来启用此配置文件。

示例:

代码语言:javascript
复制
cd /etc/apache2/sites-avaliable
vim new-virtual-host.conf

将上面描述的示例配置放在此文件的顶部。

创建符号链接:

代码语言:javascript
复制
cd /etc/apache2/sites-enabled/
ln -s ../sites-available/new-virtual-host.conf new-virtual-host.conf

或

代码语言:javascript
复制
sudo a2ensite new-virtual-host.conf

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

代码语言:javascript
复制
sudo service apache2 restart

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

如果您已经拥有有效的证书,您当然可以按照this gude.将其转换为pem格式。

Centos下的

更新:

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51941504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档