我们有一个在 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/