前置说明

  • nginx 为 openresty
  • 根据openresty的镜像,做了稍稍的修改
    • 自定义了默认页面跟404页面
    • tannnn/openresty:1.19.9.1

docker-compose

https://gitee.com/etn/docker-compose/blob/tn/tn/common/docker-compose-openresty.yml

  1. # docker-compose -f docker-compose-openresty.yml -p openresty up -d
  2. version: "3"
  3. services:
  4. openresty:
  5. image: tannnn/openresty:1.19.9.1
  6. container_name: nginx # 容器名为'nginx'
  7. privileged: true
  8. # 使用网络
  9. network_mode: "host"
  10. restart: unless-stopped # 指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器
  11. volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录
  12. # - "./openresty/conf/nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf" # nginx 主配置文件(默认:include /etc/nginx/conf.d/*.conf;)(如果要自定义请打开注释)
  13. # - "./openresty/html:/usr/local/openresty/nginx/html" # 默认页面 (如果要自定义请打开注释)
  14. - "./openresty/logs:/usr/local/openresty/nginx/logs" # 日志
  15. - "./openresty/pages:/usr/local/openresty/nginx/html/pages" # 自己的前端页面放进容器内的html/pags下
  16. - "./openresty/conf/conf.d:/etc/nginx/conf.d" # nginx配置文件群 (如果要自定义请打开注释)
  17. environment: # 设置环境变量,相当于docker run命令中的-e
  18. TZ: Asia/Shanghai
  19. LANG: en_US.UTF-8
  20. ports: # 映射端口
  21. - "80:80"

注意

代理容器内其他容器的访问地址时的网络问题

以 portainer 为例

  1. 我开始使用的是默认网络。导致代理的时候不能写loaclhost/127.0.0.1 必须写容器内容IP(172.x.x.x)

    容器的重启或者删除了重建,可能导致IP变动,这样做会导致nginx的配置变得不可靠

  1. location / {
  2. proxy_pass http://172.18.0.1:9000/;
  3. proxy_set_header Via "nginx";
  4. proxy_set_header Host $host;
  5. proxy_set_header X-Real-IP $remote_addr;
  6. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  7. proxy_set_header X-Forwarded-Port $server_port;
  8. }
  1. 在 nginx的compose中加入 network_mode: "host"就可以规避上述问题
    1. location /portainer/ {
    2. proxy_pass http://localhost:9000/;
    3. proxy_set_header Via "nginx";
    4. proxy_set_header Host $host;
    5. proxy_set_header X-Real-IP $remote_addr;
    6. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    7. proxy_set_header X-Forwarded-Port $server_port;
    8. }