最近在學習微信小程序,小程序開發使用的所有接口都必須是
https
的,因此本文主要將服務器如何配置https(以阿里云ECS共享型 n4
云服務器為例)
一、域名申請(需要購買)
控制臺 -> 域名 -> 域名注冊 -> 選擇域名,按頁面提示輸入相關信息 -> 等待實名認證通過
圖1-1 進入域名控制臺
圖1-2 域名注冊
圖1-3 域名實名認證
申請免費ssl證書步驟如下:
圖1-4 申請免費ssl證書
圖1-5 申請免費ssl證書
二、申請ssl證書(有免費證書)
ssl證書控制臺 -> 申請免費證書 -> 按頁面提示,填入相關信息 -> 驗證信息 -> 等待驗證通過
圖2-1
圖2-2
圖2-3
圖2-4
圖2-5
圖2-6
圖2-7
圖2-8
等驗證通過后,就可以下載ssl證書
了
圖2-9
三、nginx配置https
- 進入nginx的配置文件:
cd /etc/nginx
; - 將證書上傳至服務器,我上傳到
/etc/nginx/cert
圖3-1 上傳證書 - 修改
nginx.conf
文件:include /etc/nginx/conf.d/ssl.conf
圖3-2 nginx.conf
- /etc/nginx/conf.d/ssl.conf文件
server {
listen 8081; # nginx配置端口,這里我是8081
server_name localhost;
# 配置http訪問自動轉發到https
rewrite ^(.*) https://$host$1 permanent;
}
server {
listen 443 ssl;
server_name _; # 值為 _ 表示 域名和ip都能訪問
ssl_certificate "/etc/nginx/cert/server.pem"; # ssl的.pem文件(絕對地址)
ssl_certificate_key "/etc/nginx/cert/server.key"; # ssl的.key文件(絕對地址)
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
# 配置文件上傳大小
client_max_body_size 2G;
location / {
root /usr/local/develop/web-front-end;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location /apis/ {
# rewrite ^.+iot/?(.*)$ /$1 break;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers "Accept, X-Token, Content-Type";
add_header Access-Control-Allow-Methods "GET, POST, DELETE, PATCH, PUT, OPTIONS";
proxy_pass http://localhost:13666/;
# (以下2句)配置允許創建websocket
# proxy_set_header Upgrade websocket;
# proxy_set_header Connection Upgrade;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
設置安全組規則
圖3-3 設置安全組規則
到這就可以通過ip訪問了
圖3-4 ip訪問
本地使用域名也能訪問
修改本地電腦的hosts文件:C:\Windows\System32\drivers\etc\host
圖3-5 修改hosts文件
四、node配置https
在項目根目錄下新建cert空文件夾,把ssl證書(.pem文件、.key文件)復制到cert文件夾中;
var app = express();
var https = require('https');
var fs = require('fs');
var path = require('path');
/* 服務啟動監聽 */
var privateCrt = fs.readFileSync(path.join(process.cwd(), 'cert/server.pem'), 'utf8');
var privateKey = fs.readFileSync(path.join(process.cwd(), 'cert/server.key'), 'utf8');
const HTTPS_OPTOIN = {
key: privateKey,
cert: privateCrt
};
const SSL_PORT = 13666;
const httpsServer = https.createServer(HTTPS_OPTOIN, app);
httpsServer.listen(SSL_PORT, () => {
console.log(`HTTPS Server is running on: https://localhost:${SSL_PORT}`);
});
遺留問題
- 阿里云域名備案