一、Http 安全性
http 为何不安全
数据传输过程并没有加密,可以被拦截解包(尤其在公共场合不要连莫名其妙的 WiFi):

所以要增加安全的协议,而且这个协议服务端和客户端都要支持。
企业可以设定自己的加密算法内置在服务端,仅靠开源产品肯定不安全。
现在常见的方式是客户端和服务端沟通决定加密算法。
非对称加密原理
客户端上有公钥,服务端上有私钥。用户第一次请求不走 80,走 443 拿到公钥。
而且必须满足:公钥加密公钥解不开
之后传递数据的过程图和加密过程如下:

为何而需要 CA 机构、HTTPS 的伟大发明(CA 证书)
坏人!拦截客户端的包,代替客户端请求服务器拿到公钥,这样加密就没用了:

假的私钥解开数据还能改包,发给假数据给服务器。
CA 认证过程如下图(有点复杂,慢慢看):

域名所有者提交资料和费用,CA 机构认证域名对应的服务器的所有者是域名的所有者(要求所有者放指定文件在指定位置,这一点劫持者是做不到的),即认证权限。
CA 对服务器下发的公钥进行认证,CA 自己对公钥加密,生成一份证书:

服务器再次下发数据给客户端时,不下发公钥,下发 CA 的证书,而客户端自带 CA 的公钥可以解开 CA 证书(此过程劫持者没有 CA 私钥,无法伪装成 CA 机构)。
客户端解开证书获得服务器的公钥(劫持者无法用公钥解开数据),然后给服务器传输。
操作系统会内置 CA 机构的私钥,所以别乱装奇怪的操作系统和证书、用正版的浏览器,盗版的非常不安全,浏览器 url 的锁,是浏览器识别正版认证的标识。
想要查看 win 的证书,可以使用 Win + R 输入 certmgr.msc 所有内嵌在操作系统的证书都在此(如下图):

某些企业会再次用更深层的加密保护数据。
二、杂项
证书自签名(用的少)
可以用 OpenSSL(开源,地位最高)、图形化工具 XCA Download
购买域名和 vps
域名提供商有很多,最好去靠谱的大平台,防止卷走我们的域名跑路。
现在阿里云用的多,买完了最好改密码。
非对称加密太慢,只用来传钥匙。实际数据用对称加密。
三、LNMP 和 Discuz
基本配置
有一个很方便的安装集成网站 oneinstack.com 可以直接安装 Nginx 的集成版本。
wget -c http://mirrors.oneinstack.com/oneinstack.tar.gz && tar xzf oneinstack.tar.gz && ./oneinstack/install.sh --nginx_option 1 --php_option 9 --phpcache_option 1 --db_option 2 --dbinstallmethod 1 --dbrootpwd oneinstack --reboot
直接访问公网 IP 出现下面的页面则正常:

我们需要把默认的页面换成自己的 Nginx 页面。
使用编译安装的 Nginx 是集成版目录:
root@iZ2ze8uighngnzvz4mscv9Z:/usr/local/nginx# ll
total 44
drwxr-xr-x 11 root root 4096 May 22 18:51 ./
drwxr-xr-x 16 root root 4096 May 22 18:54 ../
drwx------ 2 www root 4096 May 22 18:51 client_body_temp/
drwxr-xr-x 2 root root 4096 May 22 18:51 conf/
drwx------ 2 www root 4096 May 22 18:51 fastcgi_temp/
drwxr-xr-x 2 root root 4096 May 22 18:51 html/
drwxr-xr-x 2 root root 4096 May 22 18:51 logs/
drwx------ 2 www root 4096 May 22 18:51 proxy_temp/
drwxr-xr-x 2 root root 4096 May 22 18:51 sbin/
drwx------ 2 www root 4096 May 22 18:51 scgi_temp/
drwx------ 2 www root 4096 May 22 18:51 uwsgi_temp/
# 直接进入到conf配置即可
有了 Xshell 直接用记事本编辑,找到 80 端口发现 root 默认配置目录
root /data/wwwroot/default;`可以修改为`root html;
也就是相对于安装 nginx 下的 html。
然后访问 80 端口验证是否配置成功:

在 html 修改信息时,中文乱码可以通过 <meta charset=utf-8> 插入到前面解决。
配置证书
在云厂商的平台申请证书,可以是免费的 SSL 证书,小企业域名少,免费的也够用的。
申请过程不同平台都是不一样的。
购买证书后就配置绑定域名然后填写信息、操作验证:

接着按照服务类型下载证书和密钥,传到服务器上,然后配置 server 块到 nginx 默认配置,写到最上头即可:
server {
listen 443 ssl;
server_name aa.abc.com; # 这个不写也强制走
ssl_certificate 文件名.pem; # 这里原本的格式是crt
ssl_certificate_key 文件名.key;
}
上传服务器的两个文件 key 和 pem 最好在 nginx/conf 下,默认从这里找配置,然后如上配置 nginx 的相对路径即可。
配置完成后 reload,看 status 没报错就成功了,尝试用 https 访问。
可能显示这样的:

意味着这个 CA 机构并不权威,还是显示不安全,可以点击 不安全,查看具体的信息。
discuz
这一部分可以先放一放。
Nginx 基础完毕,自此网站的基础配置也算了解完成了,但更重要的是如何解决实际需求——应对高并发的真实环境。
