正/反向代理

代理的作用是将流量分配

代理的方式

  • 正向代理:找完正向代理之后,还需要找服务器(无法直接访问到目标服务器)

    • 应用:VPN

  • 反向代理:只需要找反向代理,不需要找服务器

    • 应用:负载均衡

Nginx代理服务支持的协议

nginx官网

模块 代理语言
ngx_http_uwsgi_module Python
ngx_http_fastcgi_module PHP
ngx_http_scgi_module Java
ngx_http_v2_module Golang
ngx_http_proxy_module HTTP

代理实战

Lb01虚拟机代理Web01

部署web01

搭建马里奥小游戏

  1. [root@web01 conf.d]# vim Mario.conf
  2. server{
  3. listen 80;
  4. server_name 192.168.15.7;
  5. location / {
  6. root /opt/Super_Mario;
  7. index index.html;
  8. }
  9. location ~ /images {
  10. root /opt/image;
  11. }
  12. }

部署Lb01

  • Lb01部署Nginx
  1. # 下载Nginx源代码包
  2. [root@lb01 ~]# wget https://nginx.org/download/nginx-1.20.2.tar.gz
  3. # 解压
  4. [root@lb01 ~]# tar -xf nginx-1.20.2.tar.gz
  5. # 进入源代码目录
  6. [root@lb01 ~]# cd nginx-1.20.2
  7. # 安装依赖包
  8. [root@lb01 nginx-1.20.2]# yum install openssl openssl-devel zlib zlib-devel -y
  9. # 设置编译参数
  10. [root@lb01 nginx-1.20.2]# ./configure --with-http_gzip_static_module --with-stream --with-http_ssl_module
  11. # 编译
  12. [root@lb01 nginx-1.20.2]# make
  13. # 安装
  14. [root@lb01 nginx-1.20.2]# make install
  15. # 优化
  16. [root@lb01 nginx]# mkdir /etc/nginx
  17. [root@lb01 nginx]# mv /usr/local/nginx/conf/* /etc/nginx/
  18. [root@lb01 nginx]# mkdir /etc/nginx/conf.d
  19. # 修改配置文件(拷贝以下web01的),统一内容
  20. [root@web01 ~]# cat /etc/nginx/nginx.conf
  21. # 拷贝到lb01配置文件中
  22. [root@lb01 nginx]# vim /etc/nginx/nginx.conf
  23. [root@lb01 nginx]# groupadd www -g 666
  24. [root@lb01 nginx]# useradd www -u 666 -g 666 -M -r -s /sbin/nologin
  25. [root@lb01 nginx]# vim /usr/lib/systemd/system/nginx.service
  26. [Unit]
  27. Description=nginx - high performance web server
  28. Documentation=http://nginx.org/en/docs/
  29. After=network-online.target remote-fs.target nss-lookup.target
  30. Wants=network-online.target
  31. [Service]
  32. Type=forking
  33. PIDFile=/var/run/nginx.pid
  34. ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
  35. ExecReload=/bin/sh -c "/bin/kill -s HUP $(/bin/cat /var/run/nginx.pid)"
  36. ExecStop=/bin/sh -c "/bin/kill -s TERM $(/bin/cat /var/run/nginx.pid)"
  37. [Install]
  38. WantedBy=multi-user.target
  39. [root@lb01 sbin]# ln -s /etc/nginx/nginx.conf /usr/local/nginx/conf/nginx.conf
  40. [root@lb01 sbin]# mv /usr/local/nginx/sbin/nginx /usr/sbin/
  41. # 重载
  42. [root@lb01 sbin]# systemctl daemon-reload
  43. [root@lb01 sbin]# mkdir /var/log/nginx
  44. [root@lb01 sbin]# systemctl start nginx
  45. # 查看模块
  46. [root@lb01 nginx]# nginx -V
  • 部署反向代理
  1. [root@lb01 conf.d]# vim /etc/nginx/conf.d/game.conf
  2. server {
  3. listen 80;
  4. server_name _;
  5. location / {
  6. proxy_pass http://172.16.1.7:80;
  7. }
  8. }
  9. # 测试
  10. 真机访问192.168.15.5lb01


Nginx代理常用参数

添加发往后端服务器的请求头信息

通过tail -f /var/log/nginx/access.log监控日志,发现客户端ip是lb01的,通过以下三个参数修改就能记录真实的客户端ip

  1. Syntax: proxy_set_header field value;
  2. Default: proxy_set_header Host $http_host;
  3. proxy_set_header Connection close;
  4. Context: http, server, location
  5. # 用户请求的时候HOST的值是linux.proxy.com, 那么代理服务会像后端传递请求的还是linux.proxy.com
  6. proxy_set_header Host $http_host;
  7. # 将$remote_addr的值放进变量X-Real-IP中,$remote_addr的值为客户端的ip
  8. proxy_set_header X-Real-IP $remote_addr;
  9. # 客户端通过代理服务访问后端服务, 后端服务通过该变量会记录真实客户端地址
  10. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  1. # 添加参数
  2. [root@lb01 nginx]# vim /etc/nginx/conf.d/game.conf
  3. server {
  4. listen 80;
  5. server_name _;
  6. location / {
  7. proxy_pass http://172.16.1.7:80;
  8. proxy_set_header Host $http_host;
  9. proxy_set_header X-Real-IP $remote_addr;
  10. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  11. }
  12. }
  13. [root@lb01 nginx]# nginx -t
  14. nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
  15. nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
  16. [root@lb01 nginx]# systemctl restart nginx

再次监控web01,发现真实ip为”xff”: "192.168.15.1"

代理到后端的TCP连接、响应、返回等超时时间

  1. #nginx代理与后端服务器连接超时时间(代理连接超时)
  2. Syntax: proxy_connect_timeout time;
  3. Default: proxy_connect_timeout 60s;
  4. Context: http, server, location
  5. #nginx代理等待后端服务器的响应时间
  6. Syntax: proxy_read_timeout time;
  7. Default: proxy_read_timeout 60s;
  8. Context: http, server, location
  9. #后端服务器数据回传给nginx代理超时时间
  10. Syntax: proxy_send_timeout time;
  11. Default: proxy_send_timeout 60s;
  12. Context: http, server, location
  1. # 添加以下参数
  2. proxy_connect_timeout 1s; # 连接时间
  3. proxy_read_timeout 3s; # 响应时间
  4. proxy_send_timeout 3s; # 回传代理时间
  5. [root@lb01 nginx]# cat /etc/nginx/conf.d/game.conf
  6. server {
  7. listen 80;
  8. server_name _;
  9. location / {
  10. proxy_pass http://172.16.1.7:80;
  11. proxy_set_header Host $http_host;
  12. proxy_set_header X-Real-IP $remote_addr;
  13. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  14. # -----------------------------------------------------
  15. proxy_connect_timeout 1s;
  16. proxy_read_timeout 3s;
  17. proxy_send_timeout 3s;
  18. }
  19. }

proxy_buffer代理缓冲区

代理缓冲区的存在增快了访问速度

  1. #nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完再传给客户端
  2. Syntax: proxy_buffering on | off;
  3. Default: proxy_buffering on;
  4. Context: http, server, location
  5. #设置nginx代理保存用户头信息的缓冲区大小
  6. Syntax: proxy_buffer_size size;
  7. Default: proxy_buffer_size 4k|8k;
  8. Context: http, server, location
  9. #proxy_buffers 缓冲区
  10. Syntax: proxy_buffers number size;
  11. Default: proxy_buffers 8 4k|8k;
  12. Context: http, server, location
  13. proxy_buffering on;
  14. proxy_buffer_size 8k;
  15. proxy_buffers 8 8k;
  1. # 添加参数
  2. proxy_buffering on; # 打开缓冲区
  3. proxy_buffer_size 8k; # 缓冲区大小,设置为8kb
  4. proxy_buffers 8 8k; # 8个缓冲区,每个缓冲区8kb
  5. [root@lb01 nginx]# cat /etc/nginx/conf.d/game.conf
  6. server {
  7. listen 80;
  8. server_name _;
  9. location / {
  10. proxy_pass http://172.16.1.7:80;
  11. proxy_set_header Host $http_host;
  12. proxy_set_header X-Real-IP $remote_addr;
  13. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  14. # -----------------------------------------------------
  15. proxy_connect_timeout 1s;
  16. proxy_read_timeout 3s;
  17. proxy_send_timeout 3s;
  18. # ----------------------------------------------------
  19. proxy_buffering on;
  20. proxy_buffer_size 8k;
  21. proxy_buffers 8 8k;
  22. }
  23. }

配置代理优化文件

因为上面参数在配置的时候是不需要修改的,通过写入到文件内来优化

  1. [root@lb01 ~]# cd /etc/nginx/
  2. [root@lb01 ~]# vim /etc/nginx/proxy_params
  3. proxy_set_header Host $http_host;
  4. proxy_set_header X-Real-IP $remote_addr;
  5. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  6. proxy_connect_timeout 10s;
  7. proxy_read_timeout 10s;
  8. proxy_send_timeout 10s;
  9. proxy_buffering on;
  10. proxy_buffer_size 8k;
  11. proxy_buffers 8 8k;
  12. # 编辑配置文件,通过添加外部配置文件-include,就不需要写上述的参数了
  13. [root@lb01 conf.d]# vim game.conf
  14. server {
  15. listen 80;
  16. server_name _;
  17. location / {
  18. proxy_pass http://172.16.1.7:80;
  19. include /etc/nginx/proxy_params;
  20. }
  21. }
  22. # 测试
  23. 通过监控进程来查看真实ip是否为本机访问的真实ip即可
  24. tail -f /var/log/nginx/access.log

负载均衡

为什么要用负载均衡?

可以拓展代理,使用负载均衡可以代理多个主机,

负载均衡的架构

通过代理将流量按照一定的比例,转发到后端。

负载均衡的实现

连接池

  1. 将后端服务打包成一个IP连接池。
  2. 1、反向代理格式
  3. server {
  4. listen 80;
  5. server_name _;
  6. location / {
  7. proxy_pass http://[连接池];
  8. }
  9. }
  10. 2IP连接池格式
  11. upstream [连接池名称] {
  12. server [ip]:[port];
  13. server [ip]:[port];
  14. server [ip]:[port];
  15. }

实现步骤

  1. # 搭建
  2. web02web03 nginx搭建马里奥小游戏
  3. 1、上传文件到/opt/目录下
  4. [root@web01 conf.d]# scp Super_Mario.tar.gz 172.16.1.8:/opt/
  5. [root@web01 conf.d]# scp Super_Mario.tar.gz 172.16.1.9:/opt/
  6. 2、下载nginx yum install nginx
  7. 3、编辑配置文件:Mario.conf
  8. [root@web01 conf.d]# scp Mario.conf 172.16.1.8:/etc/nginx/conf.d/
  9. [root@web01 conf.d]# scp Mario.conf 172.16.1.9:/etc/nginx/conf.d/
  10. 4、修改配置文件和web01统一
  11. [root@web01 conf.d]# scp /etc/nginx/nginx.conf 172.16.1.8:/etc/nginx/nginx.conf
  12. [root@web01 conf.d]# scp /etc/nginx/nginx.conf 172.16.1.9:/etc/nginx/nginx.conf
  13. 5web02web03测试配置文件和重启服务
  14. nginx -t -c /etc/nginx/nginx.conf
  15. systemctl restart nginx
  16. # lb01实现负载均衡
  17. 6、创建连接池
  18. [root@lb01 conf.d]# vim /etc/nginx/conf.d/game.conf
  19. upstream supermarie {
  20. server 172.16.1.7:80;
  21. server 172.16.1.8:80;
  22. server 172.16.1.9:80;
  23. }
  24. server {
  25. listen 80;
  26. server_name _;
  27. location / {
  28. proxy_pass http://supermarie;
  29. include /etc/nginx/proxy_params;
  30. }
  31. }
  32. [root@lb01 conf.d]# nginx -t
  33. [root@lb01 conf.d]# systemctl restart nginx
  34. # 测试真机访问lb01 ip

这样的负载均衡访问,访问流量是平均分配的,如何实现负载均衡流量比例不一样呢?负载均衡比例

负载均衡的比例

流量比例示例如下

轮询

  1. # 通过web01字符显示示例
  2. [root@web01 Super_Mario]# echo Web01 > web.html
  3. [root@web01 Super_Mario]# echo Web02 > web.html
  4. [root@web01 Super_Mario]# echo Web03 > web.html
  5. # 默认情况下,Nginx负载均衡的轮询状态。
  6. upstream supermarie {
  7. server 172.16.1.7:80;
  8. server 172.16.1.8:80;
  9. server 172.16.1.9:80;
  10. }

权重

  1. # Nginx中的权重0-100,数字越大,权重越高。
  2. upstream supermarie {
  3. server 172.16.1.7:80 weight=9;
  4. server 172.16.1.8:80 weight=5;
  5. server 172.16.1.9:80 weight=1;
  6. }
  7. # 这样web01获得流量分配的几率就大

ip_hash

  1. # 每一个IP固定访问某一个后端。
  2. upstream supermarie {
  3. server 172.16.1.7:80;
  4. server 172.16.1.8:80;
  5. server 172.16.1.9:80;
  6. ip_hash;
  7. }
  8. # 这样就固定访问web01服务器ip,172.16.1.7

负载均衡后端状态

状态 概述
down 当前的server暂时不参与负载均衡
backup 预留的备份服务器
max_fails 允许请求失败的次数
fail_timeout 经过max_fails失败后, 服务暂停时间

down

  1. # 暂时不分配流量
  2. upstream supermarie {
  3. server 172.16.1.7:80 down;
  4. server 172.16.1.8:80;
  5. server 172.16.1.9:80;
  6. }
  7. server {
  8. listen 80;
  9. server_name _;
  10. location / {
  11. proxy_pass http://supermarie;
  12. include /etc/nginx/proxy_params;
  13. }
  14. }
  15. # 这样172.16.1.7这个服务器暂时就不会分配流量,不参与负载均衡

backup

  1. # 只有当所有的机器全部宕机,才能启动。
  2. upstream supermarie {
  3. server 172.16.1.7:80 backup;
  4. server 172.16.1.8:80;
  5. server 172.16.1.9:80;
  6. }
  7. server {
  8. listen 80;
  9. server_name _;
  10. location / {
  11. proxy_pass http://supermarie;
  12. include /etc/nginx/proxy_params;
  13. }
  14. }
  15. # 这样只有web02和web03宕机了才会访问172.16.1.7服务器

max_fails、fail_timeout

max_fails、fail_timeout一起使用

  1. max_fails:允许请求失败的次数
  2. fail_timeout:经过max_fails失败后, 服务暂停时间
  3. # proxy_next_upstream 后端错误标识
  4. [root@lb01 ~]# cat /etc/nginx/conf.d/game.conf
  5. upstream supermarie {
  6. server 172.16.1.7:80 max_fails=3 fail_timeout=3s;
  7. server 172.16.1.8:80 max_fails=3 fail_timeout=3s;
  8. server 172.16.1.9:80 max_fails=3 fail_timeout=3s;
  9. }
  10. server {
  11. listen 80;
  12. server_name _;
  13. location / {
  14. proxy_pass http://supermarie;
  15. proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_404;
  16. include /etc/nginx/proxy_params;
  17. }
  18. }
  19. # 后端出现错误,会自动干掉服务,不会去访问
proxy_next_upstream监控的错误类型
  1. # proxy_next_upstream可以指定的错误类型如下:
  2. error # 与服务器建立连接,向其传递请求或读取响应头时发生错误;
  3. timeout # 在与服务器建立连接,向其传递请求或读取响应头时发生超时;
  4. invalid_header # 服务器返回空的或无效的响应;
  5. http_500 # 服务器返回代码为500的响应;
  6. http_502 # 服务器返回代码为502的响应;
  7. http_503 # 服务器返回代码为503的响应;
  8. http_504 # 服务器返回代码504的响应;
  9. http_403 # 服务器返回代码为403的响应;
  10. http_404 # 服务器返回代码为404的响应;
  11. http_429 # 服务器返回代码为429的响应(1.11.13);
  12. non_idempotent # 通常,请求与 非幂等 方法(POST,LOCK,PATCH)不传递到请求是否已被发送到上游服务器(1.9.13)的下一个服务器; 启用此选项显式允许重试此类请求;
  13. off # 禁用将请求传递给下一个服务器。

负载均衡部署BBS

部署后端服务

部署Python

web01、web02、web03部署,统一步骤

  1. 1、创建用户
  2. [root@web01 opt]# groupadd django -g 888
  3. [root@web01 opt]# useradd django -u 888 -g 888 -r -M -s /bin/sh
  4. 2、安装依赖软件
  5. [root@web01 opt]# yum install python3 libxml* python-devel gcc* pcre-devel openssl-devel python3-devel -y
  6. 3、上传文件
  7. [root@web01 ~]# scp bbs.zip 172.16.1.8:/opt/
  8. [root@web01 ~]# scp bbs.zip 172.16.1.9:/opt/
部署Django和uwsgi
  1. 4、安装Djangouwsgi
  2. [root@web01 opt]# pip3 install django==1.11
  3. [root@web01 opt]# pip3 install uwsgi
  4. [root@web01 opt]# pip3 install pymysql
  5. 5、创建项目
  6. [root@web01 opt]# unzip bbs.zip
  7. [root@web03 bbs]# pwd
  8. /opt/bbs
  9. [root@web03 bbs]# vim bbs/settings.py
  10. ALLOWED_HOSTS = ['*']
  11. DATABASES = {
  12. 'default': {
  13. 'ENGINE': 'django.db.backends.mysql',
  14. 'NAME': 'bbs',
  15. 'USER': 'root',
  16. 'PASSWORD': '123456',
  17. 'HOST': '172.16.1.61',
  18. 'PORT': 3306,
  19. 'CHARSET': 'utf8'
  20. }
  21. }
  22. # 启动测试
  23. [root@web01 bbs]# python3 manage.py runserver 0.0.0.0:8000
  24. # 注意数据库远程连接必须开启
配置并启动uwsgi
  1. 6、编辑项目配置文件
  2. [root@web01 bbs]# vim /opt/bbs/myweb_uwsgi.ini
  3. [uwsgi]
  4. # 端口号
  5. socket = :8000
  6. # 指定项目的目录
  7. chdir = /opt/bbs
  8. # wsgi文件路径
  9. wsgi-file = bbs/wsgi.py
  10. # 模块wsgi路径
  11. module = bbs.wsgi
  12. # 是否开启master进程
  13. master = true
  14. # 工作进程的最大数目
  15. processes = 4
  16. # 结束后是否清理文件
  17. vacuum = true
  18. 7、启动uwsgi(在bbs目录测试)
  19. [root@web01 bbs]# uwsgi -d --ini myweb_uwsgi.ini --uid 666
  20. -d : 以守护进程方式运行
  21. --ini : 指定配置文件路径
  22. --uid : 指定uid
  23. TCP 服务
  24. 8、编辑Nginx配置文件
  25. [root@web01 ~]# vim /etc/nginx/conf.d/python.conf
  26. server {
  27. listen 80;
  28. server_name py.test.com;
  29. location / {
  30. include uwsgi_params;
  31. uwsgi_pass 127.0.0.1:8000;
  32. uwsgi_read_timeout 2;
  33. uwsgi_param UWSGI_SCRIPT bbs.wsgi;
  34. uwsgi_param UWSGI_CHDIR /opt/bbs;
  35. index index.html index.htm;
  36. client_max_body_size 35m;
  37. }
  38. }
  39. 9、测试且重启Nginx配置
  40. nginx -t
  41. systemctl restart nginx

部署负载均衡

  1. [root@lb01 conf.d]# vim python.conf
  2. upstream bbs {
  3. server 172.16.1.7:80 max_fails=3 fail_timeout=3s;
  4. server 172.16.1.8:80 max_fails=3 fail_timeout=3s;
  5. server 172.16.1.9:80 max_fails=3 fail_timeout=3s;
  6. }
  7. server {
  8. listen 80;
  9. server_name py.test.com;
  10. location / {
  11. proxy_pass http://bbs;
  12. proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_404;
  13. include /etc/nginx/proxy_params;
  14. }
  15. }
  16. [root@lb01 conf.d]# nginx -t
  17. [root@lb01 conf.d]# systemctl restart nginx
  18. # 域名解析
  19. windowshosts文件
  20. # 注意连接池的名称不能相同,和其他的负载均衡连接池区分
  21. # 真机测试是否成功


补充

页面出现502问题原因

Nginx-正反向代理及负载均衡的更多相关文章

  1. Nginx正反向代理、负载均衡等功能实现配置

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   系统环境: VirtualBox Manager Centos6.4 nginx1.10.0 IP对应的机器名: IP ...

  2. Windos环境用Nginx配置反向代理和负载均衡

    Windos环境用Nginx配置反向代理和负载均衡 引言:在前后端分离架构下,难免会遇到跨域问题.目前的解决方案大致有JSONP,反向代理,CORS这三种方式.JSONP兼容性良好,最大的缺点是只支持 ...

  3. nginx的反向代理和负载均衡的一个总结

    之前一直觉的nginx的反向代理和负载均衡很厉害的样子,最近有机会接触了一下公司的这方面的技术,发现技术就是一张窗户纸呀,捅破了啥都明白了! 接下来先看一下nginx的反向代理: 简单的来说就是ngi ...

  4. nginx简单反向代理和负载均衡(ubuntu)

    nginx简单反向代理与负载均衡 环境:三台ubuntu 12.04.5 虚拟机    均装有nginx 1.1.19 以下u1(192.168.240.129) ,u2(192.168.240.13 ...

  5. Nginx的反相代理, 负载均衡

    转自 http://freeloda.blog.51cto.com/2033581/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负 ...

  6. nginx的反向代理和负载均衡的区别是什么 - 开源中国社区

    nginx的反向代理和负载均衡的区别是什么 - 开源中国社区   nginx的反向代理和负载均衡的区别是什么 #user  nobody;worker_processes  1;#error_log  ...

  7. nginx(三)反向代理和负载均衡

    nginx(三)反向代理和负载均衡 正向代理概念:比如在学校要上网,在学校内网是一个内网ip,需要连上公网就需要一个正向代理服务器. 反向代理概念: 看下图(Nginx只做请求的转发,后台有多个htt ...

  8. linux 常用命令 和 nginx(反响代理、负载均衡)安装和配置

    (1)linux常用命令 [1]在光标前输入内容:i [2]删除输入方式下所输入的文本:Ctrl+u  [3]文件保存退出:wq [4]文件不保存退出:q [5]文件强制退出:q! [6]常规删除文件 ...

  9. 七、CentOS 6.5 下 Nginx的反向代理和负载均衡的实现

    CentOS 6.5 下 Nginx的反向代理和负载均衡的实现 * 修复上面文章的问题: 复制出一个tomcat2之后,修改service.xml文件时,要修改三个端口: 1. <!-- 800 ...

  10. nginx实现反向代理和负载均衡

    利用nginx做反向代理和负载均衡是减轻服务器压力的有效方式.nginx代理服务器接收多个客户端请求, 根据配置的参数均衡到每个tomcat服务器上,tomcat处理请求,返回响应结果给nginx,n ...

随机推荐

  1. spring boot项目创建与使用

    概述 spring boot通常使用maven创建,重点在于pom.xml配置,有了pom.xml配置,可以先创建一个空的maven项目,然后从maven下载相关jar包. spring boot d ...

  2. logstash 正则表达式

    正则表达式 3. 使用给定好的符号去表示某个含义 4. 例如.代表任意字符 5. 正则符号当普通符号使用需要加反斜杠 正则的发展 6. 普通正则表达式 7. 扩展正则表达式 普通正则表达式 . 任意一 ...

  3. 【C/C++】链表

    #include <bits/stdc++.h> using namespace std; struct node { int data; // 数据 node* next; // 指针 ...

  4. 云原生时代之Kubernetes容器编排初步探索及部署、使用实战-v1.22

    概述 **本人博客网站 **IT小神 www.itxiaoshen.com Kubernetes官网地址 https://kubernetes.io Kubernetes GitHub源码地址 htt ...

  5. Linux系统的文件复制移动删除与VIM编辑

    目录 今日内容概要 内容详细 复制文件 移动文件 删除文件 系统别名(针对 rm 改别名) vim编辑器 今日内容概要 复制文件 移动文件 删除文件 vim编辑器 内容详细 复制文件 # 命令: cp ...

  6. Jenkins分布式与并行

    目录 一.简介 二.agent 通过JNLP协议增加agent 通过Swarm插件增加agent agent部分详解 三.agent放入Docker 使用Docker 配置Docker私有仓库 四.并 ...

  7. UIWindow介绍

    1.作为容器,包含app所要显示的所有视图 3.与UIViewController协同工作,方便完成设备方向旋转的支持 1.addSubview 2.rootViewController 三.Wind ...

  8. 层次分析法、模糊综合评测法实例分析(涵盖各个过程讲解、原创实例示范、MATLAB源码公布)

    目录 一.先定个小目标 二.层次分析法部分 2.1 思路总括 2.2 构造两两比较矩阵 2.3 权重计算方法 2.3.1 算术平均法求权重 2.3.2 几何平均法求权重 2.3.3 特征值法求权重 2 ...

  9. 【论文笔记】Recommendations as Treatments: Debiasing Learning and Evaluation

    Recommendations as Treatments: Debiasing Learning and Evaluation Authors: Tobias Schnabel, Adith Swa ...

  10. 有个性的手动计划模式(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 任务工作表里默认的标题"工期"."开始时间"."结束时间"这些 ...