清月·墨言 - WEB服务器
type: channel
link: https://www.moyann.com/category/WebServer/
description: Nginx and apahce
items: haproxy做TCP层的负载均衡
items: Ubuntu 下 PHP curl https 段错误(或者nginx502)
items: MySQL——删除指定字符
items: Haproxy+Nginx负载均衡实战
items: 结构化资料SEO 与meta 标签
items: 通过nginx目录跳转实现：将旧分类URL跳转到新分类URL
items: cdn设置错误导致的重定向次数过多的问题
items: Web服务器Nginx多方位优化策略
items: 网页点线粒子插件-网站背景鼠标点线窝巢特效-canvas-nest.js

haproxy做TCP层的负载均衡
type: item
date: 2022-02-11T15:37:14+08:00
description: 最新项目中发现，大量游戏玩家访问登录服务器时出现延迟，导致玩家无法登录，愿意可能是登录服务器性能达到极限。 所以目前想通过proxy的方式访问登录服务器集群，避免登录延迟。 1.下载haproxy最新版本 http://www.haproxy.org/download/1.5/src/haproxy-1.5.12.tar.gz 2.安装haproxy软件 tar zxvf haproxy-1.5.12.tar.gz cd haproxy-1.5.12 uname -a //查看linux内核版本, TARGET是内核版本，2.6就写作26 make TARGET=linux26 PREFIX=/usr/local/haproxy make install PREFIX=/usr/local/haproxy 3.配置haproxy mkdir /etc/haproxy/conf vim /etc/haproxy/conf/haproxy.cfg ###########全局配置######### global chroot /usr/local/haproxy daemon nbproc 1 group nobody user nobody pidfile /opt/haproxy/logs/haproxy.pid ulimit-n 65536 #spread-checks 5m #stats timeout 5m #stats maxconn 100 ########默认配置############ defaults mode tcp #默认的模式mode { tcp|http|health }，tcp是4层，http是7层，health只会返回OK retries 3 #两次连接失败就认为是服务器不可用，也可以通过后面设置 option redispatch #当serverId对应的服务器挂掉后，强制定向到其他健康的服务器 option abortonclose #当服务器负载很高的时候，自动结束掉当前队列处理比较久的链接 maxconn 32000 #默认的最大连接数 timeout connect 5000ms #连接超时 timeout client 30000ms #客户端超时 timeout server 30000ms #服务器超时 #timeout check 2000 #心跳检测超时 log 127.0.0.1 local0 err #[err warning info debug] ########test1配置################# listen test1 bind 0.0.0.0:8008 mode tcp balance roundrobin server s1 127.0.0.1:8010 weight 1 maxconn 10000 check inter 10s server s2 127.0.0.1:8011 weight 1 maxconn 10000 check inter 10s server s3 127.0.0.1:8012 weight 1 maxconn 10000 check inter 10s ########test2配置################# listen test2 bind 0.0.0.0:8007 mode tcp balance roundrobin server s1 192.168.1.88:8010 weight 1 maxconn 10000 check inter 10s server s2 192.168.1.88:8011 weight 1 maxconn 10000 check inter 10s ########统计页面配置######## listen admin_stats bind 0.0.0.0:8099 #监听端口 mode http #http的7层模式 option httplog #采用http日志格式 #log 127.0.0.1 local0 err maxconn 10 stats refresh 30s #统计页面自动刷新时间 stats uri /stats #统计页面url:port/stats stats realm XingCloud\ Haproxy #统计页面密码框上提示文本 stats auth admin:admin #统计页面用户名和密码设置stats hide-version #隐藏统计页面上HAProxy的版本信息 4.配置启动脚本 vim /usr/local/haproxy/sbin/haproxy.sh #!/bin/sh cd /usr/local/haproxy/s…

Ubuntu 下 PHP curl https 段错误(或者nginx502)
type: item
date: 2022-02-10T21:20:06+08:00
description: 在调试新的网站系统的时候遇到一个问题。就是在调用curl_exec()后出现502。然后马上编写了一个测试脚本： <?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://www.baidu.com'); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); $res = curl_exec($ch); print_r($res); exit; 发现，只要链接是https的，必然出现段错误，这也是导致502的原因。而http链接可以正常访问。 是从这里找到解决问题的方法的： https://bugs.php.net/bug.php?id=76416 也有人出现了相同的问题，官方提示说是系统curl使用的ssl库和php编译时使用的ssl库（opsnssl）不一至导致的。然后我查找了phpinfo信息，发现php使用的curl版本以及它使用的ssl库（openssl）版本： 然后查看PHP编译时的openssl版本: 这两个软件的openssl版本明显不一致，所以，下一步就是要么从新编译PHP，使用系统的openssl版本1.1.0g，要么重新编译安装curl，使用openssl版本1.0.2o。

MySQL——删除指定字符
type: item
date: 2022-01-07T01:20:51+08:00
description: 前言 导入的数据,发现有些数据前面出现了?字符,这里使用mysql的replace函数来清除,当然你也可以使用trim函数。 步骤 语法 replace(object,search,replace) object 需要修改的字段 search 需要替换的字段 replace 替换后的字段 示例 #将tb_user表中的nickname字段里面的?替换成无 update `tb_user` set `nickname`=replace(`nickname`,'?','');

Haproxy+Nginx负载均衡实战
type: item
date: 2021-07-29T13:21:00+08:00
description: Haproxy概述 ha-proxy是一款高性能的负载均衡软件。因为其专注于负载均衡这一些事情，因此与nginx比起来在负载均衡这件事情上做更好，更专业。 Haproxy的特点 haproxy 作为目前流行的负载均衡软件，必须有其出色的一面。下面介绍一下ha-proxy相对LVS，Nginx等负载均衡软件的优点。 支持tcp / http 两种协议层的负载均衡，使得其负载均衡功能非常丰富。 支持8种左右的负载均衡算法，尤其是在http模式时，有许多非常实在的负载均衡算法，适用各种需求。 性能非常优秀，基于单进程处理模式（和Nginx类似）让其性能卓越。 拥有一个功能出色的监控页面，实时了解系统的当前状况。 功能强大的ACL支持，给用户极大的方便。 Haproxy算法 1.roundrobin 基于权重进行轮询,在服务器的处理时间保持均匀分布时,这是最平衡,最公平的算法.此算法是动态的,这表示其权重可以在运行时进行调整. 2.static-rr 基于权重进行轮询,与roundrobin类似,但是为静态方法,在运行时调整其服务器权重不会生效.不过,其在后端服务器连接数上没有限制 3.leastconn 新的连接请求被派发至具有最少连接数目的后端服务器. Haproxy Nginx环境介绍（基于Centos7.x） Server1 192.168.179.101 Haproxy Server2 192.168.179.102 Web Server Nginx1 Server3 192.168.179.104 Web Server Nginx2 Haproxy的安装 #Centos7环境下安装你的haproxy软件 [root@master ~]# yum install epel* haproxy -y #我这里不演示keepalived,后面博客演示，这里只有一台haproxy,没有backup haproxy [root@localhost ~]# hostnamectl set-hostname master 192.168.179.101 haproxy Nginx安装部署 #192.168.179.103 104上部署Nginx systemctl stop firewalld && setenforce 0 wget -c http://nginx.org/download/nginx-1.16.1.tar.gz mv nginx-1.16.1.tar.gz /usr/src/ cd /usr/src/ tar xf nginx-1.16.1.tar.gz cd nginx-1.16.1 yum install -y gcc pcre pcre-devel openssl openssl-devel gd gd-devel ./configure --prefix=/usr/local/nginx make && make install /usr/local/nginx/sbin/nginx #修改主机名 [root@localhost ~]# hostnamectl set-hostname real-server1 192.168.179.103 nginx [root@localhost ~]# hostnamectl set-hostname real-server2 192.168.179.104 nginx #为了负载均衡结果更加清晰展示，修改html页面内容 [root@real-server1 ~]# /usr/local/nginx/sbin/nginx -s reload [root@real-server1 ~]# echo "this is http server nginx 192.168.179.103" > /usr/local/nginx/html/index.html [root@real-server1 ~]# vim /usr/local/nginx/conf/nginx.conf keepalive_timeout 0; [root@real-server2 ~]# vim /usr/local/nginx/conf/nginx.conf keepalive_timeout 0; [root@real-server2 ~]# echo "this is http server nginx 192.168.179.104" > /usr/local/nginx/html/index.html [root@real-server2 ~]# /usr/local/nginx/sbin/nginx -s reload Haproxy配置配置文件 [root@master ~]# cat …

结构化资料SEO 与meta 标签
type: item
date: 2021-03-22T22:24:00+08:00
description: 随着这个blog 放到网路上开始，SEO 也变得重要起来，而在SEO 里头，最重要的第一项重点就是meta 标签，这也是要告诉搜寻引擎和社群网站，你的blog 或是网站主旨是什么，作者是谁，分享的缩图是什么...等这些我们认为理所当然的资讯，毕竟这些搜寻引擎的蜘蛛和社群网站的人工智慧，现在还无法分辨你我网站内容的重点，因此我们必须靠这些meta 或结构化资料itemprop，来告诉它们。 本篇主要在介绍，如何正确设定分享文章到google plus 以及facebook 的标题、缩图与内文概要，因为有了这些正确的设定，分享到社群网站就不会跳出莫名其妙的缩图，同时在google 的搜寻，也会呈现作者的大头照与姓名，这些都是会吸引更多使用者浏览的好方法。 这是在我的网站header 里头，所加入的meta 标签： 其中以下这三行，是写给搜寻引擎看的(特别是google )，当中最重要的，就是rel="author"这一句，有写这一段，接下来我们就可以去去google plus进行互相认证的作业(也就是要让google plus确认这个网页的作者是你) 而认证的过程，可以点选google结构化资料测试工具连结，进行相关的认证作业，认证的过程其实也很简单，就是进入google plus的个人页面，点选「帐户」，点选「编辑个人资料」，接着将「连结」里头的「作品刊载于」，新增目前的网站，接着google plus就会去查询你的网站是否有放上rel="author"，如果有，就完成啰！ 而这三行是写给google plus 看的，分享到google plus 上头，就会正确显示 而这四行是写给facebook看的，分享到facebook上头，就会正确显示，如果发现都已经照着设定了，分享时仍有问题，可以点选Facebook Debugger进行查询和重新设定，完成后再次分享应该就不会有问题啰！ 当然meta 标签绝对不止这一些，因为除了facebook 和google plus，还有一个世界前三大的社群平台twitter，以下列出在这些平台上完整的meta 标签语法，如果有需要也可以都加进自己的网站喔！ <!-- Place this data between the tags of your website --> Page Title. Maximum length 60-70 characters 更多的资讯也可以参考这个网站，会更有帮助和收获喔！ 文章转自 ： 墨少离 https://www.msl.la/archives/231/

通过nginx目录跳转实现：将旧分类URL跳转到新分类URL
type: item
date: 2020-12-05T01:37:00+08:00
description: 调整了下栏目分类，具体调整如下： 合并 WINDOWS和LINUX分类 举例说明下： 比如我的Windows分类，分类目录是category/WindowsAndLinux，实际访问地址是：https://www.moyann.com/category/Windows/ 做了调整后，分类目录变为/category/WindowsAndLinux/,实际访问地址是：https://www.moyann.com/category/WindowsAndLinux/ 鉴于旧栏目地址已被百度等搜索引擎收录，直接放弃原有URL是不行的。 那么，我们就需要对新旧地址做下跳转。 这个跳转可以直接在nginx后台使用rewrite规则来实现。 具体代码如下： rewrite ^/category/Windows/$ /category/WindowsAndLinux/ permanent; rewrite ^/category/linux/$ /category/WindowsAndLinux/ permanent; 以上代码实现的是目录跳转，具体到某一个特定的URL的时候，“/category/Windows/”更换为具体的URL地址即可

cdn设置错误导致的重定向次数过多的问题
type: item
date: 2020-11-25T13:07:00+08:00
description: 今天，我百度云加速接入后，发现访问www.94qy.net 会显示重定向次数过多的问题，但我并没有修改ngnix的相关配置。 关于公司站点的ngnix重定向设置了两个地方，分别是http->https 和 非www开头->www开头，两个地方的配置分别如下： # http->https 重定向 if ($server_port !~ 443){ rewrite ^(/.*)$ https://$host$1 permanent; } # 非www开头->www开头 if ($host ~ '^94qy.net'){ return 302 http://www.94qy.net$request_uri; } 这两个配置肯定是没问题的，之前一直在用。 最后检查的原因是，百度云加速的https设置为了半程加密导致的问题。 使用cdn这类工具，其实即使服务器上不部署ssl证书都可以实现ssl访问，如果是半程加密以我的博客为例，访问过程如下： https://www.94qy.net （浏览器） -> 阿里云cdn（进行校验证书是否有效）---回源--> 服务器（80端口） 可以看到这里回源的服务器的80端口，而非443端口，这就是半程加密。 所以为什么导致重定向次数过多的原因就知道了。 https://www.94qy.net -> 服务器80端口-> 触发rewrite规则 -> https://www.94qy.net 导致循环。 同样的不加密、全程加密、严格加密的意义就很容易理解了。 如果选择不加密，访问https://www.94qy.net 浏览器会直接显示不支持https，不安全的链接之类的错误。 如果选择全程加密，这服务器上也必须要部署自签名的证书（cdn 回源的时候不校验服务器证书的合法性），如果服务器上面没有部署自签名的证书，浏览器就会显示不支持的证书之类的错误） 如果选择严格加密，则服务器需要部署受信任的 CA 证书，否则浏览器就会显示不支持的证书之类的错误

Web服务器Nginx多方位优化策略
type: item
date: 2019-08-29T10:25:00+08:00
description: Nginx(读音engine x)服务器由于性能优秀稳定、配置简单以及跨平台，被越来越多的公司和个人所采用，现已成为市场份额继Apache之后的第二大Web服务器。各大小网站论坛博客也介绍说明了Nginx从安装到优化的各种配置。不过看了很多这些相关Nginx的文档之后，发现一个比较大的问题，就是这些文档基本也就从两个方面着手，一是修改Nginx的配置文件，二是调整操作系统的相关内核参数；而且文档说明也不够明了，缺乏比较系统级别的优化。本文将从Nginx源码编译安装开始，到修改配置文件，调整系统内核参数以及架构四个方面着手分别介绍如何优化。 一. 安装 (1) 精简模块 Nginx由于不断添加新的功能，附带的模块也越来越多。很多操作系统厂商为了用户方便安装管理，都增加了rpm、deb或者其他自有格式软件包，可以本地甚至在线安装。不过我不太建议使用这种安装方式。这虽然简化了安装，在线安装甚至可以自动解决软件依赖关系，但是安装后软件的文件布局过于分散，不便管理维护；同时也正是由于存在软件包之间的依赖关系，导致当有安全漏洞、或者其它问题，想要通过更新升级Nginx新版本时却发现yum、deb源还未发布新版本(一般都落后于官网发布的软件版本)。最重要的是采用非源码编译安装的方式，默认会添加入许多模块，比如邮件相关、uwsgi、memcache等等，很多网站运行时这些模块根本未用到，虽然平时占用的资源很小，但是仍然可能是压弯骆驼的一根稻草。各种非必需模块默认安装运行的同时，也给Web系统带来了安全隐患。尽量保持软件的轻装上阵，是每个运维应当尽力做到的，所以我建议一般常用的服务器软件使用源码编译安装管理。。我一般使用的编译参数如下，PHP相关模块fastcgi被保留用作后文优化说明，： ./configure \ "--prefix=/App/nginx" \ "--with-http_stub_status_module" \ "--without-http_auth_basic_module" \ "--without-http_autoindex_module" \ "--without-http_browser_module" \ "--without-http_empty_gif_module" \ "--without-http_geo_module" \ "--without-http_limit_conn_module" \ "--without-http_limit_req_module" \ "--without-http_map_module" \ "--without-http_memcached_module" \ "--without-http_proxy_module" \ "--without-http_referer_module" \ "--without-http_scgi_module" \ "--without-http_split_clients_module" \ "--without-http_ssi_module" \ "--without-http_upstream_ip_hash_module" \ "--without-http_upstream_keepalive_module" \ "--without-http_upstream_least_conn_module" \ "--without-http_userid_module" \ "--without-http_uwsgi_module" \ "--without-mail_imap_module" \ "--without-mail_pop3_module" \ "--without-mail_smtp_module" \ "--without-poll_module" \ "--without-select_module" \ "--with-cc-opt='-O2'" 编译参数根据网站是否真正用到的原则增添或者减少，比如我们公司如果需要用到ssi模块,从而能够实现访问shtml页面，可以将第17行删除，那么Nginx将默认安装。大家可以通过运行 "./configure --help" 查看编译帮助，决定是否需要安装哪些模块。 (2) GCC编译参数优化 [可选项】 GCC总共提供了5级编译优化级别： -O0: 无优化。 -O和-O1: 使用能减少目标代码尺寸以及执行时间并且不会使编译时间明显增加的优化。在编译大型程序的时候会显著增加编译时内存的使用。 -O2: 包含-O1的优化并增加了不需要在目标文件大小和执行速度上进行折衷的优化。编译器不执行循环展开以及函数内联。此选项将增加编译时间和目标文件的执行性能。 -Os:…

网页点线粒子插件-网站背景鼠标点线窝巢特效-canvas-nest.js
type: item
date: 2018-12-15T12:56:00+08:00
description: color=”255,0,0” 背景粒子线的颜色值 opacity=”0.5” 背景粒子线的透明度，一般设置成0.5-1之间 count=”99” 背景粒子线的密度，建议不要太大，否则页面容易卡死 zIndex="-1" 背景的z-index属性，css属性用于控制所在层的位置