docker上 nginx + ssl + http2

注意事项

1.云服务器的一定要开启443端口,我就是以为不会用,然后就没开,折腾好久!!!
2.openssl 版本>1.0.2 就ok
3.docker  nginx 镜像 

ssl证书生成

  • 已购买备案域名的,可以搜索阿里云免费SSL证书申请教程,自行获取免费证书
  • 无上述条件的可自行生成,证书生成,rsa长度一定要用2048,不然启动报错key too many
sudo openssl req \
  -x509 \
  -nodes \
  -days 365 \
  -newkey rsa:2048 \
  -keyout server.key \
  -out server.crt
  • 执行后,命令行会跳出一堆问题要你回答,比如你在哪个国家、你的 Email ,这些随便填等等。
  • 需要注意的是这个,正常应该填个域名
Common Name (e.g. server FQDN or YOUR name) []:xxx.xxx.com
  • 然后会生成两文件server.key server.crt, 放到docker目录共享的/root/local/nginx/ssl 目录下,一定要记得挂载到容器内

准备docker-compose.yaml文件

version: '3.7'
services:
  nginx80:
    image: nginx
    container_name: nginx80
    restart: always
    ports:
    - "80:80"
    - "443:443"
    environment:
    - TZ=Asia/Shanghai
    volumes:
    - /root/local/nginx/html:/usr/share/nginx/html
    - /root/local/nginx/ssl:/ssl/:rw
    - /root/local/nginx/html:/usr/share/nginx/html/image
    - /root/local/nginx/nginx80.conf:/etc/nginx/nginx.conf
    - /root/local/nginx/logs:/var/log/nginx
    networks:
    - my-net #自己配置的网卡
networks:
  my-net:
    external: true

nginx.conf 配置文件

user  nginx;
#启动进程设置成和CPU数量相等
worker_processes  1;
#全局错误日志及PID文件的位置
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
	#单个后台work进程最大并发数设置为1024
    worker_connections  1024;
}

http {
	#设定mime类型
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
	#日志打印格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
	#日志目录
    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;
	#保持连接的最大时长(秒)
    keepalive_timeout  65;
    #上传文件size限制
	#client_max_body_size  100M;
	#前端项目走压缩的时候打开
    #gzip  on;

    upstream xxxx {
    	#docker 同网络下其他服务ID
        server xxxxID:8080;
    }

    server {
    	#443 加上ssl 这里可以监听两个端口
        listen       80;
        listen       443 ssl http2;
        server_name  localhost; #域名

        #ssl on;    #如果强制HTTPs访问,这行要打开
        #ssl证书
        ssl_certificate /ssl/server.crt;
        ssl_certificate_key /ssl/server_unsecure.key;

        ssl_session_cache  shared:SSL:1m;
        ssl_session_timeout 5m;

        # 指定密码为openssl支持的格式
        ssl_protocols SSLv2 SSLv3 TLSv1.2;

        ssl_ciphers HIGH:!aNULL:!MD5; # 密码加密方式
        ssl_prefer_server_ciphers on;  # 依赖SSLv3和TLSv1协议的服务器密码将优先于客户端密码
        
		#首页目录
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
		
		... 接口转发
}

启动docker容器,就可以访问了

后话

  • 如果需要http访问自动转为https的,只需要这样配置即可
server {
        listen       80;   #记得移除原80的监听server
        server_name  localhost;

        rewrite ^(.*)$ https://$host$1 permanent;
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
    }

以上就是本章的全部内容了。

上一篇:http协议之三次握手、四次挥手解析
下一篇:java 开发进阶之路

努力吧,不死终会出头!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值