前言
《CentOS7设置nginx开机自启动》一文中学习了在CentOS7中安装配置Nginx的方法,本文学习一下使用Docker安装配置Nginx的方法。
前置条件是安装配置好了docker环境,安装方法参考《Docker入门》。已知docker宿主机IP为8.136.13.58。
安装Nginx
1、登录dockerhub查看需要的Nginx - Docker Official Images。
2、下载nginx镜像(以1.17.7为例)
1 | docker pull nginx:1.17.7 |
3、创建nginx挂载目录
1 | mkdir -p /opt/nginx/{conf,html,ssl,work,log} |
4、拷贝nginx镜像中的配置到宿主机
1 | docker run --name tmp-nginx -d nginx:1.17.7 |
5、启动nginx服务
1 | docker run --name vk-nginx -d --privileged=true \ |
以上命令:
- 命名容器为vk-nginx,后台运行
- 映射宿主机80、443端口到容器的80、443端口
- 挂载宿主机文件 /opt/nginx/conf/nginx.conf 到容器文件 /etc/nginx/nginx.conf
- 挂载宿主机目录 /opt/nginx/conf/conf.d 到容器目录 /etc/nginx/conf.d
- 挂载宿主机目录 /opt/nginx/ssl 到容器目录 /etc/nginx/ssl
- 挂载宿主机目录 /opt/nginx/html 到容器目录 /usr/share/nginx/html
- 挂载宿主机目录 /opt/nginx/work 到容器目录 /usr/share/nginx/work
- 挂载宿主机目录 /opt/nginx/log 到容器目录 /var/nginx/log
- 挂载宿主机目录 /etc/localtime 到容器目录 /etc/localtime
更多启动命令参数可以参考How to use this image。
6、验证安装
(1)docker ps
,nginx启动正常的话就可以看到vk-nginx容器。
(2)curl localhost
,可以看到html文本。
(3)浏览器访问 http://8.136.13.58 ,可以看到Welcome to nginx!
常用命令
测试配置
1 | docker exec -it vk-nginx nginx -t |
重新加载配置
1 | docker exec -it vk-nginx nginx -s reload |
重启nginx
1 | docker restart vk-nginx |
配置Web服务
以配置 www.voidking.com 域名的Web服务为例,参考《Hexo启用https加密连接》和《Hexo加速访问》。
1、下载博客项目
1 | mkdir /opt/nginx/work |
2、上传证书
上传 1_www.voidking.com_bundle.crt 和 2_www.voidking.com.key 到/opt/nginx/conf.d/ssl目录
3、创建配置文件
1 | cd /opt/nginx/conf/conf.d |
内容为:
1 | server { |
4、重启nginx
1 | docker restart vk-nginx |
5、查看是否启动成功
1 | docker ps |
至此, www.voidking.com 域名配置完成,在dnspod添加好解析即可访问,nice。
配置七牛图床反向代理
七牛图床,http访问不收费,https收费。
为了给图床省钱,使用nginx配置了一层代理,添加了域名 cdn.voidking.com.conf 的配置:
1 | server { |
重定向问题排查
有一天,通过chrome浏览器访问 http://8.136.13.58 ,发现报错 403
仔细看了下地址栏,原来是 http 自动转到了 https。本地curl验证一下是否是chrome的问题:
1 | curl http://8.136.13.58 |
由上图可以看出,确实是nginx对请求进行了重定向。
那么,为什么通过ip访问会进行重定向?在 default.conf 的配置中,没有进行修改,没有配置任何重定向!
这样看来,问题只能出在 www.voidking.com.conf 和 cdn.voidking.com.conf 这两个文件。
删除 www.voidking.com.conf ,重启nginx,问题依然存在。
删除 cdn.voidking.com.conf ,重启nginx,问题解决!
那么,问题就肯定出在 cdn.voidking.com.conf 这个文件上。从配置上看,没有任何问题,但是为什么会导致IP访问nginx被重定向呢?
找了很多资料,没有找到答案。后来灵光一现:cdn.voidking.com.conf 比 default.conf 优先级更高!
因为c开头的配置文件要比d开头的配置文件先加载,而 default.conf 并没有特殊的优先级配置。所以,最终结果就是 cdn.voidking.com.conf 才是真正意义上的 default !
解决方案:重命名 default.conf 为 0.default.conf 。