环境:docker + 腾讯云轻量应用服务器+腾讯云域名
准备:首先需要去腾讯云域名下载ssl证书文件,创建安全组开放443端口,服务器防火墙开放443端口;
如果上面操作都做好了,在nginx也配置了,但是还是有问题,那么就是你的nginx没有映射443端口,博主这里就是踩了这个坑,话不多说,进入正题;
1.先修改nginx两个配置文件,nginx.conf和default.conf
nginx.conf文件
user nginx;
#开启的线程数,一般跟逻辑CPU核数一致
worker_processes auto;
#定位全局错误日志文件,级别以notice显示,还有debug,info,warn,error,crit模式,debug输出最多,crir输出最少,根据实际环境而定
error_log /var/log/nginx/error.log notice;
#指定进程id的存储文件位置
pid /var/run/nginx.pid;
events {
#定义每个进程的最大连接数,受系统进程的最大打开文件数量限制。
worker_connections 1024;
}
http {
#填写您的证书文件名称,例如:cloud.tencent.com_bundle.crt
ssl_certificate cloud.tencent.com_bundle.crt;
#填写您的私钥文件名称,例如:cloud.tencent.com.key
ssl_certificate_key cloud.tencent.com.key;
server {
listen 443 ssl;
server_tokens off;
keepalive_timeout 5;
root /usr/share/nginx/html; #填写您的网站根目录
index index.php index.html;
server_name www.cloud.tencent.com; #填写您的证书绑定的域名,例如:www.cloud.tencent.com
ssl_certificate cloud.tencent.com_bundle.crt; #填写您的证书文件名称,例如:cloud.tencent.com_bundle.crt
ssl_certificate_key cloud.tencent.com.key; #填写您的私钥文件名称,例如:cloud.tencent.com.key
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 可参考此 SSL 协议进行配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; #可按照此加密套件配置,写法遵循 openssl 标准
ssl_prefer_server_ciphers on;
location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
client_max_body_size 20m;
fastcgi_connect_timeout 30s;
fastcgi_send_timeout 30s;
fastcgi_read_timeout 30s;
fastcgi_intercept_errors on;
}
}
server {
listen 80;
#请填写绑定证书的域名
server_name www.cloud.tencent.com;
#把http的域名请求转成https
return 301 https://$host$request_uri;
}
}
default.conf文件
server {
#侦听80端口,如果强制所有的访问都必须是HTTPs的,这行需要注销掉
#listen 80;
listen 443 ssl;
server_name cloud.tencent.com; #域名
# 增加ssl
#ssl on; #如果强制HTTPs访问,这行要打开
ssl_certificate /etc/nginx/conf.d/ssl/cloud.tencent.com_bundle.crt; #证书文件路径
ssl_certificate_key /etc/nginx/conf.d/ssl/cloud.tencent.com.key; #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;
}
#重定向错误页面到 /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
2.重新构建容器并启动
这里一定要把映射端口443加进去,不然nginx无法监听。
docker run \
-p 443:443 \
-p 80:80 \
--name nginx \
-v /mydata/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /mydata/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /mydata/nginx/log:/var/log/nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-d nginx:latest
参数说明
-name 给你启动的容器起个名字,以后可以使用这个名字启动或者停止容器
-p 映射端口,将docker宿主机的80端口和容器的80端口进行绑定
-v 挂载文件用的,
-m 200m 分配内存空间
-e TZ=Asia/Shanghai 设置时区
第一个-v 表示将你本地的nginx.conf覆盖你要起启动的容器的nginx.conf文件,
第二个-v 表示将日志文件进行挂载,就是把nginx服务器的日志写到你docker宿主机的/home/docker-nginx/log/下面
第三个-v 表示的和第一个-v意思一样的。
-d 表示启动的是哪个镜像
到这里再去访问域名,应该就会转跳到对应的网页;
如果这里还不行,先检查一下准备内是否都配置好了,如果还是不行,欢迎沟通。