本篇文章给大家带来的内容是关于Ubuntu系统ECS使用脚本之后如何处理出现数据库连接不上,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 Ubuntu系统ECS使用“如何通过防火墙策略限制对外扫描行为”脚本之后出现无法远程、数据库连接不上 Ubuntu系统ECS使用“如何通过防火墙策略限制对外扫描行为”中的脚本进行安全防护后出现系统无法远程或数据库无法连接的现象,是因为脚本限制对外的数据包请求导致,按照下列操作根据自己实际使用的端口情况进行修复即可: 1. 先看下现在的规则,没有允许入方向的22端口。 2. 加一下入方向的ssh,加完之后测试可以连接了(3306等也是如此) 执行命令: ufw allow 22 3. ping 域名提示 unkonwn host,需要添加域名解析的规则。 执行命令:ufw insert 1 allow out 53/udp(为什么与上面的添加规则不一样,首先out链已经有规则了,这条允许出的 规则需要加在最上面,所以用insert 1 意思是加在第一条前面,后面的意思就是 允许53端口出方向的udp协议)。 以上就是Ubuntu系统ECS使用脚本之后如何处理出现数据库连接不上的详细内容,更多请关注学派吧其它相关文章!
本篇文章给大家带来的内容是关于如何处理能 ping 通但端口不通时端口可用性探测,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 能 ping 通但端口不通时端口可用性探测说明 端口可用性探测工具介绍 不同的操作系统,端口可用性探测所使用的工具也有所不同。 Linux 环境下端口可用性探测工具介绍 traceroute 是几乎所有 Linux 发行版本预装的网络测试工具,用于跟踪 Internet 协议(IP)数据包传送到目标地址时经过的路径。您可以通过 traceroute 工具进行端口可用性探测。 traceroute 通过发送 TCP 数据包向目标端口进行探测,以检测从数据包源到目标服务器的整个链路上相应端口的连通性情况。traceroute 端口可用性探测常见用法如下: traceroute [-n] -T -p <目标端口号> Host 示例 [root@centos~]# traceroute -n -T -p 22 223.5.5.5 traceroute to 223.5.5.5 (223.5.5.5), 30 hops max, 60 byte packets 1 58.96.171.249 0.431 ms 0.538 ms 0.702 ms 2 10.88.16.29 0.997 ms 1.030 ms 10.88.16.21 1.309 ms 3 58.96.160.246 0.393 ms 0.390 ms 58.96.160.250 0.423 ms 4 63.218.56.237 1.110 ms 202.123.74.122 0.440 ms 0.440 ms 5 63.223.15.90 1.744 ms 63.218.56.237 1.076 ms 1.232 ms 6 63.223.15.158 1.832 ms 63.223.15.90 1.663 ms 63.223.15.74 1.616 ms 7 202.97.122.113 2.776 ms 63.223.15.154 1.585 ms 1.606 ms 8 * * 202.97.122.113 2.537 ms 9 202.97.61.237 6.856 ms...
【腾讯云】2核2G云服务器新老同享 99元/年,续费同价,云服务器3年机/5年机限时抢购,低至 2.5折
2024-12-22
本篇文章给大家带来的内容是关于如何处理Ping ECS实例的IP地址间歇性丢包,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 Ping ECS实例的IP地址间歇性丢包 问题描述 Ping ECS实例的IP地址间歇性丢包,ECS实例的网络一直处于不稳定状态 。 问题原因 系统中病毒。 解决方案 Ping外部存在丢包,但是延迟不大,排查不是带宽到达峰值。 登录ECS实例,执行如下命令,查看所有的进程。 pstree -a 系统显示类似如下。 发现有以10个字符(随机生成)命名的进程,kill掉进程之后又会生成新的以10个字符命名的进程,这种病毒会频繁发包,占用网络流量。 最终确认非业务进程 ,初始化系统,重新配置后系统恢复正常。 适用于 云服务器ECS 以上就是如何处理Ping ECS实例的IP地址间歇性丢包的详细内容,更多请关注学派吧其它相关文章!
本篇文章给大家带来的内容是关于购买阿里云ECS服务器后如何确认该服务器的IP信息和地理位置,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 IP地址查询定位 购买阿里云ECS服务器后,如果想确认该服务器的IP信息和地理位置,或需要查询本地公网IP信息,可以使用淘宝IP地址库进行查询。 1. 访问 ip.taobao.com 后,在页面左下侧,会显示出本地的公网IP信息。 2. 在页面左侧的输入框中输入服务器公网IP,点击“查询”,在页面中部会显示出该IP的物理位置及运营商信息。阿里云旗下的ECS服务器IP信息会显示 阿里巴巴 或 阿里云 字样。 查看IP地址方法 如果您不知道实例的IP地址,可以使用命令行查询。 Windows服务器: 点击开启-运行-输入cmd,在dos命令框中输入ipconfig /all,可以列出服务器内的网卡信息,包括子网掩码、网关、DNS和MAC的信息都可以查看到。其中Net Device PV Driver是内网网卡,Net Device PV Driver #2是外网网卡。 Linux服务器: 使用 ifconfig 命令查看网卡信息,可以列出服务器内的网卡信息,包括子网掩码、网关、DNS和MAC的信息都可以查看到。服务器上的eth0是内网网卡,eth1是外网网卡。 以上就是购买阿里云ECS服务器后如何确认该服务器的IP信息和地理位置的详细内容,更多请关注学派吧其它相关文章!
本文在介绍如何处理访问ECS服务器的网站提示的基础上,重点探讨了其具体步骤,本文内容紧凑,希望大家可以有所收获。 访问ECS服务器的网站提示“由于你访问的URL可能对网站造成安全威胁,您的访问被阻断” 用户在访问ECS服务器上的网站时,有可能会遇到“很抱歉 由于你访问的URL可能对网站造成安全威胁,您的访问被阻断。” 这是由于云盾的应用防火墙对您的URL访问判定存在攻击行为,从而进行了安全拦截。用户可以将自己的本地公网IP,添加到云盾应用防火墙的白名单中,就可以避免在正常测试访问中遭遇安全拦截。具体的添加步骤可以【点此查看】 本地公网IP可以通过ip.taobao.com页面左下角获得。 以上就是如何处理访问ECS服务器的网站提示的详细内容,更多请关注学派吧其它相关文章!
本篇文章给大家带来的内容是关于ECS云服务器如何禁用公网IP,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 ECS云服务器如何禁用公网IP Linux关闭外网网卡的方法 首先使用ifconfig查看下公网的IP对应的网卡名称,这里查看到对应的是 eth1,然后使用 ifdown eth1 即可,然后测试 ping 下公网IP,无法 ping 通。 Windows禁用公网网卡的方法 Windows主机可以在运行—输入cmd,输入 ipconfig 来查看公网 IP 的网卡信息。在下图中可以看到公网网卡为本地连接2。 然后依次打开控制面板 > 网络和共享中心 > 更改适配器设置,进行禁用本地连接2。然后进行本地到服务器进行 ping 测试,无法进行 ping 通。 以上就是ECS云服务器如何禁用公网IP的详细内容,更多请关注学派吧其它相关文章!
本篇文章给大家带来的内容是介绍linux环境下实现查看和修改时间的方法 。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 1、查看日期和时间 date 2、查看时区 date -R 3、查看UTC时间 date -u 4、修改日期 [root@centos ~]# date -s 20181230 /*显示为:Sun Dec 30 00:00:00 EST 2018 */ 修改格式为:年、月、日 注:修改完之后,时间会变成0点 5、修改时间 [root@centos ~]# date -s 0815 /* 显示为:Sun Dec 30 08:15:00 EST 2018 */ 修改格式为:小时、分钟 6、修改日期和时间 [root@centos ~]# date 1230081518 /* 显示为:Sun Dec 30 08:15:00 EST 2018 */ 修改格式为:月、日、小时、分钟、年 7、年份输入两位时默认是21世纪,也可以输入完整的年份 [root@centos ~]# date 123008152018 /* 显示为:Sun Dec 30 08:15:00 EST 2018 */ 8、也可以忽略年份 [root@centos ~]# date 1230081520 /* 显示为:Sun Dec 30 08:15:00 EST 2018 */ 9、如果需要修改秒,则可以加到最后,用点分割 [root@centos ~]# date 123008152018.20 /* 显示为:Sun Dec 30 08:15:20 EST 2018 */ 10、查看硬件时间 [root@centos ~]# hwclock /* 显示为:Thu 11 Oct 2018 09:32:03 PM EDT -1.047765 seconds */ 11、硬件时间同步到系统 hwclock --hctosys 12、系统时间同步到硬件 hwclock --systohc 以上就是linux环境下如何实现查看和修改时间?的详细内容,更多请关注学派吧其它相关文章!
Linux在4.9版本的内核新增了一款TCP拥塞控制技术:BBR,Linode最新内核也更新到4.9,但是没有把BBR编译进去,下面是教程是替换Linode CentOS7内核,并开启Google TCP-BBR优化算法方法。 注意:Linode、阿里云测试OK,Ucloud测试加载4.9变为只读系统。 1. 安装elrepo提供的kernel4.9 增加elrepo源 cat > /etc/yum.repos.d/elrepo.repo << EOF [elrepo-kernel] name=ELRepo.org Community Enterprise Linux Kernel Repository - el7 baseurl=http://elrepo.org/linux/kernel/el7/\$basearch/ http://mirrors.coreix.net/elrepo/kernel/el7/\$basearch/ http://jur-linux.org/download/elrepo/kernel/el7/\$basearch/ http://repos.lax-noc.com/elrepo/kernel/el7/\$basearch/ http://mirror.ventraip.net.au/elrepo/kernel/el7/\$basearch/ enabled=1 gpgcheck=0 EOF 可能存在yum更新内核时候找不到升级包,请检查/etc/yum.conf是否过滤了kernel 找到改文件将exclude=kernel* centos-release*注销,再尝试安装 安装elrepo替换4.9内核及grub2 yum -y install kernel-ml grub2 查看4.9内核是否安装成功 [root@linode1495332 ~]# ls -l /boot/vmlinuz* -rwxr-xr-x 1 root root 6037696 Dec 22 10:16 /boot/vmlinuz-0-rescue-72863e389b584a4dab36fae7f3bffda2 -rwxr-xr-x 1 root root 6037696 Dec 12 05:37 /boot/vmlinuz-4.9.0-1.el7.elrepo.x86_64 2. 替换CentOS7内核 Linode内核切换方法: [root@linode1495332 etc]# mkdir /boot/grub [root@linode1495332 etc]# grub2-mkconfig -o /boot/grub/grub.cfg Generating grub configuration file … Found linux image: /boot/vmlinuz-4.9.0-1.el7.elrepo.x86_64 Found initrd image: /boot/initramfs-4.9.0-1.el7.elrepo.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-72863e389b584a4dab36fae7f3bffda2 Found initrd image: /boot/initramfs-0-rescue-72863e389b584a4dab36fae7f3bffda2.img done 点击Linode后台面板Dashboard,点击Edit按钮: 在Kernel下拉菜单,选择GRUB 2启动: 非Linode切换内核方法: [root@oneinstack ~]# awk -F\’ ‘$1==”menuentry ” {print $2}’ /etc/grub2.cfg CentOS Linux (4.9.0-1.el7.elrepo.x86_64) 7 (Core) CentOS Linux (3.10.0-514.2.2.el7.x86_64) 7 (Core) CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core) CentOS Linux (0-rescue-7d26c16f128042a684ea474c9e2c240f) 7 (Core) grub2-set-default 0,切换到新内核 [root@oneinstack ~]# grub2-set-default 0 重启服务器: reboot 查看内核版本 [root@linode1495332 ~]# uname -a Linux linode1495332.members.linode.com 4.9.0-1.el7.elrepo.x86_64 #1 SMP Sun Dec 11 15:43:54 EST 2016 x86_64 x86_64 x86_64 GNU/Linux 3. 开启TCP-BBR cat >>/etc/sysctl.conf << EOF net.core.default_qdisc=fq net.ipv4.tcp_congestion_control=bbr EOF 内核参数生效: sysctl -p 查看bbr是否生效: [root@linode1495332 ~]# sysctl net.ipv4.tcp_available_congestion_control net.ipv4.tcp_available_congestion_control = bbr cubic reno [root@linode1495332 ~]# lsmod | grep bbr tcp_bbr 16384 70 Thu Dec 22 11:17:53 CST 2016
Let’s Encrypt是一个由电子前哨基金会、Mozilla基金会、Akamai、密歇根大学、思科联合发起的一个项目。它旨在为站长提供一个免费的、完全自动化的证书申请过程,从而让整个互联网都能享受到HTTPS加密。Let’s Encrypt的证书申请过程非常简单、安全、快速、自动化并且免费。Let’s Encrypt是一个中间CA,它的CA证书由IdenTrust签发。IdenTrust是一个Root CA,受到所有主流浏览器的信任。从2015年10月后,Let’s Encrypt的中间CA证书被chrome、Firefox、Microsoft Edge、Safari和Opera所信任。 最近官方做了调整,简化了获取证书的难度,并将项目名改为了certbot,以前叫letsencrypt。certbot可以自动化的申请,安装和更新证书。 OneinStack已经内置Let’s Encrypt,vhost.sh绑定域名时自动申请、绑定、自动续期(默认90天)一步到位,教程如下: 安装 wget http://mirrors.linuxeye.com/oneinstack.tar.gz tar xzf oneinstack.tar.gz cd oneinstack ./addons.sh 如下图: 出现绿色Let’s Encrypt client install successfully!即表示certbot安装成功,如下图: 使用证书 vhost.sh绑定域名ssl选择y,Let’s Encrypt选择y ./vhost.sh 注意事项 最新版oneinstack关闭Congratulations,默认跳过即成功 绑定定域名后会自动在crontab添加相应自动续期脚本 同一个ip在3小时内最多申请10个域名的证书 同一个根域名在七天内,只能注册5个证书。同一个子域名注册或更新都是要计算次数的 Mon Jun 20 23:06:17 CST 2016
不少用户提到自己的主机无法正常发送注册邮件,引起的原因有很多,而大部分原因是由于主机禁用了mail函数 111 面对以上问题,使用独立服务器的用户毫不担心,因为可以去开启mail函数,这点就不用在这给出解决方案了;还有一部分用户没有独立的云服务器,没有改动服务器环境的权限,这就需要绕一圈来解决这个问题,其实说绕一圈不如说这是更好的解决方案:使用SMTP插件来解决,重点介绍插件Configure SMTP。 提示:使用SMTP插件时需要你的邮箱开启SMTP服务,不然发信不了。 Configure SMTP插件解决WordPress邮件无法发送 直接看图,首先你需要安装Configure SMTP插件,点此进入插件下载,然后去设置一下。 图上有详细的标注说明每个填写项,我们建议使用QQ邮箱的SMTP服务,之前大前端和现在themebetter都是使用的QQ邮箱作为桥梁,最新的QQ邮箱使用了授权码代替了原有的QQ密码,所以在密码一栏中需要填写SMTP的授权码。 以上填写完毕你可以点击设置页面下面的测试,看看是否设置OK,如果可以收到测试邮件,说明一切妥当,再检查下你设置的邮箱昵称是否正确,然后邮件就刷刷的跑起来了。 需要说明的是,安装了这个插件后你的注册和评论回复通知的邮件都会通过这个渠道发送,相当于全部替换了WordPress默认的邮件服务。 欢迎关注学派吧
WordPress菜单功能很强大,但很多用户安装了WordPress程序发现菜单无法新窗口打开,如果是菜单外链到其他网站,这个就是必需,继续往下看,其实很简单。 进入 后台 – 外观 – 菜单,点击右上角的“显示选项”,会出现显示高级菜单属性的一些勾选项,勾选其中的”链接目标”即可激活菜单在新窗口打开的功能,具体请看图。 扩展:WordPress菜单功能详解
很多新手在初遇WordPress时比较迷茫,其实只要明白其运行原理就能很好的驾驭。 如果你看此文时还没有安装WordPress程序,请先看这里:WordPress程序的快速安装。 一个很好的比喻:WordPress程序是身体、WordPress主题是衣服。只有传上合适的衣服,你的WordPress站点才算是真正开始。如果你还没有合适主题,可以看看themebetter为大家准备的WordPress主题。 WordPress主题安装方法一: 进入网站后台(一般是:域名/wp-admin),点击左侧菜单中的外观,然后点击主题,右侧会有“添加”按钮,点击“上传主题”并选择你要安装的主题压缩包,然后点击启用即可,操作如下: WordPress主题安装方法二: 将解压后的主题文件夹上传到网站空间/wp-content/themes/文件夹下,进入后台 – 主题,找到你的主题并点击启用即可,操作步骤如下: 以上就是wordpress主题的安装方法了。 PS:一般情况下,主题安装好后都要进行初始化设置,如果你的后台左侧菜单-外观中有“xxx主题设置”的字眼,点开设置一下,然后保存设置,至此才算真的安装好主题了。
WordPress是一个注重美学、易用性和网络标准的个人信息发布平台。WordPress虽为免费的开源软件,但其价值无法用金钱来衡量。 使用WordPress可以搭建功能强大的网络信息发布平台,但更多的是应用于个性化的博客。针对博客的应用,WordPress能让您省却对后台技术的担心,集中精力做好网站的内容。 WordPress最新版下载 1、下载以上WordPress最新版压缩包到本地,解压缩,将所有解压的文件上传至服务器相应目录,然后通过浏览器访问该目录,即可进行快速安装,这个过程只需5分钟。 2、如果之前没有配置文件,你需要点击“创建配置文件”,然后就到了这里。 注意: 以上内容的正确性,表前缀一般不必修改,如果数据库和文件在同一个主机或服务器,那么数据库主机也可默认为 localhost; 如果数据库相关信息不明确,可以咨询主机商或云服务器商; 数据库名需要先存在于你的数据库中。 3、提交后,如无异常会提醒“进行安装”,点击即可。 4、最后是填写网站标题、管理员登录邮箱密码等信息,填写完成即可登录进后台了。 写在最后: 强烈建议各位站长选择靠谱服务器商,不懂运维的朋友建议寻找一个售后比较好的。商祺云 www.sq9.cn;待网站建成,内容将是你取胜的关键,珍惜生命和时间,请不要随意做垃圾站。 选择一个好的WordPress主题,开启一篇新的天空。
利用WordPress搭建一些定制或特殊站点时会需要移除WordPress的相关更新提示,但网上有很多是不能够正常解决问题,所以在这里告诉大家下面比较简单的方法。 只需要将下面的代码块复制到主题下的 functions.php 文件中,最好连注释一起复制,方便日后阅读和使用代码: // 移除wordpress核心更新提示 add_filter( 'pre_site_transient_update_core', create_function( '$a', "return null;" ) ); // 移除wordpress插件更新提示 remove_action( 'load-update-core.php', 'wp_update_plugins' ); add_filter( 'pre_site_transient_update_plugins', create_function( '$b', "return null;" ) );
前言 一、什么是配置虚拟主机 二、通过端口区分虚拟主机 三、通过域名区分虚拟主机 阅读本文需要安装Nginx:https://www.cnblogs.com/huangyi-427/p/9229645.html 一、什么是配置虚拟主机 就是在一台服务器启动多个网站 二、通过端口区分虚拟主机 复制一份静态页面 cd /usr/local/nginx cp -r html html81 修改部分内容以示区分 vim /usr/local/nginx/html81/index.html 查看配置文件 more /usr/local/nginx/conf/nginx.conf #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root...
今天学派吧-给大家带来一篇nginx配置location总结及rewrite规则写法教程 1. location正则写法 2. Rewrite规则 2.1 flag标志位 2.2 if指令与全局变量 2.3 常用正则 2.4 rewrite实例 1. location正则写法 一个示例: location = / { # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] } location / { # 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求 # 但是正则和最长字符串会优先匹配 [ configuration B ] } location /documents/ { # 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索 # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条 [ configuration C ] } location ~ /documents/Abc { # 匹配任何以 /documents/Abc 开头的地址,匹配符合以后,还要继续往下搜索 # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条 [ configuration CC ] } location ^~ /images/ { # 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。 [ configuration D ] } location ~* \.(gif|jpg|jpeg)$ { # 匹配所有以 gif,jpg或jpeg 结尾的请求 # 然而,所有请求 /images/ 下的图片会被 config D 处理,因为 ^~ 到达不了这一条正则 [ configuration E ] } location /images/ { # 字符匹配到 /images/,继续往下,会发现 ^~ 存在 [ configuration F ] }...
为什么用 Nginx? 第一种方案: 使用 Docker 文档中的方法 使用另一个 Docker 镜像,差点成功 最终解决方案 在使用 Docker 容器来开发 PHP 微服务套件的过程中,作者遇到了容器数量过多的问题。 最近,我一直在使用 Docker 容器来开发 PHP 微服务套件。一个问题是 PHP 应用已经搭建,可以与 PHP-FPM 还有 Nginx(取代了简单的 Apche/PHP 环境)一起工作,因此每个 PHP 微服务需要两个容器(以及两个 Docker 镜像):一个 PHP-FPM 容器和一个 Nginx 容器。 这个应用运行了 6 个以上的服务,做个乘法就知道,在开发和生产之间会有约 30 个容器。于是我决定构建一个单独的 Nginx Docker 镜像,它可以使用 PHP-FPM 的主机名作为环境变量并运行单独的配置文件,而不用为每个容器构建单独的 Nginx 镜像。 在本文中,我介绍了自己从上图中的方法 1 到方法 2 的转换,最后采用的方案中采用了一种新的定制 Docker 镜像。该镜像的代码是开源的,如果读者碰到类似问题,可以提供给大家参考。 为什么用 Nginx? Nginx 和 PHP-FPM 配合使用能使 PHP 应用的性能更好,但不好的地方在于,和 PHP Apache 镜像不同,PHP-FPM Docker 镜像默认不是和和 Nginx 绑定在一起的。如果需要通过 Nginx 容器和 PHP-FPM 连接,需要在 Nginx 配置里为该后端增加 DNS 记录。比如,如果名为 php-fpm-api 的 PHP-FPM 容器正在运行,Nginx 配置文件应该包含下面部分: location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; # This line passes requests through to the PHP-FPM container fastcgi_pass php-fpm-api:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } 如果只服务于单独的 Nginx 容器,Nginx 配置中容器名字写死还可以接受,但如上所述,需要允许多个 Nginx 容器,每个对应于一个 PHP 服务。创建一个新的 Nginx...
选择代理 克服反对意见 服务提供方的好处 可扩展性 服务使用方的好处 更丰富的群集模型 多协议支持 动态服务发现 网络策略 监测 如何更快迁移 导读:随着Service Mesh在最近一年进入人们的视野,Envoy 作为其中很关键的组件,也开始被广大技术人员熟悉。本文作者所在公司已经从 nginx 迁移到 Envoy。 随着我们下一代产品发布,我们将代理软件从 nginx 切换到 Envoy 。 我们很早就开始关注 Envoy。 公司的一些人之前在 Twitter 工作,其中一些人和 Matt Klein 一起组建了 Twitter 的边缘代理 TFE。 我们知道 Lyft 正在计划建立一个基于 TFE 的开源代理模型,我们对此很感兴趣。 不幸的是,我们刚开始做自己产品的时候它还没有准备好,所以起初我们还是使用 nginx。 我们很高兴看到 Envoy 的最初功能集合中包含了大量灵活运用微服务的想法。 我们更加兴奋地看到它的社区已经成型并且技术已经成熟。 现在 Envoy 提供的功能(相比于 nginx)可以使我们能够更快地为客户提供新功能。当然,Envoy 的功能路线图也非常令人兴奋。 选择代理 在启动Turbine Labs时,我们就知道负载均衡将成为我们基础架构的关键组成部分。 在2015年秋季的时候,代理软件并不是我们今天看到的样子。 我们选择 nginx 是因为它轻巧,经过大量生产环境测试,开源,相对来说易于扩展,并且拥有蓬勃发展的用户群体。然而我们必须做很多额外的工作才能在 nginx 之上构建一个全功能的流量管理解决方案。 服务发现,统计管理和更细粒度的负载均衡是现代基础架构的关键特性。 我们在 nginx 之上来实现这些功能,虽然已经花了很长时间,但仍有很多工作要做。 相比之下,Envoy 有很多非常有用功能(如 gRPC,tracing 等等),同时提供类似(或更好)的性能,稳定性和社区。 克服反对意见 采用任何新技术都需要考虑相反的意见。 由于我们已经部署了代理服务,不仅需要考虑到自己的问题,还需要考虑到客户提出的问题。 对于开源项目,这些问题通常分为以下几类: 我们一直密切关注 Envoy 的开发进展,并对它的成熟速度感到惊讶。已经有不少公司在生产环境使用 Envoy。Envoy 现在是一个 CNCF 项目,这意味着社区是透明和开放的。 代码贡献者来自很多公司,我们也在其中。 成本也是需要考虑的因素。随着 sidecars 成为更普遍的部署方式,代理会得到更广泛的应用。 虽然许多客户将继续集中式运行负载均衡,但我们希望代理软件可以优雅地支持边车部署模型。 Envoy 采用 C++ 11 编写,运行时占用的内存很少,与依赖较重运行时的代理相比,显着减少了 sidecars 部署的负担。 服务提供方的好处 应始终谨慎对待技术堆栈的大型更改。我们没有轻易转向 Envoy,但我们获得的好处以及我们可以传递给我们客户的好处非常显著。 可管理性 从一开始,Envoy 就被设计为可以大规模管理。 我们已经做了很多工作来使我们的基于 nginx 的代理可管理,但是这个配置接口不太容易地暴露给其他工具。 Envoy 数据平面 API 为其集中管理提供了一个开放标准。 我们可以提供一个集中的,开放的控制点,而不是复制配置文件。 可扩展性 nginx 是一个非常成功,稳定的开源项目。 其配置文件和模块生态系统具有较大的外围应用,并有大量现有用户支持。 给 nginx 贡献核心代码是非常有挑战性的,这导致在许多情况下需要编写自定义模块或 Lua 脚本以扩展其功能。 Envoy 更为聚焦,使用更为现代的语言支持改变代理行为。过去几个月中,我们向 Envoy 提交了超过 30 个功能,其中包括 OSX 构建...