apache - 如何让我的 nextjs with Express 站点在 ssl 上工作

标签 apache express ssl cpanel next.js

我们有一个在 Next.js 和 Express 上运行的站点。这是在带有 Aapche 的 cPanel 服务器上,并与作为反向代理的 nginx 一起。

我需要在网站上使用 ssl。但是我对应该如何配置感到很困惑。

我的 server.js :

const express = require('express')
const next = require('next')
const https = require('https');
const fs = require('fs');
//const forceSSL = require('express-force-ssl')

var ssl_options = {
 key: fs.readFileSync('/home/myreactsite.key'),
 cert: fs.readFileSync('/home/myreactsite.crt'),
};

const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()

const favicon = require('serve-favicon')
const path = require('path')

app.prepare()
.then(() => {
 const server = express()
 server.use(favicon(path.join(__dirname, 'static', 'images', 'favicon.ico')))

 server.get('*', (req, res) => {
  return handle(req, res)
})

server.listen(3007, (err) => {
   if (err) throw err
   console.log('> Ready on http://localhost:3007')
 })

var httpsServer = https.createServer(ssl_options,server).listen('8445', (err) => {
  if (err) throw err
  console.log('> Ready on https://localhost:8445')
})
})
.catch((ex) => {
 console.error(ex.stack)
 process.exit(1)
})

Apache 运行在 8080 上 Nginx 运行在 80 Next.js 在 3007 和 8445 上运行(我更喜欢 ssl)

我的 Apache 配置包含以下隐藏端口 3007

<Proxy *>
   Order deny,allow
   Allow from all
</Proxy>
ProxyPass / http://myreactsite.com:3007/

如果我以 http://myreactsite.com 访问网站,该网站工作正常.但是当我访问 https://myreactsite.com 时失败了虽然我可以通过将端口号指定为 https://myreactsite.com:8445 来访问 https 版本

我想让它在不指定 https 端口的情况下工作。

如何在不指定端口的情况下让我的网站将所有页面强制为 https?

最佳答案

您可能希望使用 Apache 进行所有 SSL 处理并监听 443 端口,然后代理到您的 3007 端口。试试这个配置:

<VirtualHost *:443>
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName myreactsite.com
  ServerAlias myreactsite.com
  ProxyPass / http://0.0.0.0:3007/
  ProxyPassReverse / http://0.0.0.0:3007/
  SSLEngine On
  SSLProxyEngine On
  SSLCertificateFile /home/myreactsite.crt
  SSLCertificateKeyFile /home/myreactsite.key
</VirtualHost>

然后重定向所有 HTTP 流量:

<VirtualHost *:80>
  ServerName myreactsite.com
  Redirect / https://myreactsite.com/  
</VirtualHost>

关于apache - 如何让我的 nextjs with Express 站点在 ssl 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45239694/

相关文章:

c - 什么是包属性以及如何生成它们?

java - 在 apache log4j 中编码模式布局

apache - SSL 收到超过最大允许长度的记录。 (错误代码 : ssl_error_rx_record_too_long)

css - 通过node为ejs中的css添加class

javascript - 如何将 JSON 数据传递到 Express REST API

ssl - 使用 SSL/Keystore 连接到 Java 中的 Websphere MQ

php - 如何将 plist 文件上传到我的服务器以及我是否需要在服务器端执行任何特殊操作?

php - 升级到php 5.5报错Centos 7 Apache 2.4

javascript - 网站前端使用backbone,后端使用nodejs

ssl - Docker:如何通过 https 强制 graylog web 界面?