Andaikan struktur asas nod semasa saya adalah seperti berikut:
|----项目 | |--- static # 存放html文件 | | |--- index.html # index.html | |--- node_modules # 依赖包 | |--- app.js # node 入口文件 | |--- package.json | |--- .babelrc # 转换es6文件
index.html Kod fail adalah seperti berikut:
<!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 Kodnya adalah seperti berikut:
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 Kodnya adalah seperti berikut ;
{ "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" } }
Kemudian selepas saya melaksanakan npm run dev dalam direktori root projek, saya boleh mengakses http://localhost:3001 dalam penyemak imbas, tetapi jika saya ingin menggunakan nama domain untuk mengaksesnya, kita boleh Mengikat nama domain di bawah fail hos, contohnya, xxx.abc.com Fail hos terikat seperti berikut:
127.0.0.1 xxx.abc.com
Jadi di kali ini kita boleh menggunakan http://xxx.abc.com:3001/ untuk mengakses halaman adalah seperti berikut:
Seperti yang ditunjukkan di atas, kita boleh mengakses halaman, tetapi adakah kami mendapati bahawa ia tidak selamat untuk memaparkan permintaan http di bawah penyemak imbas Chrome , jadi pada masa ini saya ingin menggunakan https untuk mengakses, dan keselamatan halaman web adalah terjamin, jika saya tidak melakukan apa-apa pada masa ini dan terus menggunakan https untuk mengakses, ia tidak akan berfungsi Sebagai contoh, alamat: https:/ /xxx.abc.com:3001 Seperti yang ditunjukkan dalam rajah di bawah:
Kami tahu bahawa menggunakan https untuk mengakses secara amnya memerlukan sijil keselamatan, jadi tugas semasa kami adalah menggunakan nginx untuk mengkonfigurasi perkara seperti sijil keselamatan, dan kemudian menggunakan https untuk mengakses halaman web untuk mencapai matlamat.
perkhidmatan https konfigurasi nginx
1 mula-mula masukkan direktori nginx dan gunakan arahan: cd /usr/local/etc/nginx. Kemudian buat folder sijil dalam direktori ini untuk menyimpan fail sijil.
Gunakan arahan: mkdir cert seperti berikut:
2. Kemudian kita perlu menyalin fail berkaitan sijil, seperti fail server.crt dan server.key ke direktori sijil ini. Contohnya, fail sijil berikut:
Mengenai cara sijil di atas bertahan, sila lihat artikel saya sebelum ini
Arahan Move: mv server.key / usr /local/etc/nginx/cert, sebagai contoh, alihkan fail server.key dan server.crt ke direktori /usr/local/etc/nginx/cert. Seperti yang ditunjukkan dalam rajah di bawah:
Kemudian kita lihat pada direktori /usr/local/etc/nginx/cert terdapat fail berikut, seperti yang ditunjukkan di bawah:
3. konfigurasi nginx
konfigurasi nginx perlu menambah kod berikut:
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; } }
Nota: seperti di atas ssl on; perlu dikeluarkan. Jika ia dikonfigurasikan seperti di atas, saya memulakan semula arahan nginx dan ralat akan dilaporkan seperti berikut:
ssl: error:06065064:digital envelope routines:evp_decryptfinal_ex:bad decrypt ralat :0906a065:pem routines:pem_do_header:bad nyahsulit serupa dengan ralat ini, dan kemudian cari ralat ini melalui Baidu, kaedah berikut boleh diselesaikan:
Masukkan direktori: cd /usr/local/etc/nginx / sijil dan kemudian laksanakan dua baris kod berikut:
cp server.key server.key.org openssl rsa -in server.key.org -out server.key
seperti yang ditunjukkan di bawah:
Anda boleh melihat halaman yang dicari oleh Baidu
dan kemudian Apabila saya terus memulakan semula nginx, saya mendapati ralat masih dilaporkan Mesej ralat adalah seperti berikut:
nginx: [amaran] arahan "ssl" ditamatkan, gunakan. arahan "dengar ... ssl" sebaliknya
Kemudian teruskan hidupkan ssl; hanya alih keluar item konfigurasi ini Ia mungkin berkaitan dengan versi nginx
Baru-baru ini nginx 1.15, selepas memuat semula semua tapak dengan ssl saya melaporkan amaran ini, menyemak banyak maklumat, dan akhirnya menemui penjelasan bahasa Inggeris yang berkaitan pada github: ( ) Bahasa Inggeris saya tidak bagus, dan ini mungkin bermakna bahawa nginx 1.15 dan versi yang lebih baru tidak perlu menulis "ssl pada;" lagi.
Pergi ke nginx.conf dan padam ssl pada;
Saya memang salah faham. Saya harus menukar ssl untuk mendengar 443 ssl. Ini betul.
Sekarang saya terus memulakan semula nginx dan ia ok, seperti yang ditunjukkan di bawah:
Tetapi selepas konfigurasi di atas, kami tidak boleh terus menggunakan nama domain https :// Selepas melawati xxx.abc.com/, kami juga perlu memasang sijil client.crt yang kami hasilkan sebelum ini dalam penyemak imbas Langkah-langkah di bawah sistem mac adalah seperti berikut:
1 pelancar seperti yang ditunjukkan di bawah. Seperti yang ditunjukkan di bawah:
2. Cari akses rantai kunci dan klik masuk, seperti yang ditunjukkan di bawah
3. Masukkan halaman sijil dan letakkan yang sebelumnya Hanya seret sijil client.crt ke dalam sijil Contohnya, sijil client.crt yang saya hasilkan sebelum ini adalah seperti berikut:
4. Kemudian klik "Tunjukkan Profil" untuk memasuki halaman butiran sijil. Seperti yang ditunjukkan dalam gambar di bawah:
5 Selepas memasuki halaman, apabila menggunakan sijil, pilih Sentiasa Amanah, seperti yang ditunjukkan dalam gambar di bawah:
6 Kemudian keluar Anda mungkin perlu memasukkan kata laluan kuasa komputer Setelah dimasukkan, ia akan disimpan secara automatik. Kemudian kita boleh mengakses halaman https://xxx.abc.com/ dalam penyemak imbas. Seperti yang ditunjukkan di bawah:
Kemudian kita klik untuk terus melawat untuk melihat halaman, seperti yang ditunjukkan di bawah:
Di atas adalah menggunakan sijil + nginx untuk melaksanakan perkhidmatan https nod tempatan.
Namun, walaupun https di atas boleh diakses, teks tidak selamat masih dipaparkan di hadapan https seperti yang ditunjukkan dalam rajah di bawah:
Atas ialah kandungan terperinci Bagaimana untuk mengkonfigurasi sijil SSL nginx untuk melaksanakan perkhidmatan https. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!