現在のノードの基本構造が次のとおりであるとします。
|----项目 | |--- static # 存放html文件 | | |--- index.html # index.html | |--- node_modules # 依赖包 | |--- app.js # node 入口文件 | |--- package.json | |--- .babelrc # 转换es6文件
index.html ファイルのコードは次のとおりです:
<!doctype html> <html> <head> <meta charset=utf-8> <meta name="referrer" content="never"> <title>nginx配置https</title> </head> <body> <div> <h2>欢迎使用https来访问页面</h2> </div> </body> </html>
app.js コードは次のとおりです:
const koa = require('koa'); const fs = require('fs'); const path = require('path'); const router = require('koa-router')(); const koabody = require('koa-body'); const static = require('koa-static'); const app = new koa(); router.get('/', (ctx, next) => { // 设置头类型, 如果不设置,会直接下载该页面 ctx.type = 'html'; // 读取文件 const pathurl = path.join(__dirname, '/static/index.html'); ctx.body = fs.createreadstream(pathurl); next(); }); app.use(static(path.join(__dirname))); app.use(router.routes()); app.use(router.allowedmethods()); app.listen(3001, () => { console.log('server is listen in 3001'); });
package.json コードは次のとおりです ;
{ "name": "uploadandload", "version": "1.0.0", "description": "", "main": "app.js", "scripts": { "dev": "nodemon ./app.js" }, "author": "", "license": "isc", "dependencies": { "fs": "0.0.1-security", "koa": "^2.7.0", "koa-body": "^4.1.0", "koa-router": "^7.4.0", "koa-send": "^5.0.0", "koa-static": "^5.0.0", "nodemon": "^1.19.0", "path": "^0.12.7" } }
その後、プロジェクトのルート ディレクトリで npm run dev を実行すると、ブラウザで http://localhost:3001 にアクセスできますが、ドメイン名を使用してアクセスしたい場合は、hosts ファイルの下にドメイン名をバインドできます (例: xxx.abc.com)。hosts ファイルは次のようにバインドされています:
127.0.0.1 xxx.abc.com
したがって、この時点ではhttp://xxx.abc.com:3001/ を使用してアクセスできます。ページは次のとおりです。
上記のように、ページにアクセスできますが、 Chrome ブラウザで http リクエストを表示するのは安全ではないことがわかったので、現時点では https を使用してアクセスし、Web ページのセキュリティが保証されているようにしたいと考えています。 https を使用してアクセスすると機能しません。たとえば、アドレス: https:///xxx.abc.com:3001。次の図に示すように:
https を使用してアクセスするには一般にセキュリティ証明書が必要であることがわかっているため、現在のタスクは nginx を使用してセキュリティ証明書などを構成し、https を使用して Web ページにアクセスして目的を達成することです。
nginx 設定 https サービス
1. まず、nginx ディレクトリに入り、コマンド cd /usr/local/etc/nginx を使用します。次に、このディレクトリに証明書フォルダーを作成し、証明書ファイルを保存します。
コマンド: mkdir cert を次のように使用します:
2. 次に、server.crt ファイルやserver.key ファイルなどの証明書関連ファイルをコピーする必要があります。証明書ディレクトリにコピーします。たとえば、次の証明書ファイル:
上記の証明書がどのように存続するかについては、以前の記事を参照してください。
Move コマンド: mv server.key /たとえば、usr /local/etc/nginx/cert のように、server.key ファイルとserver.crt ファイルを /usr/local/etc/nginx/cert ディレクトリに移動します。次の図に示すように:
次に、/usr/local/etc/nginx/cert ディレクトリを確認します。以下に示すように、次のファイルがあります。
3. nginx 設定 nginx 設定には次のコードを追加する必要があります:server { listen 443 ssl; server_name xxx.abc.com; ssl on; // 该配置项需要去掉 ssl_certificate cert/server.crt; ssl_certificate_key cert/server.key; /* 设置ssl/tls会话缓存的类型和大小。如果设置了这个参数一般是shared,buildin可能会参数内存碎片,默认是none,和off差不多,停用缓存。如shared:ssl:10m表示我所有的nginx工作进程共享ssl会话缓存,官网介绍说1m可以存放约4000个sessions。 */ ssl_session_cache shared:ssl:1m; // 客户端可以重用会话缓存中ssl参数的过期时间,内网系统默认5分钟太短了,可以设成30m即30分钟甚至4h。 ssl_session_timeout 5m; /* 选择加密套件,不同的浏览器所支持的套件(和顺序)可能会不同。 这里指定的是openssl库能够识别的写法,你可以通过 openssl -v cipher 'rc4:high:!anull:!md5'(后面是你所指定的套件加密算法) 来看所支持算法。 */ ssl_ciphers high:!anull:!md5; // 设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件。 ssl_prefer_server_ciphers on; location / { proxy_pass http://localhost:3001; } }注: 上記の ssl はオンになっており、この設定項目には次のコードが必要です。削除されます。上記のように設定されている場合、nginx コマンドを再起動すると、次のようなエラーが報告されます。このエラーと同様のエラー :0906a065:pem ルーチン:pem_do_header:bad 復号化してから、Baidu でこのエラーを検索すると、次の方法で解決できます: ディレクトリを入力してください: cd /usr/local/etc/nginx /cert を入力し、次の 2 行のコードを実行します。
cp server.key server.key.org openssl rsa -in server.key.org -out server.key以下に示すように: Baidu
# で検索されたページが表示されます。 ##その後、nginx の再起動を続けると、依然としてエラーが報告されることがわかりました。エラー メッセージは次のとおりでした:
nginx: [警告] "ssl" ディレクティブは非推奨です。代わりに「listen ... ssl」ディレクティブ
その後、ssl をオンにし続けます。この設定項目は削除できます。これは、nginx のバージョンに関連している可能性があります。最近私はnginx 1.15 にアップグレードしました。リロード後、SSL を使用するすべてのサイトは、この警告を報告し、多くの情報を確認し、最終的に github で関連する英語の説明を見つけました: ( ) 私の英語は苦手です。おそらく nginx 1.15 ということです。それ以降のバージョンでは、SSL を書き込む必要がなくなりました。理解が間違っていました。443 ssl をリッスンするには ssl をオンに変更する必要があります。これは正しいです。 ここで、nginx の再起動を続けます。以下に示すように、問題はありません。nginx.conf にアクセスし、ssl on を削除してリロードすると、案の定、再びアラームは発生せず、現在の使用には問題ありません。
ただし、上記の設定後は、ドメインを直接使用できなくなります。 name https:// xxx.abc.com/ にアクセスした後、前に生成した client.crt 証明書をブラウザにインストールする必要があります。Mac システムでの手順は次のとおりです:
1. をクリックします。以下に示すように、ランチャー上で。次のように:###
2. 以下に示すように、キーチェーン アクセスを検索してクリックします。
3. 証明書ページに入り、「Just」と入力します。 client.crt 証明書を証明書にドラッグします。たとえば、前に生成した client.crt 証明書は次のとおりです:
4. 証明書を右クリックし、 「プロファイルを表示」をクリックして、証明書の詳細ページに入ります。次の図に示すように:
#5. ページに入った後、証明書を使用するときに、次の図に示すように [常に信頼する] を選択します。#6. その後終了します。コンピューターの電源投入時パスワードの入力が必要になる場合があります。入力すると、自動的に保存されます。次に、ブラウザで https://xxx.abc.com/ ページにアクセスできます。以下に示すように:
上記は、nginx 証明書を使用してローカル ノード https サービスを実装することです。
ただし、上記のように https にアクセスできますが、次の図に示すように、https の前に安全でないコピーライティングが表示されます。
以上がhttpsサービスを実装するためにnginx SSL証明書を構成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。