1.检查服务器是否安装nginx,如果未安装,可参考我之前的文章
Linux系列~docker部署nginx_一夜白头催人泪-CSDN博客_docker 部署nginx1.新建docker-compose.yml文件version: '3.1'services: nginx: restart: always image: nginx container_name: nginx ports: - 80:80 volumes: - ./conf.d:/etc/nginx/conf.d - ./nginx.conf:/etc/nginx/nginx.conf - ./log:/v...https://blog.csdn.net/cxl0406/article/details/1202409102.新建目录用于存放nginx配置文件、证书文件:
mkdir /opt/docker/nginx/conf.d -p
mkdir /opt/docker/nginx/cert -p
nginx的ssl证书长这个样子,两个都要,中间打码的是自己分服务器域名
把文件放在 ..nginx/cert目录下
3.查看内网的ip,记录下来,等下写配置文件要用:
# linux查看内网ip
ifconfig
4.如果未映射挂载目录,可以使用命令查找nginx配置文件
# 查找nginx配置文件default.conf
# 这个在/etc/nginx/conf.d/default.conf
find / -name "default.conf"
# 查找nginx配置文件nginx.conf
# 这个在/etc/nginx/nginx.conf
find / -name "nginx.conf"
# 注:两者不在同一目录下。
5. 使用docker的cp命令把这两个配置文件复制到刚刚建好的目录下:
# 把docker内的default.conf复制到外部
docker cp nginx:/etc/nginx/conf.d/default.conf /opt/docker/nginx/conf.d/default.conf
# 把docker内的nginx.conf复制到外部
docker cp nginx:/etc/nginx/nginx.conf /opt/docker/nginx/conf.d/nginx.conf
6.检查nginx容器是否正在运行
# 查看正在运行的容器
docker ps
# 查看全部容器,包括没有启动的容器
# 如果上面的命令出现的列表没有nginx,使用这个命令
docker ps -a
# 如果确定启动失败了,查看日志定位失败的原因
docker logs nginx
7.当nginx启动成功后,我们只需要修改配置文件,就可以实现多个域名和https访问的需求啦。
nginx的配置文件有两个,nginx.conf
和default.conf
。
点开看nginx.conf
的话,会发现里面引入了default.conf
的内容,也就是说这是一个文件分成两个文件来写。
我们只需要修改default.conf
的内容即可达到我们的目的。
修改default.conf
的内容为如下,需根据你的情况做出改变:
server {
listen 80; #侦听80端口
listen 443 ssl; #侦听443端口,用于SSL
server_name pnhjhj.com www.pnhjhj.com; # 自己的域名
# 注意证书文件名字和位置,是从/etc/nginx/下开始算起的
ssl_certificate 1_pnhjhj.com_bundle.crt;
ssl_certificate_key 2_pnhjhj.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
client_max_body_size 1024m;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 这里写的是我的腾讯云内网地址,不知道为啥,不能用127.0.0.1...
proxy_pass http://xx.xx.xx.xx:8090;
}
}
这上面便配好了一个域名的https和http访问,假如你想多配一个域名,拿我上面的blog.tandk.com
和mail.tandk.com
来举例,每个域名要加多一个server:
server {
listen 80; #侦听80端口
listen 443 ssl; #侦听443端口,用于SSL
server_name blog.pnhjhj.com; # 自己的域名
# 注意证书文件位置,是从/etc/nginx/下开始算起的
ssl_certificate 1_blog.pnhjhj.com_bundle.crt;
ssl_certificate_key 2_blog.pnhjhj.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
client_max_body_size 1024m;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 这里写的是我的腾讯云内网地址,不知道为啥,不能用127.0.0.1...
proxy_pass http://xx.xx.xx.xx:8080;
}
}
server {
listen 80; #侦听80端口
listen 443 ssl; #侦听443端口,用于SSL
server_name mail.pnhjhj.com; # 自己的域名
# 注意证书文件位置,是从/etc/nginx/下开始算起的
ssl_certificate 1_mail.pnhjhj.com_bundle.crt;
ssl_certificate_key 2_mail.pnhjhj.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
client_max_body_size 1024m;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 这里写的是我的腾讯云内网地址,不知道为啥,不能用127.0.0.1...
proxy_pass http://xx.xx.xx.xx:8181;
}
}
配置完毕后,保存、停止容器再重启:
# 停止nginx
docker stop nginx
# 启动容器
docker start nginx
# 查看是否启动成功
docker ps
8.打开浏览器,分别用http和https访问你配置的域名,来确认是否成功。
上面的配置文件会发现,两个server,随着域名的不同,ssl证书的名字也不一样了。
对的,对于每一个不同的子域名,我都需要去申请一个ssl证书。
对于mail.pnhjhj.com
,我需要去申请一个ssl证书,对于blog.pnhjhj.com
,我还需要去申请一个新的ssl证书。
那么能不能申请一个通配的证书去适配一个主域名下的所有子域名呢。
有的,花钱。
别的平台我不太清楚,腾讯云有那种证书,比如你可以申请一个*.pnhjhj.com
的证书,那样你所有子域名就都能用这个证书了。