最近在做微信小程序的个人项目,遇到配置https的需求,特将过程记录下来。
root/docker ├── nginx_ssl │ ├── cert │ │ ├── xxx.key │ │ └── xxx.pem │ ├── Dockerfile │ └── conf.d │ └── default.conf └── backend(eggjs项目的根目录)root/docker ├── nginx_ssl │ ├── cert │ │ ├── xxx.key │ │ └── xxx.pem │ ├── Dockerfile │ └── conf.d │ └── default.conf └── backend(eggjs项目的根目录)root/docker ├── nginx_ssl │ ├── cert │ │ ├── xxx.key │ │ └── xxx.pem │ ├── Dockerfile │ └── conf.d │ └── default.conf └── backend(eggjs项目的根目录)
<span class="token constant">FROM</span> nginx <span class="token constant">COPY</span> <span class="token punctuation">.</span><span class="token operator">/</span>conf<span class="token punctuation">.</span>d <span class="token operator">/</span>etc<span class="token operator">/</span>nginx<span class="token operator">/</span>conf<span class="token punctuation">.</span>d <span class="token constant">RUN</span> mkdir <span class="token operator">/</span>etc<span class="token operator">/</span>nginx<span class="token operator">/</span>cert <span class="token constant">COPY</span> <span class="token punctuation">.</span><span class="token operator">/</span>cert <span class="token operator">/</span>etc<span class="token operator">/</span>nginx<span class="token operator">/</span>cert <span class="token constant">COPY</span> <span class="token punctuation">.</span><span class="token operator">/</span>www <span class="token operator">/</span>usr<span class="token operator">/</span>share<span class="token operator">/</span>nginx<span class="token operator">/</span>html <span class="token constant">EXPOSE</span> <span class="token number">80</span><span class="token constant">FROM</span> nginx <span class="token constant">COPY</span> <span class="token punctuation">.</span><span class="token operator">/</span>conf<span class="token punctuation">.</span>d <span class="token operator">/</span>etc<span class="token operator">/</span>nginx<span class="token operator">/</span>conf<span class="token punctuation">.</span>d <span class="token constant">RUN</span> mkdir <span class="token operator">/</span>etc<span class="token operator">/</span>nginx<span class="token operator">/</span>cert <span class="token constant">COPY</span> <span class="token punctuation">.</span><span class="token operator">/</span>cert <span class="token operator">/</span>etc<span class="token operator">/</span>nginx<span class="token operator">/</span>cert <span class="token constant">COPY</span> <span class="token punctuation">.</span><span class="token operator">/</span>www <span class="token operator">/</span>usr<span class="token operator">/</span>share<span class="token operator">/</span>nginx<span class="token operator">/</span>html <span class="token constant">EXPOSE</span> <span class="token number">80</span>FROM nginx COPY ./conf.d /etc/nginx/conf.d RUN mkdir /etc/nginx/cert COPY ./cert /etc/nginx/cert COPY ./www /usr/share/nginx/html EXPOSE 80
在本地的conf.d文件夹内内创建名为default.conf的文件,内容如下:
server <span class="token punctuation">{<!-- --></span> listen <span class="token number">443</span> ssl<span class="token punctuation">;</span> # 一定要写ssl server_name xxx<span class="token punctuation">.</span>com<span class="token punctuation">;</span> # 你的域名 root html<span class="token punctuation">;</span> # 前端页面的根目录 index index<span class="token punctuation">.</span>html index<span class="token punctuation">.</span>htm<span class="token punctuation">;</span> ssl_certificate cert<span class="token operator">/</span>xxx<span class="token punctuation">.</span>pem<span class="token punctuation">;</span> # 证书文件名 ssl_certificate_key cert<span class="token operator">/</span>xxx<span class="token punctuation">.</span>key<span class="token punctuation">;</span> # 密钥文件名 ssl_session_timeout <span class="token number">5</span>m<span class="token punctuation">;</span> ssl_ciphers <span class="token constant">ECDHE</span><span class="token operator">-</span><span class="token constant">RSA</span><span class="token operator">-</span><span class="token constant">AES128</span><span class="token operator">-</span><span class="token constant">GCM</span><span class="token operator">-</span><span class="token constant">SHA256</span><span class="token punctuation">:</span><span class="token constant">ECDHE</span><span class="token punctuation">:</span><span class="token constant">ECDH</span><span class="token punctuation">:</span><span class="token constant">AES</span><span class="token punctuation">:</span><span class="token constant">HIGH</span><span class="token punctuation">:</span><span class="token operator">!</span><span class="token constant">NULL</span><span class="token punctuation">:</span><span class="token operator">!</span>aNULL<span class="token punctuation">:</span><span class="token operator">!</span><span class="token constant">MD5</span><span class="token punctuation">:</span><span class="token operator">!</span><span class="token constant">ADH</span><span class="token punctuation">:</span><span class="token operator">!</span><span class="token constant">RC4</span><span class="token punctuation">;</span> ssl_protocols TLSv1 TLSv1<span class="token punctuation">.</span><span class="token number">1</span> TLSv1<span class="token punctuation">.</span><span class="token number">2</span><span class="token punctuation">;</span> ssl_prefer_server_ciphers on<span class="token punctuation">;</span> location <span class="token operator">/</span> <span class="token punctuation">{<!-- --></span> proxy_pass http<span class="token punctuation">:</span><span class="token operator">/</span><span class="token operator">/</span>xx<span class="token punctuation">.</span>xx<span class="token punctuation">.</span>xx<span class="token punctuation">.</span>xx<span class="token punctuation">:</span>xx<span class="token punctuation">;</span> # egg项目的地址<span class="token punctuation">,</span>即使你的egg是在同一台服务器上运行的,这里也千万不要写<span class="token number">127.0</span><span class="token number">.0</span><span class="token number">.1</span><span class="token punctuation">,</span>因为本次nginx是使用docker部署的,相当于部署在另一台服务器上。所以这里应该填写服务器的公网ip index index<span class="token punctuation">.</span>html index<span class="token punctuation">.</span>htm<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> server <span class="token punctuation">{<!-- --></span> listen <span class="token number">80</span><span class="token punctuation">;</span> server_name xxx<span class="token punctuation">.</span>com<span class="token punctuation">;</span># 你的域名 rewrite <span class="token operator">^</span><span class="token punctuation">(</span><span class="token punctuation">.</span><span class="token operator">*</span><span class="token punctuation">)</span>$ https<span class="token punctuation">:</span><span class="token operator">/</span><span class="token operator">/</span>$host$<span class="token number">1</span> permanent<span class="token punctuation">;</span> #将 <span class="token punctuation">}</span>server <span class="token punctuation">{<!-- --></span> listen <span class="token number">443</span> ssl<span class="token punctuation">;</span> # 一定要写ssl server_name xxx<span class="token punctuation">.</span>com<span class="token punctuation">;</span> # 你的域名 root html<span class="token punctuation">;</span> # 前端页面的根目录 index index<span class="token punctuation">.</span>html index<span class="token punctuation">.</span>htm<span class="token punctuation">;</span> ssl_certificate cert<span class="token operator">/</span>xxx<span class="token punctuation">.</span>pem<span class="token punctuation">;</span> # 证书文件名 ssl_certificate_key cert<span class="token operator">/</span>xxx<span class="token punctuation">.</span>key<span class="token punctuation">;</span> # 密钥文件名 ssl_session_timeout <span class="token number">5</span>m<span class="token punctuation">;</span> ssl_ciphers <span class="token constant">ECDHE</span><span class="token operator">-</span><span class="token constant">RSA</span><span class="token operator">-</span><span class="token constant">AES128</span><span class="token operator">-</span><span class="token constant">GCM</span><span class="token operator">-</span><span class="token constant">SHA256</span><span class="token punctuation">:</span><span class="token constant">ECDHE</span><span class="token punctuation">:</span><span class="token constant">ECDH</span><span class="token punctuation">:</span><span class="token constant">AES</span><span class="token punctuation">:</span><span class="token constant">HIGH</span><span class="token punctuation">:</span><span class="token operator">!</span><span class="token constant">NULL</span><span class="token punctuation">:</span><span class="token operator">!</span>aNULL<span class="token punctuation">:</span><span class="token operator">!</span><span class="token constant">MD5</span><span class="token punctuation">:</span><span class="token operator">!</span><span class="token constant">ADH</span><span class="token punctuation">:</span><span class="token operator">!</span><span class="token constant">RC4</span><span class="token punctuation">;</span> ssl_protocols TLSv1 TLSv1<span class="token punctuation">.</span><span class="token number">1</span> TLSv1<span class="token punctuation">.</span><span class="token number">2</span><span class="token punctuation">;</span> ssl_prefer_server_ciphers on<span class="token punctuation">;</span> location <span class="token operator">/</span> <span class="token punctuation">{<!-- --></span> proxy_pass http<span class="token punctuation">:</span><span class="token operator">/</span><span class="token operator">/</span>xx<span class="token punctuation">.</span>xx<span class="token punctuation">.</span>xx<span class="token punctuation">.</span>xx<span class="token punctuation">:</span>xx<span class="token punctuation">;</span> # egg项目的地址<span class="token punctuation">,</span>即使你的egg是在同一台服务器上运行的,这里也千万不要写<span class="token number">127.0</span><span class="token number">.0</span><span class="token number">.1</span><span class="token punctuation">,</span>因为本次nginx是使用docker部署的,相当于部署在另一台服务器上。所以这里应该填写服务器的公网ip index index<span class="token punctuation">.</span>html index<span class="token punctuation">.</span>htm<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> server <span class="token punctuation">{<!-- --></span> listen <span class="token number">80</span><span class="token punctuation">;</span> server_name xxx<span class="token punctuation">.</span>com<span class="token punctuation">;</span># 你的域名 rewrite <span class="token operator">^</span><span class="token punctuation">(</span><span class="token punctuation">.</span><span class="token operator">*</span><span class="token punctuation">)</span>$ https<span class="token punctuation">:</span><span class="token operator">/</span><span class="token operator">/</span>$host$<span class="token number">1</span> permanent<span class="token punctuation">;</span> #将 <span class="token punctuation">}</span>server { listen 443 ssl; # 一定要写ssl server_name xxx.com; # 你的域名 root html; # 前端页面的根目录 index index.html index.htm; ssl_certificate cert/xxx.pem; # 证书文件名 ssl_certificate_key cert/xxx.key; # 密钥文件名 ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { proxy_pass http://xx.xx.xx.xx:xx; # egg项目的地址,即使你的egg是在同一台服务器上运行的,这里也千万不要写127.0.0.1,因为本次nginx是使用docker部署的,相当于部署在另一台服务器上。所以这里应该填写服务器的公网ip index index.html index.htm; } } server { listen 80; server_name xxx.com;# 你的域名 rewrite ^(.*)$ https://$host$1 permanent; #将 }
egg这边也需要做一点配置。
exports<span class="token punctuation">.</span>proxy <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span>exports<span class="token punctuation">.</span>proxy <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span>exports.proxy = true;
千万别忘了这一步,写出来仅做提醒。
cd到nginx_ssl目录下,执行下面的指令。
docker build -t egg_nginx_ssl .
构建镜像
docker run -p 443:443 80:80 egg_nginx_ssl
创建并运行此镜像的容器
或者 docker run -p 443:443 80:80 -d egg_nginx_ssl
加上-d 在后台运行容器
如果读者遇到任何问题都可以留言告诉我,我看到会第一时间回复。
另外,如果你有多台服务器,想做负载均衡的话可以参考下这篇文章。
备案:
如果新买的域名第二天发现访问不了了,出现连接被重置之类的问题那多半是备案的问题,阿里云买的域名到这个网站申请备案即可。
配置SSL https://help.aliyun.com/document_detail/98728.html?spm=a2c4g.11186623.2.12.5657625a91Qdju#concept-n45-21x-yfb
反向代理 https://blog.csdn.net/weixin_44563906/article/details/98223512
原文链接:https://blog.csdn.net/ajh99990/article/details/103866063
© 版权声明
声明📢本站内容均来自互联网,归原创作者所有,如有侵权必删除。
本站文章皆由CC-4.0协议发布,如无来源则为原创,转载请注明出处。
THE END