星辰大海

My Conquest Is the Sea of Stars.

文章转载自Nginx启用Let’s Encrypt SSL证书,根据实际搭建情况,略有修改

Let’ s Encrypt 是一个免费的 SSL/TLS 证书发行机构, 证书有效期为90天, 到期前30内可续期,因此不需要担心费用问题。

服务器环境:

  • nginx-1.10.1
  • php-7.0.4
  • mariadb-10.1.13

启用证书的主要过程包括:客户端安装、获取证书、配置Nginx、证书自动续期等几个方面。

客户端下载

Let’ s Encrypt客户端现已更名为certbot,客户端的地址为https://github.com/certbot/certbot/releases

1
2
3
4
5
6
7
8
#下载
wget https://github.com/certbot/certbot/archive/v1.5.0.tar.gz -O certbos.releases.tar.gz

#解压
tar xzvf certbos.releases.tar.gz

#进入目录
cd certbot-1.5.0

运行一次客户端,进行检查升级:

1
2
3
4
5
#进入目录
cd ~/certbot

#执行检查
./certbot-auto --help

如果没什么问题的话,会显示帮助文档。

获取证书

申请过程中要验证绑定的域名是否属于申请人, 其原理就是申请人在域名所在的服务器上申请证书, 然后 Let’ s Encrypt 会访问绑定的域名与客户端通信成功即可通过。

验证的方式有两种,一种是停止当前的 web server 服务, 让出 80 端口, 由客户端内置的 web server 启动与 Let’ s Encrypt 通信;一种是在域名根目录下创建一个临时目录, 并要保证外网通用域名可以访问这个目录,这种方式不需要停止当前的 web server 服务。

证书获取方式1:通过访问80端口方式验证

1
2
3
4
5
6
7
8
#停止nginx
systemctl stop nginx

#获取证书, --standalone 参数:使用内置web server. --email 参数:管理员邮箱,证书到期前会发邮件到此邮箱提醒. -d 参数:要绑定的域名,同一域的不同子域都要输入.
./certbot-auto certonly --standalone --email admin@4spaces.org -d ray.servehttp.com

#启动nginx
systemctl start nginx

证书获取方式2:通过临时目录验证

1
2
#--webroot 参数:指定使用临时目录的方式. -w 参数:指定后面-d 域名所在的根目录, 如果一次申请多个域的, 可以附加更多 -w...-d... 这段.
./certbot-auto certonly --webroot --email admin@4spaces.org -w /usr/share/nginx/html -d 4spaces.org -d www.4spaces.org

完成上面的操作即可获得 SSL 证书, 保存在 “/etc/letsencrypt/live/根域名/” 目录下, 会产生 4 个文件, 其中3个证书文件, 1个私钥文件. 不要移动证书的位置, 以免续期时出现错误。关于Letsencrypt使用的更多命令参见「这里」。

我这里是通过方式2申请的证书。

配置Nginx启用https

上面你的Nginx配置并没有启用ssl,下面我们需要开始配置nginx,让其支持https。进行这一步的前提是你前面已经成功生成证书。

编辑文件/etc/nginx/conf.d/default.conf(我是通过yum的方式安装的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
#设置非安全连接永久跳转到安全连接
server{
listen 80;
server_name 4spaces.org www.4spaces.org;
#告诉浏览器有效期内只准用 https 访问
add_header Strict-Transport-Security max-age=15768000;
#永久重定向到 https 站点
return 301 https://$server_name$request_uri;
}
server {
#启用 https, 使用 http/2 协议, nginx 1.9.11 启用 http/2 会有bug, 已在 1.9.12 版本中修复.
listen 443 ssl http2;
server_name 4spaces.org www.4spaces.org;
#首页
index index.php index.html index.htm;
#网站根目录
root /usr/share/nginx/4spaces;
#告诉浏览器当前页面禁止被frame
add_header X-Frame-Options DENY;
#告诉浏览器不要猜测mime类型
add_header X-Content-Type-Options nosniff;

#证书路径
ssl_certificate /etc/letsencrypt/live/4spaces.org/fullchain.pem;
#私钥路径
ssl_certificate_key /etc/letsencrypt/live/4spaces.org/privkey.pem;
#安全链接可选的加密协议
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#可选的加密算法,顺序很重要,越靠前的优先级越高.
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
#在 SSLv3 或 TLSv1 握手过程一般使用客户端的首选算法,如果启用下面的配置,则会使用服务器端的首选算法.
ssl_prefer_server_ciphers on;
#储存SSL会话的缓存类型和大小
ssl_session_cache shared:SSL:10m;
#缓存有效期
ssl_session_timeout 60m;

location / {
try_files $uri $uri/ /index.php?$args; #修改内容
}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#修改此处内容支持php
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include fastcgi_params;
}

}

证书续期

前面说了,证书的有效期是3个月,你可以在证书过期前的30天内,进行续期,也可以进行脚本自动续期。

方式1
进入你在下载的certbot客户端目录,执行证书续期的脚本命令如下:

1
./certbot-auto renew

renew 参数是官方推荐的续期方式, 使用这个参数会遍历 /etc/letsencrypt/live 下所有的证书, 如果证书在可续期的时间范围内(过期前30天内), 就会申请新的证书并替换原有证书, 否则跳过。

方式2

如果要指定更新某个域名的证书, 则要使用 certonly 参数, 其实和新申请证书时的命令差不多.

1
./certbot-auto certonly --webroot --renew-by-default --email admin@4spaces.org -w /usr/share/nginx/html -d 4spaces.org -d www.4spaces.org

方式3

上面两种方式,都是手动去执行的,我们可以将上面两种方式跟linux的定时任务进行结合,最终脚本如下:

1)通过端口验证的脚本

1
2
3
4
5
6
7
8
9
10
#!/bin/sh
#停止 nginx 服务,使用 --standalone 独立服务器验证需要停止当前 web server.
systemctl stop nginx
if ! /path/to/certbot-auto renew -nvv --standalone > /var/log/letsencrypt/renew.log 2>&1 ; then
echo Automated renewal failed:
cat /var/log/letsencrypt/renew.log
exit 1
fi
#启动 nginx
systemctl start nginx

2)通过临时目录的脚本

1
2
3
4
5
6
7
8
9
10
11
#!/bin/sh
# This script renews all the Let's Encrypt certificates with a validity < 30 days

if ! /path/to/certbot-auto renew > /var/log/letsencrypt/renew.log 2>&1 ; then
echo Automated renewal failed:
cat /var/log/letsencrypt/renew.log
exit 1
fi

# 需要重启nginx证书才能生效
systemctl restart nginx

上面两个脚本中的/path/to/certbot-auto代表你下载客户端解压后的目录,其中目录下有个certbot-auto

选取一种方式,将对应的脚本保存为 certbotrenew.sh

添加可执行权限

1
chmod +x certbotrenew.sh

编辑 crontab 配置文件或执行 crontab -e 添加 cron 任务

1
2
#编辑定时任务
sudo crontab -e

我这里设置为每月28号23点执行此脚本:

1
0 23 28 * * /bin/sh /home/michael/certbot/certbotrenew.sh

保存退出即可。

内容参考:

文章转载自CentOS 7通过yum安装Nginx,根据实际搭建情况,略有修改

创建文件:

1
vi /etc/yum.repos.d/nginx.repo

添加如下内容:

1
2
3
4
5
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

然后执行

1
sudo yum install nginx

具体配置:

1
vi /etc/nginx/nginx.conf

服务:

1
2
3
systemctl start nginx.service # 启动Nginx服务

systemctl enable nginx.service #开机自启

参考内容:

  1. http://nginx.org/en/linux_packages.html#mainline;
  2. https://gist.github.com/ifels/c8cfdfe249e27ffa9ba1;

文章转载自centos7基于nginx搭建v2ray服务端配置vmess+tls+websocket完全手册,根据实际搭建情况,略有修改

一直都是使用自建shadowsocks科学上网,服务很稳定,虽然v2ray出现了很久,但是没花心思研究两者之间有什么区别。后来无意间查询自己手机的上网记录,出现下图信息,我感觉还是让上网更隐蔽一点更好。

注意:使用下文的方法出现rejected v2ray.com/core/proxy/vmess/encoding: invalid user,搞不通,有空再验证试试

阅读全文 »

本文转载自java命令学习系列,文章内容略有调整。

Java开发必须掌握的线上问题排查命令

作为一个合格的开发人员,不仅要能写得一手还代码,还有一项很重要的技能就是排查问题。这里提到的排查问题不仅仅是在coding的过程中debug等,还包括的就是线上问题的排查。由于在生产环境中,一般没办法debug(其实有些问题,debug也白扯。。。),所以我们需要借助一些常用命令来查看运行时的具体情况,这些运行时信息包括但不限于运行日志、异常堆栈、堆使用情况、GC情况、JVM参数情况、线程情况等。

给一个系统定位问题的时候,知识、经验是关键,数据是依据,工具是运用知识处理数据的手段。为了便于我们排查和解决问题,Sun公司为我们提供了一些常用命令。这些命令一般都是jdk/lib/tools.jar中类库的一层薄包装。随着JVM的安装一起被安装到机器中,在bin目录中。下面就来认识一下这些命令以及具体使用方式。

阅读全文 »

本文并不会对所有命令进行详细讲解,只给出常见用法和解释。具体用法可以使用--help查看帮助或者直接通过google搜索学习。

查找文件

find / -name filename.txt 根据名称查找/目录下的filename.txt文件。

find . -name "*.xml" 递归查找所有的xml文件

find . -name "*.xml" |xargs grep "hello world" 递归查找所有文件内容中包含hello world的xml文件

grep -H 'spring' *.xml 查找所以有的包含spring的xml文件

find ./ -size 0 | xargs rm -f & 删除文件大小为零的文件

ls -l | grep '.jar' 查找当前目录中的所有jar文件

grep 'test' d* 显示所有以d开头的文件中包含test的行。

grep 'test' aa bb cc 显示在aa,bb,cc文件中匹配test的行。

grep '[a-z]\{5\}' aa 显示所有包含每个字符串至少有5个连续小写字符的字符串的行。

阅读全文 »

来自:MrLinFeng - 博客园 链接:www.cnblogs.com/mrlinfeng/p/6146866.html

使用的资源:

nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换。

tomcat服务器两台,由nginx进行反向代理和负载均衡,此处可搭建服务器集群。

redis服务器一台,用于session的分离共享。

nginx主服务器:192.168.50.133

nginx备服务器:192.168.50.135

tomcat项目服务器1:192.168.50.137

tomcat项目服务器2:192.168.50.139

redis服务器:192.168.50.140

注意访问时需要配置防火墙规则,或者关闭防火墙

阅读全文 »

**版权声明:**本文是Linux中国翻译,已按转载要求注明信息。
原文:http://www.linuxtechi.com/20-linux-commands-interview-questions-answers/
作者: Pradeep Kumar
译文:LCTT http://linux.cn/article-4790-1.html
译者: ZTinoZ

问:1 如何查看当前的Linux服务器的运行级别?

答: ‘who -r’ 和 ‘runlevel’ 命令可以用来查看当前的Linux服务器的运行级别。

问:2 如何查看Linux的默认网关?

答: 用 “route -n” 和 “netstat -nr” 命令,我们可以查看默认网关。除了默认的网关信息,这两个命令还可以显示当前的路由表。

阅读全文 »

工具类 就是封装平常用的方法,不需要你重复造轮子,节省开发人员时间,提高工作效率。谷歌作为大公司,当然会从日常的工作中提取中很多高效率的方法出来。所以就诞生了guava。。

  • 高效设计良好的API,被Google的开发者设计,实现和使用
  • 遵循高效的java语法实践
  • 使代码更刻度,简洁,简单
  • 节约时间,资源,提高生产力

Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:

  1. 集合 [collections]
  2. 缓存 [caching]
  3. 原生类型支持 [primitives support]
  4. 并发库 [concurrency libraries]
  5. 通用注解 [common annotations]
  6. 字符串处理 [string processing]
  7. I/O 等等。
阅读全文 »

所以下面我们就从二叉树到平衡二叉树,再到 B- 树,最后到 B+ 树来一步一步了解数据库索引底层的原理!

二叉树(Binary Search Trees)

二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(Left Subtree)和“右子树”(Right Subtree)。二叉树常被用于实现二叉查找树和二叉堆。

二叉树有如下特性

  • 每个结点都包含一个元素以及 n 个子树,这里 0≤n≤2。
  • 左子树和右子树是有顺序的,次序不能任意颠倒。左子树的值要小于父结点,右子树的值要大于父结点。
阅读全文 »

API 网关

什么是 API 网关

既然需要 API 网关为我所用,首先就让我们来了解一下什么是 API 网关。

什么是 API 网关

网关一词最早出现在网络设备,比如两个相互独立的局域网之间通过路由器进行通信,中间的路由被称之为网关。

任何一个应用系统如果需要被其他系统调用,就需要暴露 API,这些 API 代表着一个一个的功能点。

如果两个系统中间通信,在系统之间加上一个中介者协助 API 的调用,这个中介者就是 API 网关。

阅读全文 »
0%