• Nginx 四层和七层代理区别、配置


    四层:通过报文中的目标地址和端口,加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器,使用tcp、udp协议。

    七层:"内容交换",通过报文中真正有意义的应用层内容,加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器,使用http协议。

    四层:和http段平级

    stream {
      server {
        listen 18080;
        proxy_pass server_name;
      }
          upstream server_name {
                server_1   10.0.0.10:8080 weight=2;
                server_2   10.0.0.11:8080 weight=2;
          }          
    }

     

    http{

    ..............................................................

    }

    1. cat > /etc/nginx/nginx.conf << "EOF"
    2. user nginx;
    3. worker_processes auto;
    4. error_log /var/log/nginx/error.log;
    5. pid /run/nginx.pid;
    6. include /usr/share/nginx/modules/*.conf;
    7. events {
    8. worker_connections 1024;
    9. }
    10. # 四层负载均衡,为两台Master apiserver组件提供负载均衡
    11. stream {
    12. log_format main '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';
    13. access_log /var/log/nginx/k8s-access.log main;
    14. upstream k8s-apiserver {
    15. server 192.168.31.71:6443; # Master1 APISERVER IP:PORT
    16. server 192.168.31.72:6443; # Master2 APISERVER IP:PORT
    17. }
    18. server {
    19. listen 16443; # 由于nginx与master节点复用,这个监听端口不能是6443,否则会冲突
    20. proxy_pass k8s-apiserver;
    21. }
    22. }
    23. http {
    24. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
    25. '$status $body_bytes_sent "$http_referer" '
    26. '"$http_user_agent" "$http_x_forwarded_for"';
    27. access_log /var/log/nginx/access.log main;
    28. sendfile on;
    29. tcp_nopush on;
    30. tcp_nodelay on;
    31. keepalive_timeout 65;
    32. types_hash_max_size 2048;
    33. include /etc/nginx/mime.types;
    34. default_type application/octet-stream;
    35. server {
    36. listen 80 default_server;
    37. server_name _;
    38. location / {
    39. }
    40. }
    41. }
    42. EOF

     七层:在http段内部

    http{
    
    upstream appserver {
          server 10.0.0.10:8080 weight=2;
          server 10.0.0.11:8080 weight=2;
    }
    
    server {
        listen       80;
        server_name  localhost;
        location / {
           proxy_pass http://appserver;
        }
    } 
    

     Nginx配置文件结构 


    -Nginx配置文件分为三个块(全局块、events块、http块)和四大部分(全局设置部分、主机设置部分、上游服务器设置部分、url匹配设置部分)

    -全局设置部分(main):全局设置的一部分可以影响其他块的设置
    -主机设置部分(server):指定nginx代理服务器的主机域名、ip地址和端口
    -上游服务器设置部分(upstream):设置多个后端服务器的地址,配置每个服务器权重,从而实现后端服务器的负载均衡
    -url匹配设置部分(location):对于客户端请求的url部分路径

    (1)四部分结构关系图

    server继承main,location继承server,upstream既不继承也不会被继承

    -main层:主要配置Nginx服务器的整体配置指令;
    -events层:主要影响Nginx服务器与用户的网络连接
    -http层:主要是Nginx服务器中的代理、缓存和日志定义等大多数的功能和第三方模块的配置;
    -server层:Nginx服务器进行代理的核心层,利用虚拟主机的技术可以对多个网址进行代理,server也可以有多个;
    -location层:对请求的特定url进行匹配,转发地址定向、数据缓存和应答控制等功能,许多第三方模块配置也在location中;

    (2)配置文件内容

    1. // 本文件中nginx安装路径为:/usr/local/nginx
    2. //全局块
    3. //配置用户或者组,默认nobody nobody
    4. user nobody nobody;
    5. //配置nginx的进程数,默认为1,推荐设置为cpu核心数
    6. worker_processes 1;
    7. // //全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
    8. err_log /usr/local/nginx/logs/error.log info;
    9. // 进程PID存放路径
    10. pid /usr/local/logs/nginx.pid;
    11. //events块
    12. events{
    13. //设置网路连接序列化,防止惊群现象发生,默认为on
    14. accept_mutex on;
    15. //设置一个进程是否同时接受多个网络连接,默认为off
    16. multi_accept off;
    17. //事件驱动模块,默认为epoll,可选择select,poll,epoll
    18. use epoll;
    19. //标识单个worker进程的最大并发数(连接数),默认为512(最大连接数=连接数*进程数)
    20. worker_connections 1024;
    21. }
    22. //http块
    23. http{
    24. //文件拓展名与文件类型的对应映射表
    25. include /usr/local/nginx/conf/mime.types;
    26. //配置nginx响应前端请求默认的MIME类型,默认default_type text/plain
    27. default_type application/octet-stream;
    28. //配置默认编码
    29. charset utf-8;
    30. //取消服务日志
    31. access_log off;
    32. //可以自定义日志格式
    33. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
    34. '$status $body_bytes_sent "$http_referer" '
    35. '"$http_user_agent" "$http_x_forwarded_for"';
    36. //配置访问日志文件路径
    37. accsess_log /usr/local/nginx/logs/access.log main;
    38. //设定通过nginx上传文件的大小
    39. client_max_body_size 10m;
    40. //开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,
    41. //对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off
    42. //以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off
    43. sendfile on;
    44. //开启目录列表访问,合适下载服务器,默认关闭
    45. autoindex on;
    46. //长连接模式,默认开启,单位秒
    47. keepalive_timeout 60;
    48. //gzip模块设置
    49. gzip on;
    50. //设置gzip压缩级别,默认为3,可选值为0-90表示不压缩,1表示最小压缩,9表示最大压缩
    51. gzip_comp_level 3;
    52. //设置gzip压缩类型,默认为text/html,text/css,text/javascript,application/x-javascript
    53. gzip_types text/plain text/css application/x-javascript text/javascript application/javascript application/json;
    54. //设置gzip压缩文件后缀,默认为.html,.css,.js,.json
    55. gzip_proxied any;
    56. //upstream负载均衡配置模块
    57. upstream webserver{
    58. //upstream负载均衡,有4种配置方式
    59. //轮询(weight):指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。默认当weight不指定时,各服务器weight相同,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
    60. server 192.168.1.85:8085 weight=1; //格式: server 服务端IP地址:端口号 weight=权重
    61. server 192.168.1.86:8085 weight=2 down; // down 表示当前服务已经挂掉不参与负载均衡
    62. server 192.168.1.87:8085 weight=3 backup;// backup 标识其他所有的非down和backup的服务都忙的时候,才会请求backup的服务,机器压力相对较小。
    63. //ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session不能跨服务器的问题。如果后端服务器down掉,要手工down掉。
    64. // ip_hash;
    65. // server 192.168.1.85:8085;
    66. // server 192.168.1.86:8085;
    67. //fair(第三方插件):按后端服务器的响应时间来分配请求,响应时间短的优先分配。
    68. // server 192.168.1.85:8085;
    69. // server 192.168.1.86:8085;
    70. // fair;
    71. //url_hash(第三方插件):按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存服务器时比较有效。在upstream中加入hash语句,hash_method是使用的hash算法。
    72. // server 192.168.1.85:8085;
    73. // server 192.168.1.86:8085;
    74. // hash $request_uri;
    75. // hash_method crc32;
    76. }
    77. //server虚拟主机配置模块,可以有多个
    78. server{
    79. //监听端口
    80. listen 80;
    81. //监听域名或者IP地址,可以有多个用空格间隔
    82. server_name localhost;
    83. access_log logs/host.access.log main; //
    84. //配置错误页面(当404时展示404.html页面,配置一个location来跳转到具体错误页面)
    85. error_log 404 /404.html;
    86. //location请求url过滤模块,可以有多个
    87. //配置所有路径进行过滤
    88. location /{
    89. //根目录
    90. // root path;
    91. //设置网站的默认首页
    92. // index index.html index.html;
    93. //请求转向webserver中配置的服务器
    94. proxy_pass http://webserver;
    95. //设置拒绝的IP地址
    96. deny 127.0.0.1;
    97. //设置允许的IP地址
    98. allow 127.0.0.1;
    99. }
    100. //配置错误页面转向
    101. location = /404.html{
    102. root /usr/local/nginx/web_app/dist;
    103. index 404.html
    104. }
    105. }
    106. }

    特殊说明:

    listen监听:
    listen port #监听该端口的所有IP连接
    listen *:80 | *:8080 #监听所有80端口和8080端口
    listen IP_address:port #监听指定的地址和端口号
    listen IP_address #监听指定ip地址所有端口
    listen *:8000; 监听指定端口上的连接

    server_name监听,可以基于名称和IP进行配置
    1、对于name 来说,可以只有一个名称,也可以有多个名称,中间用空格隔开。
    2、使用通配符“*”,但通配符只能用在由三段字符组成的首段或者尾端,或者由两端字符组成的尾端。
    3、使用正则表达式,用“~”作为正则表达式字符串的开始标记,“^”和“” 之 间 为 要 匹 配 的 内 容 , “ ” 表 示 开 头 “ ”之间为要匹配的内容,“^”表示开头 “”之间为要匹配的内容,“ 
    ” 表示开头“”表示结尾。

    例子:
    server_name 127.0.0.1 # 基于Ip配置
    server_name www.123.com # 基于名称
    server_name www.123.com www.456.com # 多个空格隔开
    server_name .123.com www.123. # 使用通配符
    server_name ~^wwwd+.123.com$; # 使用正则表达式

    常见正则表达式:
    ^:匹配搜索字符串开始位置
    $:匹配搜索字符串结束位置
    .:匹配除换行符n之外的任何单个字符
    [xyz]:字符集,与任意一个指定字符匹配
    [a-z]:字符范围,匹配指定范围内的任何字符
    w:与以下任意字符匹配 A-Z a-z 0-9 和下划线,等效于[A-Za-z0-9_]
    d:数字字符匹配,等效于[0-9]
    {n}:正好匹配n次
    {n,}:至少匹配n次
    {n,m}:匹配至少n次至多m次
    *:零次或多次,等效于{0,}
    +:一次或多次,等效于{1,}
    ?:零次或一次,等效于{0,1}

  • 相关阅读:
    持安科技孙维伯:零信任理念下的实战攻防:ISC2023数字小镇演讲
    35岁农村小伙的成长之路,从小白程序员到大厂高级技术专家
    基于Python+OpenCV+Tensorflow图像迁移的艺术图片生成系统
    SpringBoot2.7.9 配置文件加载方式
    Kafka 开启SASL/SCRAM认证 及 ACL授权(三)验证
    js实现字符串转json对象的四种方法
    DevCloud加持下的青软,让教育“智”上云端
    数据结构之排序
    告别BeanUtils,Mapstruct从入门到精通
    C++----二叉树的进阶
  • 原文地址:https://blog.csdn.net/qq_34556414/article/details/138059623