2017-07-21 18 views
1

Next.jsとExpressで動作するサイトがあります。これはAapcheのcPanelサーバ上にあり、nginxと一緒にリバースプロキシとして機能します。sslでエクスプレスサイトの作業でnextjsを作成する方法

私はサイトに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の上で実行されますが

私のApacheの設定は含まれています(私はSSLのためにそれを好む)の両方の3007および8445上で動作する80 Next.js上で実行されます私はhttp://myreactsite.comとしてそれにアクセスする場合は、サイト3007

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

ポートを非表示にするには、次のことは正常に動作します。しかし、https://myreactsite.comにアクセスすると、ポート番号を指定してhttpsバージョンにアクセスできますが、https://myreactsite.com:8445

httpsポートを指定せずに動作させたいと思っています。

どのようにしてポートを指定せずにすべてのページをhttpsに強制することができますか?

+0

リバースプロキシでSSL終了を処理させることはできませんか? – robertklep

+0

プロキシセクションのポートを3007から8445に変更し、Apacheを再起動します –

答えて

1

おそらく、すべてのSSL処理にApacheを使用し、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トラフィックをリダイレクトする:それは誰かを助けている場合@fabianコメントに基づいて

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

@fabianありがとうございました。あなたは私の日を作った:)それに加えて、nginx.confに以下の行を追加した: return 301 https:// $ host $ request_uri; HTTP以外のリクエストはすべてhttps –

+0

にリダイレクトされますApacheを使用して、すべてのHTTPトラフィックをリダイレクトすることもできます。私は私の答えを更新しました。それは私の[ブログ投稿](https://blog.fabianschultz.com/post/apache-reverse-proxy-ssl-https)から取ったものです。 –

+0

ありがとう@fabian :) –

0

が、私は私の作業構成を掲載しています...

を追加しました。この設定をお試しくださいapache.conf内のサイトの443仮想ホストセクションの次の行:

ProxyPreserveHost On 
ProxyRequests Off 
<Proxy *> 
    Order deny,allow 
    Allow from all 
</Proxy> 
ProxyPass/http://example.com:3000/ 
ProxyPassReverse/http://example.com:3000/ 
SSLProxyEngine On 
#To redirect to https and www version 
RewriteEngine On 
RewriteCond %{HTTP_HOST} ^example\.com$ [NC] 
RewriteRule^https://www.example.com%{REQUEST_URI} [R=301,L] 

また、aサイトのnginx vhostファイルに次の行を追加しました:

server { 
    ... 
    ... 
#To redirect all http requests to https+www 
return 301 https://www.example.com$request_uri; 
    ... 
    ... 
} 
関連する問題