• Docker 【Nginx集群部署】


    目录

    1. nginx前置操作

    2. 自定义容器

    3. nginx常用命令

    4. Error

    4.1 502(无响应网关/代理)

    4.2 404(找不到对应页面)

    4.3 400(异常请求)

    4.4 响应超时问题

    5. 完整版本Nginx配置文件


    1. nginx前置操作

       1. 下载拉取nginx镜像 

    docker pull nginx

       2. 使用nginx镜像创建容器 X X X (不建议使用)

    docker run -itd --name nginx -p 8080:80 nginx:latest

       3. 无法使用vim指令,所以需要进行目录挂载

    1. docker run -itd \
    2. --name nginx01 \
    3. -v /home/nginx/conf.d:/etc/nginx/conf.d \
    4. -v /home/nginx/html:/etc/nginx/html \
    5. -v /home/nginx/log:/usr/log/nginx \
    6. -p 8080:80 \
    7. nginx

    第一个-v:挂载nginx的主配置文件,以方便在宿主机上直接修改容器的配置文件

    第二个-v:挂载静态页面目录

    第三个-v:挂载容器内nginx的日志,容器运行起来之后,可以直接在宿主机的这个目录中查看 nginx日志

       4. 进入容器内 

    docker exec -it nginx01 bash
    

    2. 自定义容器

    docker run -it --name spring01 --net mynet -p 8081:8080 spring:2.0
    

    3. nginx常用命令

    nginx -t # 检查配置文件

    nginx -s reload # 重读配置文件

    service nginx start # 启动

    service nginx stop # 停止

    service nginx restart # 重新启动

    service nginx reload # 重新加载配置,平滑启动

    service nginx status # 查看状态 

    4. Error

      4.1 502(无响应网关/代理)

    1. upstream tomcatList {
    2. server 172.18.0.5:8080 weight=1;
    3. server 172.18.0.3:8080 weight=2;
    4. server 172.18.0.4:8080 weight=2;
    5. }
    • 端口或者协议不一致 

      4.2 404(找不到对应页面)

    1. location ~^/api/ {
    2. proxy_pass http://tomcatList;
    3. proxy_redirect default;
    4. }
    • 路径映射存在问题 
      • ​​​​​​​proxy_pass后面的路径以/结尾
      • #rewrite ^/api/(.*)$ /$1 break; 重写规则

      4.3 400(异常请求)

    1. java.lang.IllegalArgumentException: The character [_] is never valid in a domain
    2. name.
    3. at
    4. org.apache.tomcat.util.http.parser.HttpParser$DomainParseState.next(HttpParser.j
    5. ava:974) ~[tomcat-embed-core-9.0.41.jar!/:9.0.41]
    6. at
    7. org.apache.tomcat.util.http.parser.HttpParser.readHostDomainName(HttpParser.java
    8. :870) ~[tomcat-embed-core-9.0.41.jar!/:9.0.41]
    9. at org.apache.tomcat.util.http.parser.Host.parse(Host.java:71) ~[tomcatembed-core-9.0.41.jar!/:9.0.41]
    10. at org.apache.tomcat.util.http.parser.Host.parse(Host.java:45) ~[tomcatembed-core-9.0.41.jar!/:9.0.41]
    11. at
    12. org.apache.coyote.AbstractProcessor.parseHost(AbstractProcessor.java:298) ~
    13. [tomcat-embed-core-9.0.41.jar!/:9.0.41]
    14. at
    15. org.apache.coyote.http11.Http11Processor.prepareRequest(Http11Processor.java:797
    16. ) [tomcat-embed-core-9.0.41.jar!/:9.0.41]
    17. at
    18. org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:350)
    19. [tomcat-embed-core-9.0.41.jar!/:9.0.41]
    20. at
    21. org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    22. [tomcat-embed-core-9.0.41.jar!/:9.0.41]
    23. at
    24. org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.ja
    25. va:888) [tomcat-embed-core-9.0.41.jar!/:9.0.41]
    26. at
    27. org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:15
    28. 97) [tomcat-embed-core-9.0.41.jar!/:9.0.41]
    29. at
    30. org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    31. [tomcat-embed-core-9.0.41.jar!/:9.0.41]
    32. at
    33. java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    34. [na:1.8.0_221]
    35. at
    36. java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    37. [na:1.8.0_221]
    38. at
    39. org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:6
    40. 1) [tomcat-embed-core-9.0.41.jar!/:9.0.41]
    41. at java.lang.Thread.run(Thread.java:748) [na:1.8.0_221]
    •  springboot无法识别负载均衡中的_符号
    1. upstream tomcatList {
    2. server 172.18.0.5:8081 weight=1;
    3. server 172.18.0.3:8081 weight=2;
    4. server 172.18.0.4:8081 weight=2;
    5. }

      4.4 响应超时问题

    • 检查网段是否互通 
    docker network connect mynet nginx
    

    5. 完整版本Nginx配置文件

    1. #服务器的集群
    2. upstream tomcatList { #服务器集群名字
    3. server 172.18.0.5:8081 weight=1; #服务器1 weight是权重的意思,权重越大,分配的概率越大
    4. server 172.18.0.3:8081 weight=2; #服务器2 weight是权重的意思,权重越大,分配的概率越大
    5. server 172.18.0.4:8081 weight=2; #服务器3 weight是权重的意思,权重越大,分配的概率越大
    6. }
    7. server {
    8. listen 80;
    9. server_name www.zking.com;
    10. location / {
    11. root /etc/nginx/html/;
    12. index index.html index.htm;
    13. }
    14. error_page 500 502 503 504 /50x.html;
    15. location = /50x.html {
    16. root /usr/share/nginx/html;
    17. }
    18. location ~^/api/ {
    19. rewrite ^/api/(.*)$ /$1 break;
    20. proxy_pass http://tomcatList;
    21. proxy_redirect default;
    22. }
    23. }
  • 相关阅读:
    Docker的常用命令
    (续)SSM整合之spring笔记(AOP 基于注解的AOP之各种通知使用,环绕通知,切面的优先级)(P103—P104)
    代码随想录Day25 回溯算法 LeetCode T51 N皇后问题
    ArcGIS直连PostgreSQL(Windows篇)
    Flask 源码分析总结:Context 上下文原理
    【漏洞复现】大华DSS视频管理系统信息泄露漏洞
    两步搭建云成本管理指标中台
    K8s部署轻量级日志收集系统EFK(elasticsearch + filebeat + kibana)
    00_Linux
    MyISAM和innoDB两种引擎的对比
  • 原文地址:https://blog.csdn.net/m0_63300795/article/details/127914793