文章目录
1 容器运行
-
最新版nginx适配,直接拉取镜像
docker pull nginx
-
运行容器
docker run \ --name=nginx-xc \ -v Users/gaogzhen/devTools/java/projects/full/xuecheng/xc-ui-pc-static-portal:/usr/share/nginx/html \ -v /Users/gaogzhen/data/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /Users/gaogzhen/data/docker/nginx/logs:/var/log/nginx \ -p 80:80 \ -d nginx
Users/gaogzhen/devTools/java/projects/full/xuecheng/xc-ui-pc-static-portal
为我存放网站目录的路径,该为自己的nginx.conf
从随意运行的nginx容器中复制的;- 外部挂载目录或者文件需要自己创建
- 我这里只挂载了网站家目录,nginx配置文件,日志目录;nginx.conf中没加载 *.conf所以没挂载其他文件或者目录;
3 nginx常见报错
3.1 403 Forbidden
第一步:检查挂载目录及文件权限,没啥问题。
第二步:Nginx打开目录浏览功能,即在整个或者某个单独目录开启
# 整个虚拟主机目录开启
location / {
autoindex on;
# ....
}
3.2 404 connect() failed (111: Connection refused) while connecting to upstream
- 背景简介:docker运行nginx,前台首页登录需要通过后端网关端口63010获取图片验证码(本地部署),为解决跨域问题在nginx设置了代理。
报错如下图3.2-1所示:
2023/06/14 07:16:51 [error] 24#24: *4 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.1, server: www.51xuecheng.cn, request: "POST /api/checkcode/pic HTTP/1.1", upstream: "http://127.0.0.1:63010/checkcode/pic", host: "www.51xuecheng.cn", referrer: "http://www.51xuecheng.cn/sign.html?returnUrl=aHR0cDovL3d3dy41MXh1ZWNoZW5nLmNuL3JlZ2lzdGVyLmh0bWw="
-
错误原因:nginx配置的proxy_pass 代理服务器地址,docker 中nginx找不到,即nginx所在docker子网访问不到你所配置的目标服务ip地址
-
解决方案:把代理服务器(主机)地址设置为服务所在主机地址或者公网地址或者本机IP地址
ifconfig
ifconfig
可查看本地地址
-
nginx.config配置如下所示:
server { # ...省略 #api location /api/ { proxy_pass http://gatewayserver/; } } #后台网关 upstream gatewayserver{ server 192.168.0.103:63010 weight=10; }
-
proxy_pass htt://直接服务主机地址(或者备案域名或者本地ip地址或者upstream配置名称)
-
如果跟upstream配置名称的话,upstream中server里面的主机地址需要为公网ip或者本机ip,不能是localhost或者127.0.0.1,如果是
localhost或者127.0.0.1
相当于nginx访问nginx运行容器所在的docker子网主机ip地址了,我们的服务当然不存在。正常运行如下图3.2-2所示:
持续更新中……
-
结语
欢迎小伙伴一起学习交流,需要啥工具或者有啥问题随时联系我。
❓QQ:806797785
[1]mac nginx 403 Forbidden 问题解决[CP/OL]