最近动态

中间件技术栈

Mac中编译Nginx 1.17

背景

使用Mac的开发者大多数的时候通过 brew 命令安装各类软件,比如 PHP、Python、Nodejs,Nginx 也不例外。

默认情况下Nginx安装在/usr/local/Cellar/nginx,通过brew link nginx加软连接到/usr/local/bin/nginx,虽然这样完全满足开发且符合 Mac 软件的管理,但是却不方便移植(比如想给不懂开发的用户一键部署部署的应用包,做私有化部署的同学应该对此不陌生)。

从源码编译NGINX程序比安装预编译的安装包要灵活很多,可以添加特定的模块(来自NGINX官方或者第三方的,比如给 Fastdfs 提供 HTTP 访问文件能力的 fastdfs-nginx 模块),当然自己编译源码拉取的可以是已修复 bug 和新增特性的最新分支。

编译

依赖

  • PCRE——支持正则表达式。 是 Nginx 的核心和重写模块的所需依赖库。
1
2
wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.bz2
tar zxf pcre-8.43.tar.bz2

阅读剩下更多

默认配图
中间件技术栈

浅谈分布式锁

为什么要有分布式锁

随着架构系统的演进,由纯真的单机架构到容器化编排的分布式架构,可以说是一个大型互联网企业发展的必然走向。在网站初创时,应用数量和用户较少,可以把 Tomcat 和Mysql 部署在同一台机器上。随着用户数量增多,访问量增大,并发升高,Tomcat 和 MySQL 竞争资源,此时,单机已经扛不住了,需要把 Tomcat 和 MySQL 分离在不同的机器上,用于提升单台机器的处理能力。业务从来没有减少,产品越做越大。应用也越来越复杂,原来的大应用,拆分成多个小应用,加入各级缓存,做了反向代理负责均衡,最后坠入分库分表的深渊。

微服务渐渐代替了庞大冗杂的服务,每个小服务,各司其职。这时候是不是就不存在资源竞争的问题了呢?答案毋庸置疑,在架构的演进过程中,无时无刻都存在着资源竞争的问题。

说起资源竞争的问题,是不是想起了在计算机科学中的一个经典问题——哲学家就餐,也就是在并行计算中多线程同步( Synchronization )时产生的问题?哲学家就餐问题用来解释死锁和资源耗尽的问题,我们不做详细的讨论,感兴趣的同学可以搜索资料了解。既然存在资源竞争的问题,解决的方案必然是对资源加锁,对于锁大家肯定不陌生,在 Java 中synchronized 关键字和 ReentrantLock 可重入锁在我们的代码或者一些开源代码中随处可见的,一般用于在本地多线程环境中控制对资源的并发访问。但是随着微服务架构的蓬勃兴起,分布式的快速发展,本地加锁已经不能满足我们的业务需求,如果还通过本地加锁的方式锁定资源,在分布式环境中是无用的。于是人们为了在分布式环境中也能实现本地锁的效果,也是纷纷各出其招。

阅读剩下更多

默认配图
云原生技术栈

Kubeadm离线安装 单节点K8S

目标

  • 1.在所有节点上安装docker和kubeadm
  • 2.部署kubernetes master
  • 3.部署容器网络插件
  • 4.部署kubernetes worker
  • 5.部署dashboard可视化插件
  • 6.部署容器存储插件

操作系统版本

1
2
3
4
5
6
7
8
$ cat /proc/version
# Linux version 5.0.1-1.el7.elrepo.x86_64 (mockbuild@Build64R7) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)) #1 SMP Sun Mar 10 10:09:55 EDT 2019 bash

$ rpm -q centos-release
# centos-release-7-2.1511.el7.centos.2.10.x86_64

$ cat /etc/redhat-release
# CentOS Linux release 7.2.1511 (Core)

阅读剩下更多

默认配图
中间件技术栈

Wordpress站点的Nginx服务配置https

生成证书

参考《SSL证书生成》,生成适合于自己的免费证书。也可购买商业SSL证书。

如果只想生成CSR,用CSR在CA机构换取CRT证书,可以执行下面命令即可:

1
openssl req -new -nodes -newkey rsa:2048 -keyout server.key -out server.csr

配置Nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# 配置80端口跳转到443端口
server {
listen 80;
server_name www.abc.zyx;
# rewrite ^ https://$server_name$request_uri permanent;
rewrite ^(.*)$ https://$host$1 permanent;
}
# 配置WordPress的https服务
server {
#listen 80;
#listen [::]:80;
listen 443 ssl;
server_name www.abc.zyx;
charset utf-8;

ssl_certificate ssl/server.crt;
ssl_certificate_key ssl/server.key;
ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:CAMELLIA256-SHA:CAMELLIA128-SHA256";
ssl_session_cache shared:SSL:20m;
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

location / {
root /var/www/html/abc;
index index.html index.htm index.php;
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
try_files $uri $uri/ /index.php?$args;
}
#rewrite /wp-admin$ $scheme://$host$uri/ permanent;
#try_files $uri $uri/ /index.php?q=$uri&$args;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;

location = /50x.html {
root /var/www/html;
}

location ~ \.php$ {
root /var/www/html/abc;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
include fastcgi.conf;
try_files $uri =404;
}

location ~ /\.ht {
deny all;
}
}

注意:ssl_protocols配置项,不添加TLSv1会导致部分IE浏览器打不开,如果加上TLSv1用站长工具检测会提示PCI DSS 不合规。

重新加载配置文件:nginx -s reload

如果是阿里云ECS服务器,需要在控制台的安全组中增加入网的443端口,具体配置可以参照其他的配置。

如果这时候https还不能访问,则需要查看Ubuntu服务器是否开启了443端口,如果无,则需要开启。

查看443端口是否开启:

1
iptables -L -n | grep 443

开启443端口,并让其生效:

1
2
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
iptables-save

WordPress后台改成https访问

主题支持改动

如果主题中有修改网站URL的入口,则直接在admin管理后台修改即可。

如果使用的 WP Editor.md 插件,也需要修改思维导图库资源路径,一般情况下可以使用//替换http://,这样资源就可以根据站点的scheme自动切换了。

SQL UPDATE

1
2
3
4
5
6
7
update scat_posts
set post_content = replace(post_content, 'http://www.abc.xyz', '//www.abc.xyz')
where post_content like '%http://www.abc.xyz%';

update scat_posts
set guid = replace(guid, 'http://www.abc.xyz', 'https://www.abc.xyz')
where guid like '%http://www.abc.xyz%';

通过找到当前主题下的 function.php 文件

1
2
3
4
5
6
7
function replacehttp($content){
if( is_ssl() ){
$content = str_replace('http://www.abc.xyz', 'http://www.abc.xyz', $content);
}
return $content;
}
add_filter('the_content', 'replacehttp');

wp-config.php文件中添加

1
2
define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);

阅读剩下更多

默认配图
中间件技术栈

zookeeper客户端zkCli.sh命令使用

Usage

连接命令

1
zkCli.sh [-timeout 100] [-r] -server server-1:2181,server-2:2181,server-3:2181

-r :即使ZooKeeper服务器集群一半以上的服务器 down,也给客户端提供读服务。

客户端命令

命令 usage 示例
h 显示所有命令 ·
ls path 查看某个节点下的所有子节点信息 · ls / 列出根节点下所有的子节点信息
· ls /brokers/topics 列出 /brokers/topics 下的所有子节点信息
stat path 获取指定节点的状态信息 · stat /brokers/ids 查看 /brokers/ids 节点状态
get path 获取${path}节点的数据内容 get /controller 获取 /controller 节点的数据内容
ls2 path 是ls 和 stat两个命令的结合
create [-s] [-e] path data acl 创建节点,
-s 表示是顺序节点
-e 标识是临时节点
path 节点路径
data 节点数据
acl 节点权限
create /test_node testdata
create -e /test_node ‘test ephemera data’ 临时节点在客户端结束与服务器的会话后,自动消失
set path data [version] 修改当前节点的数据内容 如果指定版本,需要和当前节点的数据版本一致
delete path [version] 删除指定路径的节点 如果有子节点要先删除子节点
rmr path 删除当前路径节点及其所有子节点
setquota -n|-b val path 设置节点配额(比如限制节点数据长度,限制节点中子节点个数)
-n 是限制子节点个数 -b是限制节点数据长度
超出配额后,ZooKeeper不会报错,而是在日志信息中记录
listquota path 查看路径节点的配额信息
delquota [-n|-b] path 删除节点路径的配额信息
connect host:port 在当前连接中连接其他的ZooKeeper服务器
close 在当前连接中关闭正在连接的其他ZooKeeper服务器
history 查看客户端这次会话所执行的所有命令
redo cmdno 执行指定历史命令 redo 22

阅读剩下更多

默认配图
返回顶部