注意事项
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 开发进阶之路
努力吧,不死终会出头!