mac 下 docker 本地部署若依分离版,nginx 反向代理无效问题解决

若依分离版本地 docker 部署,安装 nginx 容器 后将 ruoyi-ui(前端)打包放到 html 下,修改默认的 /conf.d/default.conf:

 server { listen 80; server_name localhost; charset utf-8; location / { root /usr/share/nginx/html/ruoyi-ui; try_files $uri $uri/ /index.html; index index.html index.htm; } location /prod-api/ { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://localhost:8080/; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }

try_files $uri $uri/ /index.html; 做了 vue 的静态访问映射,去除 .html 后缀。
/prod-api/ 对应正式站打包后台接口路径,/stage-api/ 对应测试站打包访问后台接口路径。这两者因为 vue 项目打包 代理器失效,所以需要通过 web 服务器反向代理来实现访问。

然后通过 http://localhost/prod-api/ 按照理论上来说,应该访问是 8080 端口服务。本地 nohup java -jar targets/ruoyi-admin.jar & 启动之后,8080 端口服务是存在的,但 /prod-api/ 并没有代理到后台的 8080 端口服务。

突然意识到 nginx 服务与我在本地环境启动的 8080 端口服务不在一台设备,或者更准确一点不在一个 ip 上,nginx 内的 8080 端口没有服务,所以提示报错,这恰好说明了 nginx 的反向代理是起作用的。

所以只需要修改代理服务的地址为本地环境,即宿主机的局域网 ip,就可以正常访问了。

可以通过设置->网络查看到当前的 ip 地址,也可以通过 ifconfig,eth0 inet 查看到。替换掉 localhost,再次重启 nginx,登录页正常显示了。

在通过 docker 安装了 php-fpm(php80)和 nginx 之后,配置 nginx 的 default.conf 文件增加一条 server 来解析 php 项目。

server { listen 80; server_name localhost; charset utf-8; location / { root /usr/share/nginx/html/carcar/public; # try_files $uri $uri/ /index.html; try_files $uri $uri/ /index.php?$query_string; index index.html index.htm index.php; } location ~ \.php$ { fastcgi_pass php80:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/html/carcar/public/$fastcgi_script_name; include fastcgi_params; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }

在尝试将 fastcgi_pass 设置为 http://docker.for.mac.host.internal:9000 时,启动报错:invalid host in upstream "http://docker.for.mac.host.internal:9001"。更换成本地地址 10.7.2.48 也是一样的错。

为什么之前使用 proxy_pass 还能识别,到了 fastcgi_pass 就不认识了?没办法,经过一端时间的查询,没有结果,但有了一个新的方法:docker --link,这个叫做容器互联

使用时需要链接的容器处于运行状态,这里就是 php-fpm 的容器名 php80,可以通过 : 后面增加一个别名。解析时,会把 php80 的网络并入 nginx,并通过修改 nginx 的 /etc/hosts,把容器名(或别名,如果有设置的话)php80 映射成 127.0.0.1,让 nginx 通过 php80:9000 访问 php-fpm。

docker run \ -p 80:80 \ --name nginx \ --restart=always \ --link php80 \ -v /Users/mac/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /Users/mac/docker/nginx/conf/conf.d:/etc/nginx/conf.d \ -v /Users/mac/docker/nginx/log:/var/log/nginx \ -v /Users/mac/docker/nginx/html:/usr/share/nginx/html \ -d nginx:latest

nginx 启动成功!在本地 /Users/mac/docker/nginx/html 地址下放一个 phpinfo.php 文件,查看一下当前的 php-fpm 信息。

原文链接:https://www.seasidecrab.com/server/1173.html

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享